設定服務的稽核政策

本教學課程僅支援叢集內的控制平面實作

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

安裝次數

  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」

    前往「Logs Explorer」頁面

  4. 選取 Google Cloud 專案。

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

    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. 套用下列稽核政策,稽核 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
    
  3. 傳送一些要求給 Bookinfo。

  4. 在「Logs Explorer」中,在「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 傳送更多要求,然後在 Logs Explorer 中查看稽核記錄。稽核記錄現在會記錄所有要求:

    圖片

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

    kubectl delete authorizationpolicy audit-all -n default
    

疑難排解

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

  1. 請確認 Logs Explorer 中指定的時間範圍內有流量。如果您使用 Bookinfo 進行測試,可以執行下列指令數次來傳送要求:

    curl -s http://EXTERNAL_IP/productpage | grep Bookstore
    
  2. 檢查是否有 AuthorizationPolicy 在入口網關上,阻擋對受稽核服務的請求。

  3. 在「Logs Explorer」中使用下列篩選器查看 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
    

後續步驟