設定服務的稽核政策

本教學課程僅支援叢內控制層實作

稽核政策可讓您稽核 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 安裝作業:

安裝次數

  1. 按照「安裝 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 時需要的任何其他疊加檔案。

  2. 完成 Cloud Service Mesh 安裝程序,即可在工作負載上啟用自動補充資訊 Proxy 插入功能。請參閱「部署與重新部署工作負載」。

升級

  1. 按照「升級 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 時需要的任何其他疊加檔案。

  2. 完成 Cloud Service Mesh 安裝程序,即可在工作負載上啟用自動補充資訊 Proxy 插入功能。詳情請參閱「切換至新的控制層」。

使用稽核記錄

本節會使用 Bookinfo 範例,示範如何使用稽核記錄。

  1. Bookinfo 範例應用程式部署至預設命名空間。

  2. 取得 Ingress 閘道的外部 IP 位址,並傳送要求至範例應用程式,產生一些流量。

  3. 前往 Google Cloud 控制台的導覽選單 ,然後依序選取「Logging」 >「Logs Explorer」

    前往記錄檔探索工具

  4. 選取 Google Cloud 專案。

  5. 由於您尚未部署稽核政策,因此不會有任何稽核記錄。請注意,稽核記錄與存取記錄不同。如要查看 stackdriver 存取記錄,請在「Query builder」(查詢建構工具) 欄位中輸入下列查詢,然後按一下「Run query」(執行查詢)

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    如要進一步瞭解如何使用記錄檔探索工具,請參閱「記錄檔探索工具總覽」。

設定稽核政策及查看稽核記錄

本節提供多個稽核 Bookinfo 應用程式的選項。部署稽核政策後,您可以傳送一些要求,然後在記錄檔探索工具中查看稽核記錄。

  1. 輸入下列指令,取得與叢集互動的驗證憑證。這個指令也會將叢集的目前內容設為 kubectl

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    
  2. 套用下列稽核政策,稽核對 /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
    
  3. 傳送一些要求至 Bookinfo。

  4. 在記錄檔探索工具的「Query builder」(查詢建立工具) 欄位中輸入下列查詢,然後按一下「Run query」(執行查詢)

    logName="projects/PROJECT_ID/logs/server-istio-audit-log"
    

    查詢會傳回類似下列內容的記錄:

    圖片

  5. 將下列政策套用至服務的稽核要求。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
    

    新的稽核政策必須先傳播,才會生效。

  6. 對 Bookinfo 傳送 10 個以上的請求,確保您觸及評分服務,然後在記錄檔探索工具中查看稽核記錄。稽核記錄類似於下列內容:

    圖片

  7. 將下列政策套用至預設命名空間中的所有服務,以進行稽核。

    kubectl apply -f - << EOF
    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      namespace: default
      name: "audit-all"
    spec:
      action: AUDIT
      rules:
        - {}
    EOF
    
  8. 再傳送一些要求給 Bookinfo,然後在記錄檔探索工具中查看稽核記錄。稽核記錄現在會記錄所有要求:

    圖片

  9. 如要將稽核政策限制回 ProductPage 和 Ratings,可以刪除 audit-all 政策:

    kubectl delete authorizationpolicy audit-all -n default
    

疑難排解

啟用稽核政策後,如果沒有看到任何稽核記錄,請檢查下列事項:

  1. 確認記錄檔探索工具中指定的時間範圍內有流量。 如果您使用 Bookinfo 進行測試,可以多次執行下列指令來傳送要求:

    curl -s http://EXTERNAL_IP/productpage | grep Bookstore
    
  2. 檢查是否有 AuthorizationPolicy 阻擋對稽核服務的要求。

  3. 在記錄探索器中套用下列篩選器,檢查 stackdriver 存取記錄,確認要求是否已送達應用程式:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    圖片

  4. 如要確保 Stackdriver 已設定且稽核記錄已啟用,請傾印目前 istiod 狀態的設定。在 config_dump 中搜尋 enable_audit_log 和稽核政策名稱。

    istioctl dashboard envoy POD_NAME.NAMESPACE
    

    圖片 圖片 圖片

  5. 如要確保要求符合稽核政策規則,可以查看角色型存取權控管 (RBAC) 偵錯記錄。使用下列指令開啟 RBAC 偵錯記錄:

    kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'
    
  6. 傳送一些要求,然後使用 kubectl logs 指令檢查 Pod 的記錄:

    kubectl logs POD_NAME -n NAMESPACE -c istio-proxy
    

後續步驟