Grafana Loki 安全性設定 (使用 IIS ARR)

上一篇文章有紀錄 Grafana 和 Loki 的安裝,但根據官網的說明,Grafana Loki 本身並不包含授權的功能,所以需要依靠 reverse proxy 來完成此需求,本篇則是使用 ARR 來進行設定。

前置條件

  1. 下載並安裝 URL Rewrite
  2. 下載並安裝 Application Request RoutingARR 相關設定可參考這一篇文章的說明。


Step1. URL 重寫 RewriteMaps 設定

此設定是為了,當 Client 端的請求包含了指定的 Custome Header,並且符合內部定義的 Key 時,會使用 value 值來取代,講人話就是,你的授權 Token 設定的地方,底下的設定代表,我核發了 Lawrence & Lawrence2 兩個 Token,若滿足條件,則比對其值 Y。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>  
  <system.webServer>
    <rewrite>
      <rewriteMaps>
        <rewriteMap name="Authorized Clients">
          <add key="Lawrence" value="Y" />
          <add key="Lawrence2" value="Y" />
        </rewriteMap>
      </rewriteMaps>
     </rewrite> 
  </system.webServer>
</configuration>


Step2. 新增 IIS 伺服器變數

在 Host 的 IIS 新增信任的伺服器變數,URL Rewrite → 管理伺服器變數 → 檢視伺服器變數. → HTTP_X_AUTHORIZED_ADMIN,等等會使用到此設定。


Step3. 符合 URL 重寫規則替換值

符合授權條件,將 HTTP_X_AUTHORIZED_ADMIN 值設定為 yes,這裡要分成兩個部分說明

  1. 授權條件檢查{Authorized Clients:{HEADER_Authorization}}
    • 當 Client 端請求的 Header 包含了 Authorization 這個欄位。
    • 若存在則會拿該欄位的 Value,去跟 Step1 的 Key 進行比對。
    • 若 Step1 的 Key 也存在,則比對值是否為 Y (這裡的 Y 可以自定義,只要跟 Step1 value 相符即可)。
  2. 滿足條件變數設定,若通過權限的檢查,則會將伺服器變數 HTTP_X_AUTHORIZED_ADMIN 的值設定為 yes (這裡的 yes也是自行定義,跟 Step4 步驟相符即可)。
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <!-- 符合授權條件,將 HTTP_X_AUTHORIZED_ADMIN 值設定為 yes -->
            <rule name="Flag Authorized Clients">
              <match url="(.*)" />
              <conditions>
                <add input="{Authorized Clients:{HEADER_Authorization}}" pattern="Y" />
                <add input="{HTTP_HOST}" pattern="devtools.primeeagle.net" />
              </conditions>
              <serverVariables>
                <set name="HTTP_X_AUTHORIZED_ADMIN" value="yes" />
              </serverVariables>
              <action type="None" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>


Step4. 符合 URL 重寫規則檢查授權

若遇到需要檢查的站台,則必須檢查伺服器變數 HTTP_X_AUTHORIZED_ADMIN 的值是否為 yes,若不是則導到 401 未授權頁面。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- 檢查是否 HTTP_X_AUTHORIZED_ADMIN 是否為 yes,若不是則轉到 401 -->
        <rule name="Block UnAuthorized Users Clients" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTP_X_AUTHORIZED_ADMIN}" pattern="yes" negate="true" />
            <add input="{HTTP_HOST}" pattern="devtools.primeeagle.net" />
          </conditions>
          <action type="CustomResponse" statusCode="401" statusReason="Loki Unauthorized" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
未通過授權畫面


參考網站

留言