對授權策略配置失誤可能會引起非預期的訪問被拒絕或允許存取。您可以使用ASM授權策略試運行模式,在不影響正式環境的情況下驗證授權策略的正確性和可靠性,降低生產環境出現問題的風險,確保授權策略的順利部署和運行。
前提條件
已添加叢集到ASM執行個體,且ASM執行個體版本為1.14及以上。關於如何升級執行個體,請參見升級ASM執行個體。
已建立名稱為foo的樣本命名空間並啟用自動注入。具體操作,請參見管理全域命名空間。
背景資訊
ASM授權策略支援為網格中的工作負載提供命名空間和工作負載層級的存取權限控制。由於授權策略屬於流量管控能力,對授權策略的配置失誤可能引起非預期的訪問被拒絕或允許存取,這對網格管理員的工作帶來了很大挑戰。一旦授權策略配置失誤,可能導致正常業務訪問被拒絕或應當被阻止的訪問被允許存取。為此,ASM提供了授權策略試運行模式來解決此類問題。對授權策略啟用試運行選項可以使授權策略在應用後並不實際阻止或允許存取流量,而是僅對策略的執行輸出日誌。網格管理員可以通過該日誌來判斷對應策略的執行結果是否符合預期,並可以參考日誌將策略調整至完全符合預期後,再關閉試運行模式,使授權策略真正生效。
本文樣本將部署sleep和httpbin兩個測試應用,整體流程如下:在sleep應用中通過curl訪問httpbin應用,驗證連通性後,在ASM中配置一個拒絕特定請求的授權策略並開啟試運行模式,然後發起可以匹配授權策略拒絕條件的請求。此時因為已啟用試運行模式,所以該請求不會被拒絕,同時Sidecar會輸出試啟動並執行執行日誌,供網格管理員確認該授權策略的執行情況。確認無誤後,關閉該授權策略的試運行模式,使授權策略生效。
步驟一:部署測試應用sleep和httpbin並測試連通性
使用以下內容,建立sleep.yaml檔案。
使用kubectl串連到叢集,執行以下命令,在foo命名空間部署sleep應用。
關於如何使用kubectl串連到叢集,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
kubectl apply -f sleep.yaml -n foo
使用以下內容,建立httpbin.yaml檔案。
執行以下命令,在foo命名空間部署httpbin應用。
kubectl apply -f httpbin.yaml -n foo
執行以下命令,測試sleep應用和httpbin應用之間的連通性。
for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; done
預期輸出:
200 200 200 ...
可以看到從sleep應用所在的Pod中執行curl命令訪問httpbin應用20次,傳回值均為200,表明網路連接正常。
步驟二:建立授權策略並啟用試運行模式
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 ,然後單擊建立。
在建立頁面,進行如下配置,然後單擊建立。
步驟三:觀察授權策略效果
執行以下命令,再次從sleep應用中訪問httpbin應用。
for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; done
預期輸出:
200 200 200 ...
可以看到由於授權策略啟用了試運行模式,所以請求仍然可以成功。
執行以下命令,將httpbin應用的Sidecar的RBAC記錄層級調整為Debug。
kubectl exec "$(kubectl get pod -l app=httpbin -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- curl -X POST 127.0.0.1:15000/logging?rbac=debug
預期輸出:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0active loggers: ... rbac: debug ... 100 1028 0 1028 0 0 1003k 0 --:--:-- --:--:-- --:--:-- 1003k
執行以下命令,從httpbin應用的Sidecar中篩選授權策略輸出的試作業記錄。
kubectl logs "$(kubectl -n foo -l app=httpbin get pods -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo | grep "shadow denied"
可以看到輸出的攔截日誌如下。
2023-12-20T03:58:47.107915Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130 shadow denied, matched policy ns[foo]-policy[test]-rule[0] thread=32 2023-12-20T03:58:48.800098Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130 shadow denied, matched policy ns[foo]-policy[test]-rule[0] thread=33 2023-12-20T03:58:50.420179Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130 shadow denied, matched policy ns[foo]-policy[test]-rule[0] thread=32
步驟四:關閉試運行模式
當您通過日誌判斷授權策略的執行結果符合預期後,可以關閉試運行模式,使授權策略真正生效。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在授權策略頁面,找到步驟二建立的授權策略,在試運行模式列下關閉開關,然後在確認對話方塊,單擊確認,關閉試運行模式。
使用以下命令,再次發起請求測試。
for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; done
預期輸出:
403 403 403 ...
可以看到因為授權策略已經生效,請求被拒絕,返回403代碼。
測試完畢後,執行以下命令,恢複Sidecar的記錄層級為Warning。
kubectl exec "$(kubectl get pod -l app=httpbin -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- curl -X POST 127.0.0.1:15000/logging?rbac=warning
預期輸出:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0active loggers: ... rbac: warning ... 100 1028 0 1028 0 0 1003k 0 --:--:-- --:--:-- --:--:-- 1003k
相關文檔
當您需要對叢集中的工作負載進行存取控制和許可權管理時,可以使用授權原則設定工作負載的訪問條件(例如限制請求路徑、方法和用戶端IP等),確保只有符合要求的請求才能訪問對應工作負載。具體操作,請參見為工作負載設定存取原則。
當您需要精細控制服務間的HTTP或TCP流量訪問時,可以為流量設定授權策略。具體操作,請參見為HTTP流量設定授權策略和為TCP流量設定授權策略。
如果您需要對網格外服務進行授權控制,請參見對網格內服務訪問外部網站進行授權控制和對網格內服務訪問外部資料庫進行授權控制。
您可以自訂ASM網關訪問日誌的內容,及時發現潛在的安全問題。具體操作,請參見產生和採集ASM網關訪問日誌。
您可以啟用網格審計功能,記錄或追溯不同使用者的日常操作,也可以為網格資源操作配置審計警示,在重要資源變動時及時發出警示通知到警示連絡人。具體操作,請參見使用KubeAPIAction Trail和為網格資源操作配置審計警示。