Dokumen ini memberikan ringkasan tentang penggabungan identitas untuk beban kerja eksternal. Dengan penggabungan identitas, Anda dapat memberikan akses beban kerja lokal atau multi-cloud ke resource Google Cloud, tanpa menggunakan kunci akun layanan.
Anda dapat menggunakan penggabungan identitas dengan Amazon Web Services (AWS), atau dengan penyedia identitas (IdP) apa pun yang mendukung OpenID Connect (OIDC), seperti Microsoft Azure, atau SAML 2.0.
Mengapa federasi identity?
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.
Dengan penggabungan identitas, Anda dapat menggunakan Identity and Access Management (IAM) untuk memberikan peran IAM kepada identitas eksternal, termasuk kemampuan untuk meniru identitas akun layanan. Pendekatan ini menghilangkan beban pemeliharaan dan keamanan yang terkait dengan kunci 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
- Azure Active Directory
- Active Directory Federation Services (AD FS) lokal
- Okta
- Cluster Kubernetes
Federasi Workload Identity mengikuti spesifikasi pertukaran token OAuth 2.0 Anda memberikan kredensial dari IdP ke Layanan Token Keamanan, yang memverifikasi identitas pada kredensial, lalu menampilkan token federasi 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 pool. 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 penyedia identitas eksternal Anda berisi satu atau beberapa atribut. Beberapa penyedia identitas menyebut atribut ini sebagai klaim.
Token Google STS 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 STS dari token eksternal. Untuk setiap atribut token Google STS, Anda dapat menentukan pemetaan atribut, yang diformat sebagai berikut:
TARGET_ATTRIBUTE=SOURCE_EXPRESSION
Ganti kode berikut:
TARGET_ATTRIBUTE
adalah atribut token Google STSSOURCE_EXPRESSION
adalah ekspresi Common Expression Language (CEL) yang mengubah satu atau beberapa atribut dari token yang dikeluarkan oleh penyedia identitas 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 dievaluasi ke 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 penyedia identitas yang tersedia untuk publik, Anda dapat membatasi akses sehingga hanya identitas yang Anda pilih yang memiliki akses ke kumpulan workload identity Anda.
Jika menggunakan penyedia identitas 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 penyedia identitas. 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
.
Peniruan identitas akun layanan
Alur pertukaran token menampilkan token akses federasi. Anda dapat menggunakan token ini untuk meniru identitas akun layanan dan mendapatkan token akses OAuth 2.0 yang berlaku singkat. Dengan token akses yang berlaku singkat, Anda dapat memanggil Google Cloud API yang dapat diakses oleh akun layanan.
Untuk meniru identitas akun layanan, berikan peran
Workload Identity User (roles/iam.workloadIdentityUser
) kepada
identitas eksternal Anda di akun layanan dengan peran yang diperlukan oleh beban kerja Anda. Anda dapat memberikan peran
ke semua identitas dalam kumpulan workload identity, atau ke identitas
eksternal tertentu berdasarkan atributnya.
Tabel berikut menjelaskan skenario umum untuk memberikan peran:
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 penggabungan identitas untuk mengakses resource dari AWS, mengakses resource dari Microsoft Azure, mengakses resource dari penyedia OIDC, atau mengakses resource dari penyedia SAML 2.0.
Pelajari cara mengelola kumpulan workload identity menggunakan Google Cloud CLI atau REST API.