Workload Identity 連携の監査ログ

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

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

連携トークン用の ID プロバイダのトークンを交換する

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

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

  • Identity and Access Management(IAM)API
  • Security Token Service API

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

  • protoPayload.authenticationInfo.principalSubject: ID プロバイダ トークンのサブジェクト。
    • Amazon Web Services(AWS)では、このフィールドに、認証したプリンシパルの Amazon Resource Name(ARN)が含まれます。
    • Microsoft Azure では、このフィールドに、Azure トークンのサブジェクトとして指定したマネージド ID のオブジェクト ID が含まれます。
    • 他の OIDC ID プロバイダの場合、このフィールドには 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"
  }
}

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

ID プロバイダのトークンを連携トークンと交換したら、連携トークンを使用してサービス アカウントに有効期間が短い認証情報を作成できます。すべての 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 は、サービス アカウントと、ID プロバイダのトークンのサブジェクトを識別するログエントリを生成します。

{
  "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"
  }
}

次のステップ