Workload Identity Federation

Dokumen ini memberikan ringkasan tentang Workload Identity Federation. Dengan Workload Identity Federation, Anda dapat memberikan akses beban kerja lokal atau multi-cloud ke resource Google Cloud menggunakan identitas gabungan, bukan kunci akun layanan.

Anda dapat menggunakan Workload Identity Federation dengan workload yang berjalan di Amazon Web Services (AWS) dan Azure; Active Directory on-premise; layanan deployment, seperti GitHub dan GitLab; dan dengan penyedia identitas (IdP) apa pun yang mendukung OpenID Connect (OIDC) atau Security Assertion Markup Language (SAML) V2.0.

Mengapa Workload Identity Federation?

Secara tradisional, aplikasi yang berjalan di luar Google Cloud dapat menggunakan kunci akun layanan untuk mengakses resource Google Cloud. Namun, kunci akun layanan adalah kredensial yang andal, dan dapat menimbulkan risiko keamanan jika tidak dikelola dengan benar. Workload Identity Federation menghilangkan beban pemeliharaan dan keamanan yang terkait dengan kunci akun layanan.

Dengan Workload Identity Federation, Anda dapat menggunakan Identity and Access Management (IAM) untuk memberikan peran IAM kepada identitas eksternal, akses langsung ke resource Google Cloud. Anda juga dapat memberikan akses melalui peniruan identitas akun layanan.

Workload Identity pools

Kumpulan identitas beban kerja adalah entity yang memungkinkan Anda mengelola identitas eksternal.

Secara umum, sebaiknya buat kumpulan baru untuk setiap lingkungan non-Google Cloud yang perlu mengakses resource Google Cloud, seperti lingkungan pengembangan, staging, atau produksi.

Penyedia workload identity pool

Penyedia kumpulan identitas beban kerja adalah entitas yang menjelaskan hubungan antara Google Cloud dan IdP Anda, termasuk hal berikut:

  • AWS
  • Microsoft Entra ID
  • GitHub
  • GitLab
  • Cluster Kubernetes
  • Okta
  • Active Directory Federation Services (AD FS) lokal
  • Terraform

Workload Identity Federation mengikuti spesifikasi pertukaran token OAuth 2.0. Anda memberikan kredensial dari IdP ke Layanan Token Keamanan, yang memverifikasi identitas pada kredensial, lalu menampilkan token gabungan sebagai gantinya.

Penyedia OIDC dengan JWK lokal

Untuk menggabungkan beban kerja yang tidak memiliki endpoint OIDC publik, Anda dapat mengupload OIDC JSON Web Key Set (JWKS) langsung ke kumpulan. Hal ini biasa terjadi jika Anda memiliki Terraform atau GitHub Enterprise yang dihosting di lingkungan Anda sendiri, atau Anda memiliki persyaratan peraturan untuk tidak mengekspos URL publik. Untuk informasi selengkapnya, lihat Mengelola JWK OIDC (Opsional)

Pemetaan atribut

Token yang dikeluarkan oleh IdP eksternal Anda berisi satu atau beberapa atribut. Beberapa IdP menyebut atribut ini sebagai klaim.

Token Layanan Token Keamanan Google juga berisi satu atau beberapa atribut, seperti yang tercantum dalam tabel berikut:

Atribut Deskripsi
google.subject Wajib. ID unik untuk pengguna. Atribut ini digunakan dalam binding peran principal:// IAM dan muncul di log Cloud Logging. Nilai harus unik dan tidak boleh melebihi 127 karakter.
google.groups Opsional. Kumpulan grup tempat identitas berada. Atribut ini digunakan dalam binding peran principalSet:// IAM untuk memberikan akses kepada semua anggota grup.
attribute.NAME Opsional. Anda dapat menentukan hingga 50 atribut khusus dan menggunakan atribut ini dalam binding peran principalSet:// IAM untuk memberikan akses ke semua identitas dengan atribut tertentu.

Pemetaan atribut menentukan cara memperoleh nilai atribut token Google Security Token Service dari token eksternal. Untuk setiap atribut token Layanan Token Keamanan Google, Anda dapat menentukan pemetaan atribut, yang diformat sebagai berikut:

TARGET_ATTRIBUTE=SOURCE_EXPRESSION

Ganti kode berikut:

  • TARGET_ATTRIBUTE adalah atribut token Layanan Token Keamanan Google
  • SOURCE_EXPRESSION adalah ekspresi Common Expression Language (CEL) yang mengubah satu atau beberapa atribut dari token yang dikeluarkan oleh IdP eksternal Anda

Daftar berikut menyediakan contoh pemetaan atribut:

  • Tetapkan atribut pernyataan sub ke google.subject:

    google.subject=assertion.sub
    
  • Menggabungkan beberapa atribut pernyataan:

    google.subject="myprovider::" + assertion.aud + "::" + assertion.sub
    
  • Petakan atribut pernyataan bernilai GUID workload_id ke sebuah nama, dan tetapkan hasilnya ke atribut khusus bernama attribute.my_display_name:

    attribute.my_display_name={
      "8bb39bdb-1cc5-4447-b7db-a19e920eb111": "Workload1",
      "55d36609-9bcf-48e0-a366-a3cf19027d2a": "Workload2"
    }[assertion.workload_id]
    
  • Gunakan operator dan fungsi logis CEL untuk menetapkan atribut khusus dengan nama attribute.environment ke prod atau test, bergantung pada identitas Amazon Resource Name (ARN):

    attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"
    
  • Gunakan fungsi extract untuk mengisi atribut khusus aws_role dengan nama peran yang diasumsikan atau, jika tidak ada peran, dengan identitas ARN.

    attribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arn
    
  • Fungsi split membagi string pada nilai pemisah yang disediakan. Misalnya, untuk mengekstrak atribut username dari atribut alamat email dengan memisahkan nilainya pada @ dan menggunakan string pertama, gunakan pemetaan atribut berikut:

    attribute.username=assertion.email.split("@")[0]
    

  • Fungsi join menggabungkan daftar string pada nilai pemisah yang disediakan. Misalnya, untuk mengisi atribut khusus department dengan menyambungkan daftar string dengan . sebagai pemisah, gunakan pemetaan atribut berikut:

    attribute.department=assertion.department.join(".")
    

Untuk AWS, Google menyediakan pemetaan default, yang mencakup sebagian besar skenario umum. Anda juga dapat menyediakan pemetaan khusus.

Untuk penyedia OIDC, Anda memberikan pemetaan. Untuk membuat pemetaan, baca dokumentasi penyedia untuk mengetahui daftar atribut pada kredensialnya.

Untuk detail selengkapnya, lihat dokumentasi API untuk attributeMapping kolom.

Kondisi atribut

Kondisi atribut adalah ekspresi CEL yang dapat memeriksa atribut pernyataan dan atribut target. Jika kondisi atribut bernilai true untuk kredensial tertentu, kredensial tersebut akan diterima. Jika tidak, kredensial akan ditolak.

Anda dapat menggunakan kondisi atribut untuk membatasi identitas yang dapat melakukan autentikasi menggunakan kumpulan workload identity Anda.

Kondisi atribut berguna dalam skenario seperti berikut:

  • Jika beban kerja Anda menggunakan IdP yang tersedia untuk publik, Anda dapat membatasi akses sehingga hanya identitas yang Anda pilih yang memiliki akses ke kumpulan workload identity Anda.

  • Jika menggunakan IdP dengan beberapa platform cloud, Anda dapat mencegah kredensial yang ditujukan untuk digunakan dengan platform lain digunakan dengan Google Cloud, dan sebaliknya. Hal ini membantu menghindari masalah deputi yang membingungkan.

Kondisi atribut untuk penyedia kumpulan workload identity dapat menggunakan kata kunci assertion, yang mengacu pada peta yang merepresentasikan kredensial autentikasi yang dikeluarkan oleh IdP. Anda dapat menggunakan notasi titik untuk mengakses nilai peta. Misalnya, kredensial AWS menyertakan nilai arn, yang dapat Anda akses sebagai assertion.arn. Selain itu, kondisi atribut dapat menggunakan atribut apa pun yang ditentukan dalam pemetaan atribut penyedia.

Contoh berikut hanya mengizinkan permintaan dari identitas yang memiliki peran AWS tertentu:

attribute.aws_role == "ROLE_MAPPING"

Untuk detail selengkapnya, lihat dokumentasi API untuk kolom attributeCondition.

Pengelolaan Akses

Alur pertukaran token menampilkan token akses federasi. Anda dapat menggunakan token akses gabungan ini untuk memberikan akses workload atas nama identitas utama di resource Google Cloud dan mendapatkan token akses OAuth 2.0 yang berlaku singkat.

Anda dapat menggunakan token akses ini untuk memberikan akses IAM.

Sebaiknya gunakan Workload Identity Federation untuk memberikan akses langsung ke resource Google Cloud. Meskipun sebagian besar Google Cloud API mendukung Workload Identity Federation, beberapa API memiliki batasan. Sebagai alternatif, Anda dapat menggunakan peniruan identitas akun layanan.

Dengan token akses yang berlaku singkat, Anda dapat memanggil Google Cloud API yang dapat diakses oleh resource atau akun layanan.

Akses resource langsung

Anda dapat menggunakan akses resource langsung untuk memberikan akses kepada identitas eksternal Anda langsung di resource Google Cloud menggunakan peran khusus resource.

Alternatif: Peniruan identitas akun layanan

Sebagai alternatif untuk memberikan akses resource langsung, Anda dapat menggunakan peniruan identitas akun layanan.

Anda harus memberikan peran Workload Identity User (roles/iam.workloadIdentityUser) kepada akun layanan Anda.

Cakupan dan keamanan akun utama

Anda memberikan akses ke akun utama atau subset-nya menggunakan jenis akun utama.

Jenis akun utama

Tabel berikut menjelaskan cara menentukan akun utama sebagai individu dan grup identitas:

Identitas Format ID
Identitas tunggal principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT_ATTRIBUTE_VALUE
Semua identitas dalam grup principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP_ID
Semua identitas dengan nilai atribut tertentu principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE

Langkah selanjutnya