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 GoogleSOURCE_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
kegoogle.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 bernamaattribute.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
keprod
atautest
, bergantung pada identitas Amazon Resource Name (ARN):attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"
Gunakan fungsi
extract
untuk mengisi atribut khususaws_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 atributusername
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 khususdepartment
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/
|
Semua identitas dalam grup |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Semua identitas dengan nilai atribut tertentu |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Langkah selanjutnya
Gunakan Workload Identity Federation untuk mengizinkan workload Anda mengakses resource dari AWS atau Azure, Active Directory, pipeline Deployment, atau penyedia OIDC atau SAML.
Pelajari cara mengelola kumpulan workload identity menggunakan Google Cloud CLI atau REST API.