Workforce Identity 連携のログの例

このページでは、Workforce Identity 連携の使用時に生成される監査ログの例を紹介します。Workforce Identity 連携を使用すると、サービス アカウント キーを使用せずに、サードパーティの ID で Google Cloud リソースにアクセスできるようになります。

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

IAM は、従業員プールの作成と管理時に監査ログを生成できます。従業員プールを管理するときに監査ログを有効にするには、次の API のデータアクセス アクティビティの監査ログを有効にする必要があります。

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

トークン交換プロセスまたは Google Cloud コンソール(連携)ログインの監査ログをさらに構成するには、以下の API に対してデータアクセス アクティビティの監査ログを有効にする必要もあります。

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

Workforce プールを作成するためのログ

次の例は、Workforce プールを作成するためのログエントリを示しています。この例では、ユーザー sam@example.com が、ID 123456789012 の組織の ID に my-pool という Workforce プールを作成しました。

{
  "logName": "organizations/123456789012/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "sam@example.com",
    },
    "methodName": "google.iam.admin.v1.WorkforcePools.CreateWorkforcePool",
    "resourceName": "locations/global/workforcePools/my-pool",
    "serviceName": "iam.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.iam.admin.v1.CreateWorkforcePoolRequest",
      "workforcePool": {
        "parent": "organizations/123456789012"
      },
      "workforcePoolId": "my-pool"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

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

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

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

  • protoPayload.authenticationInfo.principalSubject: IdP トークンの件名。
    • OIDC IdP の場合、このフィールドには OIDC トークンの sub またはサブジェクト クレームの値が含まれます。
    • SAML IdP の場合、このフィールドには SAML アサーションの Subject 属性の NameID サブ属性の値が含まれます。
  • protoPayload.metadata.mapped_principal: IAM 構文を使用してプリンシパルを特定するトークンのサブジェクト。

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: トークンが関連付けられている従業員プール プロバイダ。

次の例は、トークンを交換するリクエストの監査ログエントリを示しています。この例では、OIDC トークンが連携トークンと交換されます。

{
  "logName": "organizations/123456789012/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/locations/global/workforcePools/oidc-pool/subject/a1234bcd-5678-9012-efa3-4b5cd678ef9a"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeToken",
    "resourceName": "locations/global/workforcePools/oidc-pool/providers/oidc-provider",
    "serviceName": "sts.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeTokenRequest",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/oidc-pool/providers/oidc-provider",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange",
      "requestedTokenType": "urn:ietf:params:oauth:token-type:access_token",
      "subjectTokenType": "urn:ietf:params:oauth:token-type:id_token"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

署名および暗号化された SAML アサーションのログ

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

Workforce 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/locations/global/workforcePools/WORKFORCE_POOL_NAME/providers/PROVIDER_NAME/keys/KEY_NAME"
  }
]

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

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

連携トークンを使用した Google Cloud APIs の呼び出しのログ

IdP のトークンを連携トークンと交換したら、連携トークンを使用して Google Cloud APIs を呼び出すことができます。メソッドによっては、呼び出すと監査ログが生成される場合があります。

次の例は、連携トークンを使用してプロジェクト内の Cloud Storage バケットを一覧表示するためのリクエストの監査ログエントリを示しています。

{
  "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/locations/global/workforcePools/oidc-pool/subject/012345678901"
    },
    "methodName": "storage.buckets.list",
    "serviceName": "storage.googleapis.com",
  },
  "resource": {
    "type": "gcs_bucket"
  }
}

Google Cloud コンソール(連携)ログインのログ

Workforce Identity プールとその IdP を設定すると、ユーザーはコンソール(連携)を使用して Google Cloud にログインできるようになります。

ログイン成功のログ

このセクションでは、ログイン成功の結果としてログに記録される Cloud Audit Logs のエントリの例を示します。この例では、ユーザー user@example.com がプロバイダ locations/global/workforcePools/my-pool/providers/my-provider を使用してログインしています。この場合、次の Cloud Audit Logs エントリが生成されます。

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "resourceName": "locations/global/workforcePools/my-pool/providers/my-provider",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignInRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "continueUrl": "https://console.cloud.google",
      "host": "http://auth.cloud.google",
    },
    "metadata": {
       "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn",
    }
  },
}

SAML プロバイダの Cloud Audit Logs エントリでは、メタデータ フィールドに署名鍵情報が含まれている場合があります。

{
  "metadata": {
    "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    "keyInfo": [
      {
        "use": "verify",
        "fingerprint": "AE:CK:LM:EF:LK:OG:EH:IJ:KN:AL:OM:AD:NO",
      }
    ],
  }
}

ログイン失敗のログ

このセクションでは、ログイン失敗の結果としてログに記録される Cloud Audit Logs のエントリの例を示します。この例では、ユーザー user@example.com はプロバイダ locations/global/workforcePools/my-pool/providers/my-provider を使用してログインを試みましたが、属性条件を満たしていないため、アクセスが拒否されました。この場合、次の Cloud Audit Logs エントリが生成されます。

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "status": {
      "code": 3,
      "message": "The given credential is rejected by the attribute condition.",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "resourceName": "locations/global/workforcePools/my-pool/subject/user@example.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignInRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "host": "http://auth.cloud.google",
    },
    "metadata": {
      "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn",
    }
  },
}

ログアウトのログ

このセクションでは、ログアウト イベントの結果としてログに記録される Cloud Audit Logs のエントリの例を示します。この例では、プロバイダ locations/global/workforcePools/my-pool/providers/my-provider を使用してログインしているユーザー user@example.com がログアウトを開始します。この場合、次の Cloud Audit Logs エントリが生成されます。

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignOut",
    "resourceName": "locations/global/workforcePools/my-pool/providers/my-provider",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignOutRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "host": "http://auth.cloud.google"
    },
    "metadata": {
      "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignOut"
    }
  },
}

OAuth フローによるログインのロギング

Workforce Identity プールと Workforce Identity プール プロバイダを設定したら、OAuth フローを使用して Google Cloud リソースを使用できます。

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

  • protoPayload.authenticationInfo.principalSubject: IdP トークンの件名。
    • OIDC IdP の場合、このフィールドには OIDC トークンの sub またはサブジェクト クレームの値が含まれます。
    • SAML IdP の場合、このフィールドには SAML アサーションの Subject 属性の NameID サブ属性の値が含まれます。
  • protoPayload.metadata.mapped_principal: IAM 構文を使用してプリンシパルを特定するトークンのサブジェクト。

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: トークンが関連付けられている従業員プール プロバイダ。

次の例は、トークンを交換するリクエストの監査ログエントリを示しています。この例では、OIDC プロバイダを使用してプリンシパルが連携されています。

{
  "logName": "organizations/123456789012/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/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeOauthToken",
    "resourceName": "locations/global/workforcePools/POOL_ID/providers/PROVIDER_ID",
    "serviceName": "sts.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeOauthTokenRequest",
      "grantType": "authorization_code",
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

次のステップ