Contoh log untuk Workforce Identity Federation

Halaman ini menunjukkan contoh log audit yang dibuat saat Anda menggunakan Workforce Identity Federation. Dengan Workforce Identity Federation, Anda dapat mengizinkan identitas pihak ketiga untuk mengakses resource Google Cloud, tanpa menggunakan kunci akun layanan.

Untuk informasi selengkapnya tentang cara mengaktifkan dan melihat log audit, lihat logging audit IAM.

IAM dapat menghasilkan log audit saat Anda membuat dan mengelola kumpulan tenaga kerja. Untuk mengaktifkan log audit saat mengelola kumpulan tenaga kerja, Anda harus mengaktifkan log audit untuk aktivitas Akses Data untuk API berikut:

  • Identity and Access Management (IAM) API (mengaktifkan jenis log "Pembacaan Admin")

Guna mengonfigurasi log audit lebih lanjut untuk proses pertukaran token atau login konsol Google Cloud (gabungan), Anda juga harus mengaktifkan log audit untuk aktivitas Akses Data untuk hal berikut API:

  • Security Token Service API (aktifkan jenis log "Pembacaan Admin")

Log untuk membuat kumpulan tenaga kerja

Contoh berikut menampilkan entri log untuk membuat kumpulan tenaga kerja. Dalam contoh ini, pengguna sam@example.com membuat kumpulan tenaga kerja dengan ID my-pool di bawah organisasi dengan ID 123456789012.

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

Log untuk menukar token IdP untuk token gabungan

Setelah menyiapkan kumpulan identitas tenaga kerja dan penyedia kumpulan identitas tenaga kerja, Anda dapat membuat token untuk penyedia identitas (IdP) dan menukarnya dengan token gabungan.

Setelah Anda mengaktifkan Cloud Audit Logs untuk aktivitas Akses Data, IAM akan menghasilkan entri log audit setiap kali akun utama bertukar token. Entri log ini mencakup kolom berikut:

  • protoPayload.authenticationInfo.principalSubject: Subjek token IdP.
    • Untuk IdP OIDC, kolom ini berisi nilai klaim sub, atau subjek, dari token OIDC.
    • Untuk IdP SAML, kolom ini berisi nilai sub-atribut NameID dari atribut Subject dalam pernyataan SAML.
  • protoPayload.metadata.mapped_principal: Subjek token, menggunakan sintaksis IAM untuk mengidentifikasi akun utama:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: Penyedia kumpulan tenaga kerja yang dikaitkan dengan token.

Contoh berikut menunjukkan entri log audit untuk permintaan penukaran token. Dalam contoh ini, token OIDC ditukar dengan token gabungan:

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

Log untuk pernyataan SAML yang ditandatangani dan dienkripsi

Bagian ini menjelaskan entri log dari Cloud Audit Logs yang dibuat oleh Layanan Token Keamanan saat mencoba memverifikasi pernyataan SAML yang ditandatangani atau mendekripsi pernyataan terenkripsi yang dikirim dari IdP Anda.

Untuk Workforce Identity Federation, entri log terkait terlihat mirip dengan berikut ini:

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

Output ini mencakup nilai-nilai berikut:

  • fingerprint: representasi heksadesimal hash SHA-256 dari sertifikat X.509 yang digunakan untuk memverifikasi tanda tangan pada kredensial SAML. Sertifikat X.509 diekstrak dari metadata XML SAML yang dilampirkan ke penyedia workforce identity pool.
  • resourceName: nama resource kunci penyedia workforce identity pool kerja yang digunakan untuk mendekripsi pernyataan SAML terenkripsi. Kolom ini hanya ada jika federasi identitas menerima respons SAML terenkripsi dari IdP Anda.

Log untuk memanggil Google Cloud API dengan token gabungan

Setelah menukar token IdP dengan token gabungan, Anda dapat menggunakan token gabungan untuk memanggil Google Cloud API. Beberapa metode yang Anda panggil dapat menghasilkan log audit.

Contoh berikut menunjukkan entri log audit untuk permintaan guna mencantumkan bucket Cloud Storage dalam suatu project menggunakan token gabungan.

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

Log untuk login (gabungan) konsol Google Cloud

Setelah Anda menyiapkan kumpulan identitas tenaga kerja dan IdP-nya, pengguna dapat login ke Google Cloud menggunakan konsol (gabungan).

Log untuk login yang berhasil

Bagian ini memberikan contoh entri Log Audit Cloud yang dicatat ke dalam log sebagai hasil dari login yang berhasil. Dalam contoh ini, pengguna, user@example.com, login menggunakan locations/global/workforcePools/my-pool/providers/my-provider penyedia. Dalam hal ini, entri Cloud Audit Logs berikut akan dibuat:

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

Entri Cloud Audit Logs untuk penyedia SAML juga dapat berisi informasi kunci penandatanganan di kolom metadata.

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

Log untuk login yang gagal

Bagian ini memberikan contoh entri Cloud Audit Logs yang dicatat ke dalam log sebagai hasil dari login yang gagal. Dalam contoh ini, pengguna user@example.com mencoba login menggunakan locations/global/workforcePools/my-pool/providers/my-provider penyedia, tetapi akses ditolak karena kondisi atribut tidak terpenuhi. Dalam hal ini, entri Cloud Audit Logs berikut akan dibuat:

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

Log untuk logout

Bagian ini memberikan contoh entri Log Audit Cloud yang dicatat ke dalam log sebagai hasil dari peristiwa logout. Dalam contoh ini, pengguna user@example.com, yang login menggunakan locations/global/workforcePools/my-pool/providers/my-provider penyedia akan memulai logout. Dalam hal ini, entri Cloud Audit Logs berikut akan dibuat:

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

Log untuk login dengan alur OAuth

Setelah menyiapkan kumpulan identitas tenaga kerja dan penyedia kumpulan identitas tenaga kerja, Anda dapat menggunakan resource Google Cloud menggunakan alur OAuth.

Setelah Anda mengaktifkan Cloud Audit Logs untuk aktivitas log audit Akses Data, IAM akan membuat entri log audit setiap kali akun utama menggunakan alur OAuth untuk login. Entri log ini mencakup kolom berikut:

  • protoPayload.authenticationInfo.principalSubject: Subjek token IdP.
    • Untuk IdP OIDC, kolom ini berisi nilai klaim sub, atau subjek, dari token OIDC.
    • Untuk IdP SAML, kolom ini berisi nilai sub-atribut NameID dari atribut Subject dalam pernyataan SAML.
  • protoPayload.metadata.mapped_principal: Subjek token, menggunakan sintaksis IAM untuk mengidentifikasi akun utama:

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: Penyedia kumpulan tenaga kerja yang dikaitkan dengan token.

Contoh berikut menunjukkan entri log audit untuk permintaan penukaran token. Dalam contoh ini, akun utama digabungkan menggunakan penyedia 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"
  }
}

Langkah selanjutnya