設定服務的稽核政策

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

稽核政策可讓您稽核 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,系統可能會遺失部分工作負載的稽核記錄 (如果未保留)。

事前準備

按照「安裝依附工具並驗證叢集」中的步驟操作,以便:

準備閘道設定

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」

    前往記錄檔探索工具

  4. 選取 Google Cloud 專案。

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

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

    如要進一步瞭解如何使用 Logs Explorer,請參閱「Logs Explorer 總覽」。

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

本節提供多個稽核 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. 在記錄檔探索工具的「查詢建立工具」欄位中輸入下列查詢,然後按一下「執行查詢」

    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 個以上的要求,確保您觸及評分服務,然後在 Logs Explorer 中檢查稽核記錄。稽核記錄類似於下列內容:

    圖片

  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
    

後續步驟