Workload Identity 連携のログの例

このページでは、Workload Identity 連携の使用時に生成される監査ログの例を紹介します。Workload Identity 連携を使用すると、サービス アカウント キーを使用せずに、オンプレミスまたはマルチクラウドのワークロードに Google Cloud リソースへのアクセスを許可できます。

監査ログの有効化と表示については、IAM 監査ロギングをご覧ください。

連携トークン用の IdP トークン交換のログ

Workload Identity プールと ID プロバイダ(IdP)を設定したら、IdP 用のトークンを作成し、連携トークンと交換できます。

IAM によって、プリンシパルがトークンを交換する際に監査ログを生成できます。トークン交換プロセスのすべてのステップで監査ログを受信するには、次の API に対してデータアクセス アクティビティの監査ログを有効にする必要があります。

  • Identity and Access Management(IAM)API(ログタイプ「管理読み取り」を有効にする)
  • Security Token Service API(ログタイプ「管理読み取り」を有効にする)

データアクセス アクティビティの監査ログを有効にすると、プリンシパルがトークンを交換するたびに、IAM によって監査ログエントリが生成されます。このログエントリは、次のフィールドで構成されています。

  • protoPayload.authenticationInfo.principalSubject: IdP トークンの件名。
    • アマゾン ウェブ サービス(AWS)では、このフィールドに、認証したプリンシパルの Amazon Resource Name(ARN)が含まれます。
    • Microsoft Azure では、このフィールドに、Azure トークンのサブジェクトとして指定したマネージド ID のオブジェクト 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: トークンが関連付けられている Workload Identity プールのプロバイダ。

次の例は、トークンを交換するリクエストの監査ログエントリを示しています。この例では、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 アサーションのログ

このセクションでは、SAML のアサーションの検証または IdP から送信された暗号化されたアサーションの復号を試行するときに、Security Token Service で作成される Cloud Audit Logs のログエントリについて説明します。

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 ハッシュを 16 進数で表したものです。X.509 証明書は、Workload Identity プール プロバイダに接続されている SAML XML メタデータから抽出されます。
  • resourceName: 暗号化された SAML アサーションの復号に使用された Workload Identity プール プロバイダの鍵のリソース名。このフィールドは、ID 連携が IdP から暗号化された SAML レスポンスを受信する場合にのみ存在します。

X.509 連携のログ

このセクションでは、事前構成されたトラストストアで mTLS クライアント証明書の検証を試みるときに、Security Token Service によって作成される Cloud Audit Logs のログエントリについて説明します。

Workload Identity 連携の場合、関連するログエントリは次のようになります。

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

この出力には次の値が含まれます。

  • certificateType: クライアント証明書の検証に関連する証明書のタイプ。trust_anchor または intermediate_ca のいずれか。
  • timeUntilExpiration: 証明書チェーン検証で使用される証明書の残りの有効期間(秒単位)
  • fingerprintSha256: X.509 証明書の SHA-256 ハッシュを 16 進数で表したもの。

有効期間が短いサービス アカウント認証情報の作成に関するログ

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 Cloud APIs を呼び出すことができます。

メソッドによっては、呼び出すと監査ログが生成される場合があります。一般的に、このようなログエントリには次の ID が示されます。

  • 有効期間の短い認証情報が成り代わるサービス アカウント
  • 有効期間の短い認証情報を作成した ID

たとえば、ユーザー 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"
  }
}

次のステップ