Grafana Loki 安全性設定 (使用 IIS ARR)
在上一篇文章有紀錄 Grafana 和 Loki 的安裝,但根據官網的說明,Grafana Loki 本身並不包含授權的功能,所以需要依靠 reverse proxy 來完成此需求,本篇則是使用 ARR 來進行設定。
前置條件
- 下載並安裝 URL Rewrite。
- 下載並安裝 Application Request Routing,ARR 相關設定可參考這一篇文章的說明。
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,這裡要分成兩個部分說明
- 授權條件檢查,{Authorized Clients:{HEADER_Authorization}}
- 當 Client 端請求的 Header 包含了 Authorization 這個欄位。
- 若存在則會拿該欄位的 Value,去跟 Step1 的 Key 進行比對。
- 若 Step1 的 Key 也存在,則比對值是否為 Y (這裡的 Y 可以自定義,只要跟 Step1 value 相符即可)。
- 滿足條件變數設定,若通過權限的檢查,則會將伺服器變數 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>
未通過授權畫面 |
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。