驗證身分核發和使用情形


聯絡。

本頁說明如何使用記錄,檢查 Google Kubernetes Engine (GKE) 叢集控制層核發及使用 Kubernetes 身分 (以憑證和服務帳戶權杖的形式)。這項驗證完全是選擇性步驟,不影響控制層的安全。

本指南適用於安全管理員和平台擁有者,他們對憑證核發和簽署的控管有特定的機構法規遵循或政策要求。您應已設定自我管理的金鑰和 CA,並具備 GKE 控制層授權。

您應該已熟悉下列概念:

本頁說明 GKE 中一組選用控制層功能,可讓您執行驗證控制層安全狀態等工作,或使用您管理的金鑰在控制層中設定加密和憑證簽署。詳情請參閱「關於 GKE 控制層授權」。

根據預設, Google Cloud 會對受管理控制層套用各種安全措施。 本頁說明選用功能,可讓您進一步瞭解或控管 GKE 控制層。

關於身分證件核發記錄

GKE 身分識別核發記錄是控制層稽核記錄,會記錄控制層核發憑證的時間,以及這些憑證在叢集中的使用時間。您可以將身分識別核發記錄與 Cloud KMS、憑證授權單位服務和 Kubernetes API 記錄建立關聯,追蹤憑證的生命週期,包括核發和使用情況。使用 GKE 控制層授權時,系統會啟用 GKE 身分識別簽發記錄。這些記錄會追蹤下列憑證的核發和使用情況:

  • X.509 憑證
  • 叢集 JSON Web Token (JWT)

X.509 憑證

Kubernetes 會使用 X.509 憑證進行用戶端憑證驗證。 如要核發憑證,Kubernetes 控制平面會將已核准的CertificateSigningRequest 傳送至 CA 服務中的憑證授權單位 (CA)。然後,憑證授權單位會使用 Cloud KMS 中的對應金鑰簽署憑證摘要,藉此核發憑證。

Kubernetes API 伺服器記錄包含以憑證驗證的任何 Kubernetes API 呼叫的憑證簽章詳細資料。記錄中的憑證 ID 項目格式如下:

"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"

CERTIFICATE_HASH 值是憑證的 SHA256 雜湊,可用於追蹤憑證的生命週期。

您可以透過 Kubernetes API 伺服器憑證記錄,關聯下列服務的記錄,追蹤憑證的生命週期:

  • GKE 身分發放記錄:使用 protoPayload.metadata.credentialId 查詢,根據 Kubernetes API 伺服器記錄中的憑證 ID,找出特定 GKE 身分發放記錄。然後使用 GKE 身分識別核發記錄中的 protoPayload.metadata.certificateFingerprint 欄位,將身分識別核發記錄與 CA 服務記錄建立關聯。
  • CA 服務記錄:找出憑證核發記錄項目,其中包含下列 ID:
    • cert_fingerprint.sha256_hash:簽署憑證的 SHA256 雜湊。您可以使用這個 ID,將記錄檔與 GKE 和 Kubernetes API 事件進行比對。
    • tbs_certificate_digest:傳送至 Cloud KMS 金鑰簽署的憑證內容雜湊值。您可以使用這個 ID 比對記錄與 Cloud KMS 記錄。
  • Cloud KMS 簽署記錄:使用 CA 服務記錄中的 tbs_certificate_digest 值,確認憑證是由預期的 Cloud KMS 金鑰簽署。

JSON Web Token (JWT)

簽署的 JWT (JSON Web Token) 會做為叢集中實體的持有者權杖,例如 Kubernetes 服務帳戶,用於驗證 Kubernetes API 的要求。建立使用特定服務帳戶的 Pod 時,Kubernetes 會建立 JWT 並掛載至 Pod。使用 GKE 控制平面授權執行自己的金鑰和 CA 時,系統會使用 Cloud KMS 中的服務帳戶簽署金鑰簽署這個 JWT,並在稍後進行驗證。

Kubernetes API 伺服器記錄包含以 JWT 驗證的任何 Kubernetes API 呼叫的權杖簽章詳細資料。記錄中的權杖簽章項目格式如下:

"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"

JWT_ID 值是字串,用於識別 Kubernetes API 呼叫中使用的 JWT。

您可以透過 Kubernetes API 伺服器記錄中的 JWT ID,關聯下列記錄來追蹤 JWT 的生命週期:

  • GKE 身分識別核發記錄:使用 Kubernetes API 伺服器記錄中的 JWT ID,找出特定 JWT 核發項目。每個項目也包含 toBeSignedDigest 欄位,其值可與 Cloud KMS 記錄相符。
  • Cloud KMS 簽署記錄:使用 GKE 身分識別核發記錄中的 toBeSignedDigest 欄位值,確認預期的 Cloud KMS 金鑰已簽署 JWT。

定價

在本文件中,您會使用 Google Cloud的下列計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用資格。

事前準備

  1. 使用自行管理的 CA 或金鑰設定 GKE 叢集控制層

  2. 啟用下列 Cloud 稽核記錄服務 API:

必要的角色

如要取得存取身分證書記錄所需的權限,請要求管理員為您授予專案的下列 IAM 角色:

  • 在 Logging 中執行所有操作: Logging 管理員 (roles/logging.admin)。
  • 查看記錄: 「私人記錄檢視者」 (roles/logging.privateLogViewer)。

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

需求條件和限制

請務必遵守下列規定和限制:

  • 您必須使用 GKE 1.31.1-gke.1846000 以上版本。
  • 身分證件核發記錄會以 Cloud 稽核記錄的形式記錄,並保留 400 天。保留期限無法設定,但您可以將系統事件稽核記錄傳送至其他目的地,以延長保留期限。

驗證憑證

您可以透過 GKE 控制平面授權單位身分識別核發記錄,確認憑證是否已成功核發或使用。您可以透過下列任一記錄或記錄組合,確認憑證核發和使用資訊:

憑證記錄

用於憑證的 Kubernetes API 記錄

每當憑證用於 Kubernetes API 時,系統就會記錄憑證簽章詳細資料。

憑證核發作業的 GKE 記錄

將所有憑證核發作業記錄為系統事件稽核記錄。如果叢集使用 GKE 控制層授權使用者管理的金鑰或 CA,系統預設會啟用這些記錄。

CA 服務稽核記錄

每次核發憑證時,系統都會記錄項目。

Cloud KMS 稽核記錄

每當摘要簽署完畢,回應 CA 服務的簽署要求時,就會記錄項目。

使用 Kubernetes API 記錄驗證憑證用量

如要找出使用憑證通過驗證的 API 呼叫記錄項目,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

  2. 將下列運算式貼到查詢編輯器欄位:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"X509SHA256="
    
  3. 點選「執行查詢」

    這項查詢會傳回所有與 X.509 憑證相關聯的 Kubernetes API 伺服器記錄。使用安全工具或手動檢查記錄,找出要調查的特定記錄項目。

如要將這些記錄與其他記錄類型建立關聯,請找出下列欄位:

"authentication.k8s.io/credential-id":"CREDENTIAL_ID"

CREDENTIAL_ID 值是可用於關聯 GKE、CA Service 和 Cloud KMS 記錄的 ID。CREDENTIAL_ID 的形式為 "X509SHA256=CERTIFICATE_HASH"

使用 GKE 記錄檔驗證憑證核發作業

如要尋找憑證核發事件的 GKE 記錄項目,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」頁面

  2. 將下列運算式貼到查詢編輯器欄位中:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    resource.type="gke_cluster"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.metadata.credentialId="CREDENTIAL_ID"
    

    更改下列內容:

  3. 點選「執行查詢」

透過 CA 服務記錄驗證憑證核發作業

如要尋找與 GKE 憑證核發事件相符的 CA 服務記錄,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」頁面

  2. 將下列運算式貼到查詢編輯器欄位中:

    resource.type="audited_resource"
    protoPayload.serviceName="privateca.googleapis.com"
    protoPayload.methodName="google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate"
    protoPayload.response.certificate_description.cert_fingerprint.sha256_hash="CERTIFICATE_HASH"
    

    CERTIFICATE_HASH 替換為「使用 Kubernetes API 記錄驗證憑證使用情形」一節中的 CERTIFICATE_HASH。請務必從雜湊值中省略 X509SHA256= 前置字元。

  3. 點選「執行查詢」

    這項查詢會傳回含有 tbs_certificate_digest: DIGEST_VALUE 欄位的記錄,位於憑證說明回應部分。

您可以使用 DIGEST_VALUE比對憑證的 Cloud KMS 簽署記錄

使用 Cloud KMS 簽署記錄驗證憑證核發作業

如要找出 CA 服務憑證核發事件的 Cloud KMS 簽署事件,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」頁面

  2. 將下列運算式貼到查詢編輯器欄位:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    DIGEST_VALUE 替換為「透過 CA 服務記錄驗證憑證核發作業」一節中的摘要值。

  3. 點選「執行查詢」

    這項查詢會傳回憑證核發事件的記錄。Cloud KMS 記錄不會區分憑證和 JWT,因此兩者的記錄項目相同。

驗證權杖

您可以透過 GKE 控制平面授權身分核發記錄和 Cloud KMS 簽署記錄,確認是否已成功核發 JSON Web Token (JWT)。

追蹤權杖核發事件通常會從監控 Kubernetes API 記錄中的服務帳戶活動開始。找出需要進一步調查的活動記錄後,您可以使用下列記錄確認憑證核發和使用情形的相關資訊:

JWT 記錄

Kubernetes API 記錄檔 (適用於 JWT 用途)

每當 JWT 用於 Kubernetes API 時,系統就會記錄 JWT 簽章詳細資料。

JWT 簽發作業的 GKE 記錄

將所有權杖核發作業記錄為系統事件稽核記錄。如果叢集使用 GKE 控制層授權使用者管理的金鑰或 CA,系統預設會啟用這些記錄。

Cloud KMS 稽核記錄

每當簽署及核發權杖時,系統就會記錄項目。

使用 Kubernetes API 伺服器記錄驗證權杖用量

如要找出權杖使用事件的記錄項目,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」頁面

  2. 將下列運算式貼到查詢編輯器欄位中:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"JTI="
    
  3. 點選「執行查詢」

    這項查詢會傳回所有含有相關聯 JWT 的 Kubernetes API 伺服器記錄。 使用安全工具或手動檢查記錄,找出要調查的特定記錄項目。

如要將這些記錄與其他記錄類型建立關聯,請找出下列欄位:

"authentication.k8s.io/credential-id": "JTI=JWT_ID"

JWT_ID 是權杖 ID,可用於關聯 GKE 和 Cloud KMS 的記錄。

使用 GKE 記錄檔驗證權杖核發作業

如要找出權杖核發事件的記錄項目,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」頁面

  2. 將下列運算式貼到查詢編輯器欄位中:

    resource.type="gke_cluster"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT"
    protoPayload.metadata.credentialId="JTI=JWT_ID"
    

    更改下列內容:

  3. 點選「執行查詢」

    這項查詢會傳回含有 toBeSignedDigest 欄位的記錄。

您可以使用 toBeSignedDigest 值找出 Cloud KMS 簽署事件。

使用 Cloud KMS 簽署記錄驗證權杖核發作業

如要找出已簽署摘要的記錄項目,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

  2. 將下列運算式貼到查詢編輯器欄位中:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    DIGEST_VALUE 替換為「使用 GKE 記錄驗證權杖核發作業」一節中 toBeSignedDigest 欄位的值。

  3. 點選「執行查詢」

    這項查詢會傳回憑證核發事件的記錄。Cloud KMS 記錄不會區分憑證和 JWT,因此兩者的記錄項目相同。

後續步驟