Contoh log untuk Workload Identity Federation

Halaman ini menunjukkan contoh log audit yang dibuat saat Anda menggunakan Workload Identity Federation. Dengan Workload Identity Federation, Anda dapat mengizinkan workload lokal atau multi-cloud untuk mengakses resource Google Cloud, tanpa menggunakan kunci akun layanan.

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

Log untuk menukar token IdP dengan token federasi

Setelah menyiapkan workload identity pool dan penyedia identitas (IdP), Anda dapat membuat token untuk IdP dan menukarnya dengan token federasi.

IAM dapat membuat log audit saat akun utama bertukar token. Guna menerima log audit untuk semua langkah dalam proses pertukaran token, Anda harus mengaktifkan log audit aktivitas Akses Data untuk API berikut:

  • Identity and Access Management (IAM) API (aktifkan jenis log "Pembacaan Admin")
  • API Layanan Token Keamanan (aktifkan jenis log "Pembacaan Admin")

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

  • protoPayload.authenticationInfo.principalSubject: Subjek token IdP.
    • Di Amazon Web Services (AWS), kolom ini berisi Amazon Resource Name (ARN) dari akun utama yang telah Anda autentikasi.
    • Di Microsoft Azure, kolom ini berisi ID objek dari identitas terkelola yang Anda tetapkan sebagai subjek token Azure.
    • Untuk IdP OIDC lainnya, kolom ini berisi nilai sub, atau subjek, klaim dari token OIDC.
  • protoPayload.metadata.mapped_principal: Subjek token, menggunakan sintaksis IAM untuk mengidentifikasi akun utama:

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName: Penyedia workload identity pool yang dikaitkan dengan token tersebut.

Contoh berikut menunjukkan entri log audit untuk permintaan pertukaran token. Dalam contoh ini, token Microsoft Azure ditukar dengan token federasi:

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

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 Workload 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/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_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 terpasang ke penyedia workload identity pool.
  • resourceName: nama resource dari kunci penyedia workload identity pool yang digunakan untuk mendekripsi pernyataan SAML terenkripsi. Kolom ini hanya ada jika federasi identitas menerima respons SAML terenkripsi dari IdP Anda.

Log untuk federasi X.509

Bagian ini menjelaskan entri log dari Cloud Audit Logs yang dibuat oleh Layanan Token Keamanan saat mencoba memverifikasi sertifikat klien mTLS dengan trust store yang telah dikonfigurasi sebelumnya.

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

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

Output ini mencakup nilai-nilai berikut:

  • certificateType: jenis sertifikat yang terlibat dalam verifikasi sertifikat klien, yang dapat berupa trust_anchor atau intermediate_ca
  • timeUntilExpiration: waktu yang tersisa dalam detik hingga masa berlaku sertifikat berakhir saat digunakan dalam verifikasi rantai sertifikat
  • fingerprintSha256: representasi heksadesimal hash SHA-256 dari sertifikat X.509

Log untuk membuat kredensial berumur pendek untuk akun layanan

Setelah menukar token IdP dengan token federasi, Anda dapat menggunakan token tersebut untuk membuat kredensial berumur pendek untuk akun layanan. Semua layanan Google memungkinkan Anda melakukan autentikasi dengan kredensial berumur pendek ini.

Setelah Anda mengaktifkan log audit IAM untuk aktivitas Akses Data, IAM menghasilkan entri log audit setiap kali akun utama membuat kredensial berumur pendek untuk akun layanan. Entri log ini mencakup kolom berikut:

  • protoPayload.authenticationInfo.principalSubject: Subjek token federasi.
  • resource.labels.email_id: Akun layanan tempat kredensial berumur pendek dibuat.

Contoh berikut menunjukkan entri log audit untuk permintaan membuat token akses OAuth 2.0 berumur pendek untuk akun layanan. Dalam contoh ini, permintaan diautentikasi dengan kredensial gabungan, lalu kredensial berumur pendek dibuat untuk akun layanan 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"
  }
}

Log untuk mengautentikasi dengan kredensial akun layanan yang ditiru identitasnya

Setelah membuat kredensial berumur pendek untuk akun layanan, Anda dapat menggunakan kredensial tersebut untuk meniru identitas akun layanan saat memanggil Google Cloud API.

Beberapa metode yang Anda panggil mungkin menghasilkan log audit. Secara umum, entri log ini menunjukkan identitas berikut:

  • Akun layanan dengan kredensial singkat yang ditiru identitasnya
  • Identitas yang membuat kredensial dengan masa aktif singkat

Misalnya, pengguna jamie@example.com membuat token federasi untuk subjek principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com, lalu menggunakan token tersebut untuk membuat kredensial berumur pendek untuk akun layanan my-service-account@my-project.iam.gserviceaccount.com.

Kemudian, pengguna membuat topik Pub/Sub baru menggunakan kredensial berumur pendek untuk meniru identitas akun layanan. Pub/Sub menghasilkan entri log yang mengidentifikasi akun layanan, serta subjek token dari 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"
  }
}

Langkah selanjutnya