設定服務的稽核政策
Google Cloud 詳情請參閱 Cloud Service Mesh 總覽。本教學課程僅支援叢內控制層實作。
稽核政策可讓您稽核 Cloud Service Mesh 中服務的資料存取權。稽核服務可協助您回答「誰在何時做了什麼,以及可能的原因」。您可以透過稽核政策,指定稽核記錄的建立時間和記錄內容。本指南說明如何安裝 Cloud Service Mesh,以便使用稽核政策。
由於您是在 Google Cloud 控制台的 Cloud Logging 記錄檔探索工具中查看稽核記錄,因此稽核政策僅支援下列平台:
- GKE on Google Cloud
- 適用於 VMware 的 Google Distributed Cloud (僅限軟體)
- 適用於裸機的 Google Distributed Cloud (僅限軟體)
稽核政策會新增 AUDIT
動作,藉此擴充 AuthorizationPolicy。這項政策只會在目標政策範圍 (可以是工作負載、命名空間或整個網格) 內生效。這些政策是「或」關係,也就是說,只要有任何政策規定要記錄要求,系統就會記錄。如果特定工作負載不適用任何稽核政策,系統就不會為該工作負載產生稽核記錄。ORed
以下是稽核政策範例,可稽核 myapi
中 /user/profile/*
路徑的所有 WRITE 存取權:
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,系統可能會遺失部分工作負載的稽核記錄 (如果未保留)。
事前準備
按照「安裝依附工具並驗證叢集」一文中的步驟操作,以便:準備閘道設定
您可以選擇在服務網格中部署及管理閘道。閘道說明在網格邊緣運作的負載平衡器,可接收傳入或傳出的 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
存取記錄,請在「Query builder」(查詢建構工具) 欄位中輸入下列查詢,然後按一下「Run query」(執行查詢):logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
如要進一步瞭解如何使用記錄檔探索工具,請參閱「記錄檔探索工具總覽」。
設定稽核政策及查看稽核記錄
本節提供多個稽核 Bookinfo 應用程式的選項。部署稽核政策後,您可以傳送一些要求,然後在記錄檔探索工具中查看稽核記錄。
輸入下列指令,取得與叢集互動的驗證憑證。這個指令也會將叢集的目前內容設為
kubectl
。gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
套用下列稽核政策,稽核對
/productpage
路徑的GET
要求: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。
在記錄檔探索工具的「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,然後在記錄檔探索工具中查看稽核記錄。稽核記錄現在會記錄所有要求:
如要將稽核政策限制回 ProductPage 和 Ratings,可以刪除
audit-all
政策:kubectl delete authorizationpolicy audit-all -n default
疑難排解
啟用稽核政策後,如果沒有看到任何稽核記錄,請檢查下列事項:
確認記錄檔探索工具中指定的時間範圍內有流量。 如果您使用 Bookinfo 進行測試,可以多次執行下列指令來傳送要求:
curl -s http://EXTERNAL_IP/productpage | grep Bookstore
檢查是否有
AuthorizationPolicy
阻擋對稽核服務的要求。在記錄探索器中套用下列篩選器,檢查
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