Workload Identity 聯盟的記錄範例

本頁面提供使用 Workload Identity Federation 時產生的稽核記錄範例。透過 Workload Identity 聯盟,您可以允許地端部署或多雲端工作負載存取 Google Cloud 資源,不必使用服務帳戶金鑰。

如要進一步瞭解如何啟用及查看稽核記錄,請參閱「IAM 稽核記錄」。

將 IdP 權杖換成聯合權杖的記錄

設定工作負載身分集區和身分提供者 (IdP) 後,即可為 IdP 建立權杖,並將其換成同盟權杖。

主體交換權杖時,IAM 可以產生稽核記錄。如要接收權杖交換程序所有步驟的稽核記錄,您必須為下列 API啟用資料存取活動的稽核記錄

  • Identity and Access Management (IAM) API (啟用「管理員讀取」記錄類型)
  • Security Token Service API (啟用「管理員讀取」記錄類型)

啟用資料存取活動的稽核記錄後,每當主體交換權杖時,IAM 就會產生稽核記錄項目。記錄項目包含下列欄位:

  • protoPayload.authenticationInfo.principalSubject:IdP 權杖的主體。
    • 在 Amazon Web Services (AWS) 上,這個欄位包含您驗證的主體 Amazon Resource Name (ARN)。
    • 在 Microsoft Azure 中,這個欄位包含您指定為 Azure 權杖主體的受管理身分物件 ID。
    • 如果是其他 OIDC IdP,這個欄位會包含 OIDC 權杖中的 sub 或主體聲明值。
  • protoPayload.metadata.mapped_principal:權杖主體,使用 IAM 語法識別主體:

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName:權杖相關聯的工作負載身分集區提供者。

以下範例顯示要求交換權杖的稽核記錄檔項目。在這個範例中,Microsoft Azure 權杖已換成同盟權杖:

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "b6112abb-5791-4507-adb5-7e8cc306eb2e"
    },
    "metadata": {
      "mapped_principal": "principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/subject/a1234bcd-5678-9012-efa3-4b5cd678ef9a"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeToken",
    "resourceName": "projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/providers/azure",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeTokenRequest",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

已簽署及加密 SAML 宣告的記錄

本節說明 Security Token Service 嘗試驗證已簽署的 SAML 判斷或解密從 IdP 傳送的加密判斷時,建立的 Cloud 稽核記錄記錄項目。

如果是 Workload Identity 聯盟,相關的記錄項目如下所示:

"keyInfo": [
  {
    "use": "verify"
    "fingerprint": "3C:B2:47:F8:A5:9A:8A:52:BD:1C:BC:96:B5:45:C1:8D:A7:F1:73:2D"
  },
  {
    "use": "decrypt"
    "resourceName": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_POOL_NAME/providers/PROVIDER_NAME/keys/KEY_NAME"
  }
]

這項輸出內容包含下列值:

  • fingerprint:用於驗證 SAML 憑證簽章的 X.509 憑證 SHA-256 雜湊十六進位表示法。系統會從附加至工作負載身分集區提供者的 SAML XML 中繼資料中,擷取 X.509 憑證。
  • resourceName:用於解密加密 SAML 判斷的 workload 身分集區提供者金鑰資源名稱。只有在身分同盟收到來自 IdP 的加密 SAML 回應時,才會顯示這個欄位。

X.509 聯盟的記錄

本節說明 Security Token Service 嘗試使用預先設定的信任儲存區驗證 mTLS 用戶端憑證時,建立的 Cloud 稽核記錄記錄項目。

如果是 Workload Identity 聯盟,相關的記錄項目如下所示:

"keyInfo": [
  {
    "certificateType": "trust_anchor"
    "timeUntilExpiration": 3333405600s
    "fingerprintSha256": "e33f612a0e426692f29db2c7b17b9e3810ce13f09ad117c67e7227a84fd25ea5"
    "use": "verify"
  }

這項輸出內容包含下列值:

  • certificateType:用戶端憑證驗證所涉及的憑證類型,可以是 trust_anchorintermediate_ca
  • timeUntilExpiration:憑證在憑證鏈驗證中使用時,距離到期所剩的時間 (以秒為單位)
  • fingerprintSha256:X.509 憑證的 SHA-256 雜湊十六進位表示法

為服務帳戶建立短期憑證的記錄

將 IdP 權杖換成聯合權杖後,您可以使用聯合權杖為服務帳戶建立短期憑證。所有 Google 服務都允許您使用這些短期憑證進行驗證。

為資料存取活動啟用 IAM 稽核記錄後,每當主體為服務帳戶產生短期憑證,IAM 就會產生稽核記錄項目。記錄項目包含下列欄位:

  • protoPayload.authenticationInfo.principalSubject:聯盟權杖的主體。
  • resource.labels.email_id:產生短期憑證的服務帳戶。

以下範例顯示稽核記錄檔項目,其中包含為服務帳戶產生短期 OAuth 2.0 存取權杖的要求。在本範例中,要求已透過聯合憑證完成驗證,且已為服務帳戶 my-service-account@my-project.iam.gserviceaccount.com 建立短期憑證:

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/012345678901"
    },
    "methodName": "GenerateAccessToken",
    "request": {
      "@type": "type.googleapis.com/google.iam.credentials.v1.GenerateAccessTokenRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901"
  },
  "resource": {
    "labels": {
      "email_id": "my-service-account@my-project.iam.gserviceaccount.com",
      "project_id": "my-project",
      "unique_id": "123456789012345678901"
    },
    "type": "service_account"
  }
}

使用模擬服務帳戶的憑證進行驗證的記錄

為服務帳戶建立短期憑證後,您可以在呼叫 Google CloudAPI 時,使用憑證模擬服務帳戶。

您呼叫的部分方法可能會產生稽核記錄。一般來說,這些記錄項目會顯示下列身分:

  • 短期憑證模擬的服務帳戶
  • 建立短期憑證的身分

舉例來說,假設使用者 jamie@example.com 為主體 principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com 建立同盟權杖,然後使用同盟權杖為服務帳戶 my-service-account@my-project.iam.gserviceaccount.com 建立短期憑證。

接著,使用者會使用短期憑證模擬服務帳戶,建立新的 Pub/Sub 主題。Pub/Sub 會產生記錄項目,其中包含服務帳戶和 IdP 憑證主體:

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountDelegationInfo": [
        {
          "principalSubject": "principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/012345678901"
        }
      ]
    },
    "methodName": "google.pubsub.v1.Publisher.CreateTopic",
    "request": {
      "@type": "type.googleapis.com/google.pubsub.v1.Topic",
      "name": "projects/my-project/topics/my-topic"
    },
    "resourceName": "projects/my-project/topics/my-topic"
  },
  "resource": {
    "type": "pubsub_topic"
  }
}

後續步驟