當您需要在服務網格中進行身分識別驗證和授權控制時,可以在ASM安全性原則中配置JWT(JSON Web Token)認證,確保只有攜帶有效JWT的請求才能訪問受保護的資源,提高服務間通訊的安全性和隱私保護。
背景資訊
JWT是一種常用的身份認證和鑒權機制。JWT中會攜帶一些使用者資訊和一個儲存加密後資訊的欄位。將加密後的資訊欄位進行解密,與原始使用者資訊欄位進行比較,可以驗證該使用者的資訊是否有效,從而完成身份認證。
前提條件
已建立網關規則和虛擬服務,確保以下路徑可以正常訪問。具體操作,請參見使用Istio資源實現版本流量路由的步驟一到步驟三。
http://${網關地址}/productpage http://${網關地址}/api/v1/products/1 http://${網關地址}/static/jquery.min.js
操作步驟
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在ASM安全性原則頁面,單擊建立。
在建立ASM安全性原則對話方塊,單擊JWT認證,然後單擊確定。
在JWT認證配置設定精靈,進行相關配置,然後單擊下一步。
配置項
配置樣本
ASM安全性原則名稱
test-jwt
認證規則
Issuer
testing@secure.istio.io
JWKS來源
jwks
Key
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
在工作負載和匹配規則設定精靈,單擊添加工作負載組。在建立工作負載組對話方塊,進行相關配置,單擊確定,然後單擊提交。
本樣本配置如下。
配置項
說明
工作負載組名稱
配置為test-policy。
工作負載列表
單擊添加工作負載。
在添加工作負載對話方塊,選擇網關生效。
在選擇負載地區,選中目標負載,單擊表徵圖,將選中的負載添加到已選擇地區,然後單擊確定。
匹配規則列表
匹配模式有以下兩種:
選中請求必須經過認證:請求必須攜帶正確的JWT,才能訪問成功。
選中請求可跳過認證:不攜帶JWT或者攜帶正確JWT的請求可以訪問成功,攜帶錯誤的JWT的請求會訪問失敗。
本樣本匹配模式選擇選中請求必須經過認證,匹配規則選中自訂匹配規則,單擊添加匹配規則,進行如下配置。
規則1:開啟HTTP路徑(Path)開關,配置為/static/*。
規則2:開啟HTTP路徑(Path)開關,配置為/api/*。
建立成功後,在完成設定精靈,會顯示ASM安全性原則建立成功。您可以單擊查看YAML查看建立的資源,也可以單擊完成,返回ASM安全性原則頁面,查看新建立的安全性原則。
驗證JWT認證配置是否生效。
執行以下命令,進行訪問測試。
curl -I http://${網關地址}/productpage # 返回200。 curl -I http://${網關地址}/api/v1/products/1 # 返回403。 curl -I http://${網關地址}/static/jquery.min.js # 返回403。 # 設定JWT。 TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # 下面請求均返回200。 curl -I http://${網關地址}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${網關地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${網關地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"
按照上文的配置規則,以
/api
和/static
開頭的請求必須攜帶正確的JWT,才能訪問成功;以/productpage
開頭的請求不攜帶JWT或者攜帶正確的JWT,才能訪問成功。訪問結果與代碼中注釋一致,表明JWT認證配置生效。修改JWT認證的配置規則。
在ASM安全性原則頁面的操作列,單擊目標JWT認證安全性原則對應的編輯。
在JWT認證配置設定精靈,單擊下一步。
在工作負載和匹配規則設定精靈的操作列,單擊目標工作負載組對應的編輯。
在建立工作負載組對話方塊,修改相關配置,單擊確定,然後單擊提交。
本樣本配置如下。
配置項
說明
匹配模式
選擇選中請求可跳過認證。
匹配規則
移除
/api/*
匹配規則,僅保留/static/*
匹配規則。
執行以下命令,驗證修改後的JWT認證配置是否生效。
curl -I http://${網關地址}/productpage # 返回403。 curl -I http://${網關地址}/api/v1/products/1 # 返回403。 curl -I http://${網關地址}/static/jquery.min.js # 返回200。 # 設定JWT。 TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # 下面請求均返回200。 curl -I http://${網關地址}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${網關地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${網關地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"
按照修改後的配置規則,以
/static
開頭的請求不攜帶JWT或者攜帶正確的JWT,才能訪問成功;其他請求必須攜帶正確的JWT,才能訪問成功。訪問結果與代碼中注釋一致,表明修改後的JWT認證配置生效。
相關文檔
關於ASM安全性原則的概念和相關功能說明,請參見ASM安全性原則概述。
您可以啟用網格審計功能,記錄或追溯不同使用者的日常操作,也可以為網格資源操作配置審計警示,在重要資源變動時及時發出警示通知到警示連絡人。具體操作,請參見使用KubeAPIAction Trail和為網格資源操作配置審計警示。