設定服務的稽核政策
Google Cloud 詳情請參閱「Cloud Service Mesh 總覽」。本教學課程僅支援叢集內的控制平面實作。
稽核政策可讓您稽核 Cloud Service Mesh 中服務的資料存取權。稽核服務有助於回答「誰在何時做了什麼,以及為何如此」這類問題。您可以透過稽核政策指定稽核記錄的建立時間和記錄內容。本指南說明如何安裝 Cloud Service Mesh,以便使用稽核政策。
您會在 Google Cloud 控制台的 Cloud Logging 記錄檔探索工具中查看稽核記錄,因此稽核政策僅支援下列平台:
- Google Cloud上的 GKE
- 適用於 VMware 的 Google Distributed Cloud (僅限軟體)
- 適用於裸機的 Google Distributed Cloud (僅限軟體)
稽核政策會透過新增 AUDIT
動作來擴充 AuthorizationPolicy。這項政策只會在目標政策範圍內生效 (可為工作負載、命名空間或整個網格)。政策會ORed
一起運作,也就是說,只要有任何政策要求,就會記錄要求。如果沒有稽核政策套用至特定工作負載,就不會為該工作負載產生稽核記錄。
以下是稽核政策範例,可稽核 myapi
中 /user/profile/*
路徑的所有寫入存取權:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
namespace: ns1
name: anyname
spec:
selector:
matchLabels:
app: myapi
action: AUDIT
rules:
- to:
- operation:
methods: ["POST", "UPDATE", "DELETE"]
paths: ["/user/profile/*"]
限制
- ingress-gateway 上沒有稽核記錄。
- 稽核內容無法設定。
- 目前,Cloud Service Mesh 稽核記錄與一般存取記錄具有相同的可靠性屬性。舉例來說,如果工作負載 Pod 重新啟動,則部分工作負載稽核記錄可能會遺失。
事前準備
按照「安裝依附工具並驗證叢集」中的步驟操作,以便:準備閘道設定
Cloud Service Mesh 可讓您選擇部署及管理服務網格中的閘道。閘道是指在邊緣運作的負載平衡器,用於接收或傳送 HTTP/TCP 連線。閘道是 Envoy 代理程式,可讓您精細控管進入及離開網格的流量。
asmcli
不會安裝 istio-ingressgateway
。建議您分別部署及管理控制層和閘道。詳情請參閱「安裝及升級閘道」。
自訂 Cloud Service Mesh 安裝作業
如要使用稽核政策,請自訂 Cloud Service Mesh 安裝作業:
安裝次數
請按照「安裝 Cloud Service Mesh」中的步驟操作。執行
asmcli install
時,請加入下列選項:--option audit-authorizationpolicy
例如:
./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --ca mesh_ca \ --output_dir DIR_PATH \ --enable_all \ --option audit-authorizationpolicy
請務必指定您需要設定 Cloud Service Mesh 的任何其他覆蓋檔案。
完成 Cloud Service Mesh 安裝作業,即可在工作負載中啟用自動補充資訊 Proxy 注入功能。請參閱「部署及重新部署工作負載」。
升級
請按照「升級 Cloud Service Mesh」中的步驟操作。執行
asmcli install
時,請加入下列選項:--option audit-authorizationpolicy
例如:
./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --ca mesh_ca \ --output_dir DIR_PATH \ --enable_all \ --option audit-authorizationpolicy
請務必指定您需要設定 Cloud Service Mesh 的任何其他覆蓋檔案。
完成 Cloud Service Mesh 安裝作業,即可在工作負載中啟用自動補充資訊 Proxy 注入功能。詳情請參閱「切換至新的控制層」
使用稽核記錄
本節會使用 Bookinfo 範例,說明如何使用稽核記錄。
將 Bookinfo 範例應用程式部署至預設命名空間。
取得 ingress 閘道的外部 IP 位址,並傳送要求至範例應用程式,產生一些流量。
在 Google Cloud 控制台的導覽選單
中,依序選取「Logging」 >「Logs Explorer」:選取 Google Cloud 專案。
由於您尚未部署稽核政策,因此不會有任何稽核記錄。請注意,稽核記錄與存取記錄不同。如要查看
stackdriver
存取記錄,請在「查詢建構工具」欄位中輸入以下查詢,然後按一下「執行查詢」:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
如要進一步瞭解如何使用記錄檔探索工具,請參閱「記錄檔探索工具總覽」。
設定稽核政策及查看稽核記錄
本節提供幾種稽核 Bookinfo 應用程式的選項。部署稽核政策後,您可以傳送一些要求,然後在記錄檔探索工具中查看稽核記錄。
輸入下列指令,取得用於與叢集互動的驗證憑證。這個指令也會將
kubectl
的目前背景資訊設為叢集。gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
套用下列稽核政策,稽核
GET
要求至/productpage
路徑:kubectl apply -f - << EOF apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "audit-productpage" namespace: default spec: action: AUDIT rules: - to: - operation: methods: ["GET"] paths: ["/productpage"] EOF
傳送一些要求給 Bookinfo。
在「Logs Explorer」中,在「Query builder」欄位中輸入以下查詢,然後按一下「Run query」:
logName="projects/PROJECT_ID/logs/server-istio-audit-log"
查詢會傳回類似以下的記錄:
將下列政策套用至
bookinfo-ratings
服務的稽核要求。稽核政策屬於外加規則,套用下列政策後,您會看到 ProductPage 和 Ratings 要求的稽核記錄。kubectl apply -f - << EOF apiVersion: "security.istio.io/v1beta1" kind: "AuthorizationPolicy" metadata: name: "audit-ratings" namespace: default spec: action: AUDIT rules: - from: - source: principals: ["cluster.local/ns/default/sa/bookinfo-ratings"] to: - operation: methods: ["GET"] EOF
新的稽核政策必須先套用,才會生效。
請向 Bookinfo 傳送 10 個以上的要求,確保您已觸及評分服務,然後在記錄檔探索工具中查看稽核記錄。稽核記錄會類似以下內容:
套用下列政策,對預設命名空間中的所有服務進行稽核。
kubectl apply -f - << EOF apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: namespace: default name: "audit-all" spec: action: AUDIT rules: - {} EOF
請向 Bookinfo 傳送更多要求,然後在 Logs Explorer 中查看稽核記錄。稽核記錄現在會記錄所有要求:
如要將稽核政策限制為 ProductPage 和 Ratings,可以刪除
audit-all
政策:kubectl delete authorizationpolicy audit-all -n default
疑難排解
如果啟用稽核政策後,您沒有看到任何稽核記錄,請檢查以下幾項事項:
請確認 Logs Explorer 中指定的時間範圍內有流量。如果您使用 Bookinfo 進行測試,可以執行下列指令數次來傳送要求:
curl -s http://EXTERNAL_IP/productpage | grep Bookstore
檢查是否有
AuthorizationPolicy
在入口網關上,阻擋對受稽核服務的請求。在「Logs Explorer」中使用下列篩選器查看
stackdriver
存取記錄,確認要求是否已傳送至應用程式:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
為確保 Stackdriver 已設定且稽核記錄已啟用,請轉儲目前
istiod
狀態的設定。在config_dump
中搜尋enable_audit_log
和稽核政策名稱。istioctl dashboard envoy POD_NAME.NAMESPACE
為確保您的要求符合稽核政策規則,您可以查看角色型存取控管 (RBAC) 偵錯記錄。使用下列指令啟用 RBAC 偵錯記錄:
kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'
傳送一些要求,然後使用
kubectl logs
指令檢查 Pod 的記錄:kubectl logs POD_NAME -n NAMESPACE -c istio-proxy