Panduan ini menjelaskan cara menggunakan Workload Identity Federation agar pipeline deployment dapat melakukan autentikasi ke Google Cloud.
Tergantung pada sistem CI/CD yang Anda gunakan, pipeline deployment Anda mungkin memiliki akses ke kredensial khusus lingkungan sekitar. Contoh:
- Pipeline Azure DevOps dapat menggunakan koneksi layanan federasi identitas beban kerja Microsoft Entra untuk mendapatkan token ID yang mengidentifikasi project Azure DevOps secara unik.
- Alur kerja GitHub Actions dapat memperoleh token OIDC GitHub yang mengidentifikasi alur kerja dan repositorinya secara unik.
- GitLab SaaS memungkinkan tugas CI/CD mengakses token ID yang secara unik mengidentifikasi tugas beserta project, lingkungan, dan repositorinya.
- Terraform Cloud dapat menyediakan token OIDC untuk konfigurasi Terraform Anda yang secara unik mengidentifikasi ruang kerja dan lingkungannya.
Anda dapat mengonfigurasi pipeline deployment Anda agar dapat menggunakan kredensial ini untuk melakukan autentikasi ke Google Cloud menggunakan Workload Identity Federation. Pendekatan ini menghilangkan beban pemeliharaan dan keamanan yang terkait dengan kunci akun layanan.
Sebelum memulai
Menyiapkan autentikasi
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Python
Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mengonfigurasi Workload Identity Federation,
minta administrator untuk memberi Anda
peran IAM Workload Identity Pool Admin (roles/iam.workloadIdentityPoolAdmin
) di project.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Atau, peran dasar Pemilik IAM (roles/owner
) juga
mencakup izin untuk mengonfigurasi penggabungan identitas.
Anda tidak boleh memberikan peran dasar dalam lingkungan produksi, tetapi Anda dapat memberikannya dalam
lingkungan pengembangan atau pengujian.
Menyiapkan IdP eksternal Anda
Azure DevOps
Agar pipeline Azure DevOps dapat diautentikasi ke Google Cloud, Anda harus mengonfigurasi koneksi layanan untuk Azure Resource Manager terlebih dahulu. Koneksi ini memungkinkan pipeline mendapatkan token ID, yang kemudian dapat ditukar dengan kredensial Google Cloud.
Untuk membuat koneksi layanan untuk Azure Resource Manager, lakukan langkah berikut:
- Di Azure DevOps, buka project Anda dan buka Project Settings.
- Buka Pipeline > Koneksi layanan.
- Klik Create service connection.
- Pilih Azure Resource Manager.
- Klik Berikutnya.
- Pilih Workload Identity federation (automatic)
- Klik Berikutnya.
Konfigurasi setelan berikut:
Tingkat cakupan: Pilih langganan.
Anda harus memilih langganan meskipun tidak berencana menggunakan koneksi layanan untuk mengakses resource Azure.
Nama koneksi layanan: Masukkan nama seperti
google-cloud
.
Klik Simpan.
Pada langkah selanjutnya, Anda memerlukan ID penerbit dan subjek koneksi layanan. Untuk mencari detail ini, lakukan langkah berikut:
- Klik koneksi layanan yang baru saja Anda buat.
- Klik Kelola Akun Layanan.
- Buka Certificate & secrets > Federated credentials.
- Klik kredensial gabungan.
Di halaman Edit kredensial, temukan ID berikut:
- Issuer: mengidentifikasi organisasi Azure DevOps Anda secara unik
- ID subjek: mengidentifikasi koneksi layanan secara unik
Azure DevOps otomatis memberikan akses pada langganan yang Anda pilih sebagai cakupan ke akun utama layanan yang terkait dengan koneksi layanan baru Anda. Karena Anda tidak berencana menggunakan koneksi layanan untuk mengakses resource Azure, Anda dapat mencabut akses ini dengan melakukan tindakan berikut:
- Di portal Azure, buka langganan yang Anda pilih sebagai cakupan.
- Buka Kontrol akses (IAM) > Penetapan peran.
- Temukan penetapan peran untuk koneksi layanan dan hapus.
GitHub Actions
Anda tidak perlu membuat perubahan konfigurasi apa pun di akun GitHub Anda.
Setelah Anda mengonfigurasi workload identity pool agar dapat memercayai repositori GitHub Anda, Anda dapat mengizinkan alur kerja dalam repositori tersebut untuk menggunakan token OIDC GitHub-nya untuk mendapatkan kredensial Google Cloud dengan masa berlaku singkat.
GitLab SaaS
Anda tidak perlu membuat perubahan konfigurasi apa pun di akun GitLab Anda.
Setelah Anda mengonfigurasi workload identity pool agar memercayai grup GitLab Anda, Anda dapat mengaktifkan Workload Identity Federation untuk setiap tugas CI/CD.
Terraform Cloud
Anda tidak perlu membuat perubahan konfigurasi apa pun di akun Terraform Cloud.
Setelah Anda mengonfigurasi workload identity pool agar memercayai Terraform Cloud, Anda dapat mengaktifkan Workload Identity Federation untuk setiap ruang kerja.
Mengonfigurasi Workload Identity Federation
Anda harus melakukan langkah ini untuk setiap organisasi GitHub, grup GitLab, atau organisasi Terraform Cloud.
Untuk mulai mengonfigurasi Workload Identity Federation, lakukan langkah berikut:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Sebaiknya,
gunakan project khusus untuk mengelola workload identity pool dan penyedia workload identity.
-
Make sure that billing is enabled for your Google Cloud project.
Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.
Menentukan pemetaan atribut
Kredensial khusus lingkungan dari pipeline deployment Anda dapat berisi beberapa atribut,
dan Anda harus menentukan atribut mana yang ingin Anda gunakan sebagai ID subjek
(google.subject
) di Google Cloud.
Secara opsional, Anda dapat memetakan atribut tambahan. Selanjutnya, Anda dapat merujuk ke atribut tambahan ini saat Anda memberikan akses ke resource.
Azure DevOps
Token ID Azure DevOps menyertakan klaim sub
yang berisi ID subjek
koneksi layanan Anda. ID subjek menggunakan
format berikut:
sc://ORGANIZATION/PROJECT/CONNECTION
Gunakan pemetaan atribut berikut untuk memetakan ID ini ke google.subject
:
google.subject=assertion.sub
GitHub Actions
Pemetaan atribut Anda dapat menggunakan salah satu klaim di
token OIDC GitHub Actions. Kunci klaim token ini dan nilainya dikontrol oleh
GitHub. Setidaknya, Anda harus memetakan google.subject
ke assertion.sub
,
yang sesuai dengan subjek token OIDC GitHub Actions:
google.subject=assertion.sub
Nilai untuk subjek token OIDC GitHub Actions dapat bervariasi tergantung pada peristiwa sumber. Atribut klaim lainnya dapat mencakup:
repository
: Berisi nama pemilik dan repositori–contohnya"google/guava"
.repository_id
: Berisi ID repositori unik–contohnya"20300177"
.repository_owner
: Berisi pemilik, yang dapat berupa nama pengguna atau nama organisasi GitHub–contohnya"google"
.repository_owner_id
: Berisi ID pemilik unik–contohnya"1342004"
.
Daftar ini adalah subset dari klaim yang memungkinkan–lihat dokumentasi GitHub
tentang contoh
klaim untuk mengetahui daftar lengkapnya. Pastikan untuk memetakan klaim apa pun yang
akan Anda gunakan sebagai kondisi atribut atau sebagai bagian dari kondisi principalSet
mendatang.
GitLab SaaS
Pemetaan atribut Anda dapat menggunakan klaim yang disematkan dalam token ID GitLab sebagai atribut sumber, termasuk berikut ini:
sub
: nama project dan referensi Git—contohnya,project_path:groupname/projectname:ref_type:branch:ref:main
.namespace_id
: ID grup unik.project_id
: ID project unik.user_id
: ID pengguna unik.environment
: lingkungan tempat tugas diterapkan.ref_path
: referensi Git—contohnyarefs/heads/main
.
Pemetaan atribut berikut menetapkan google.subject
ke klaim sub
dari token ID GitLab. Karena klaim sub
berisi
nama project dan referensi Git, pemetaan ini memungkinkan Anda mengontrol akses
berdasarkan repositori dan cabang:
google.subject=assertion.sub
Mengontrol akses berdasarkan repositori dan cabang dapat berguna jika cabang tertentu
(contohnya, main
) memerlukan akses yang berbeda ke resource dibandingkan
cabang lainnya (contohnya, cabang fitur).
Dalam beberapa kasus, Anda mungkin cukup membedakan akses berdasarkan
project atau grup. Oleh karena itu, pemetaan berikut mencakup dua atribut tambahan
yang berisi project_id
dan namespace_id
GitLab:
google.subject=assertion.sub attribute.project_id=assertion.project_id attribute.namespace_id=assertion.namespace_id
Terraform Cloud
Pemetaan atribut Anda dapat menggunakan klaim yang disematkan dalam token OIDC Terraform Cloud, termasuk klaim berikut
terraform_organization_id
: Berisi ID unik organisasi—contohnyaorg-xxxxxxxxxxxxxxxx
.terraform_workspace_id
: Berisi ID unik ruang kerja—contohnyaws-xxxxxxxxxxxxxxxx
.terraform_workspace_name
: Berisi nama tampilan ruang kerja.sub
: Berisi nama tampilan organisasi, ruang kerja, dan fase—contohnyaorganization:example-org:workspace:example-workspace:run_phase:apply
.
Pemetaan atribut berikut menetapkan google.subject
ke klaim terraform_workspace_id
dari token OIDC Terraform Cloud:
google.subject=assertion.terraform_workspace_id
Dengan pemetaan ini, Anda dapat mengontrol akses ke resource Google Cloud berdasarkan ruang kerja.
Menentukan 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 harus memiliki
pemetaan atribut untuk semua kolom kondisi atribut.
Azure DevOps
Secara opsional, gunakan kondisi atribut untuk membatasi akses ke koneksi layanan tertentu. Misalnya, kondisi berikut membatasi akses ke koneksi dalam project Azure DevOps tertentu:
assertion.sub.startsWith('sc://ORGANIZATION/PROJECT/')
Ganti kode berikut:
ORGANIZATION
: nama organisasi Azure DevOps Anda.PROJECT
: nama project Azure DevOps Anda.
GitHub Actions
Gunakan kondisi atribut berikut untuk membatasi akses ke token yang dikeluarkan oleh organisasi GitHub Anda:
assertion.repository_owner=='ORGANIZATION'
Ganti ORGANIZATION
dengan nama organisasi
GitHub Anda.
Secara opsional, perluas kondisi atribut untuk membatasi akses ke subset alur kerja
atau cabang. Contohnya, kondisi berikut membatasi akses
ke alur kerja yang menggunakan main
cabang Git:
assertion.repository_owner=='ORGANIZATION' && assertion.ref=='refs/heads/main'
GitLab SaaS
Gunakan kondisi atribut berikut untuk membatasi akses ke token yang dikeluarkan oleh grup GitLab Anda
assertion.namespace_id=='GROUP_ID'
Ganti GROUP_ID
dengan ID grup yang ditampilkan di
halaman beranda grup GitLab Anda.
Secara opsional, perluas kondisi atribut untuk membatasi akses ke subset
project, cabang, atau lingkungan. Contohnya, kondisi berikut membatasi akses
ke tugas yang menggunakan production
lingkungan:
assertion.namespace_id=='GROUP_ID' && assertion.environment=='production'
Terraform Cloud
Gunakan kondisi atribut berikut untuk membatasi akses ke token yang dikeluarkan oleh organisasi Terraform Cloud Anda:
assertion.terraform_organization_id=='ORGANIZATION_ID'
Ganti ORGANIZATION_ID
dengan ID unik organisasi
Anda—contohnya org-xxxxxxxxxxxxxxxx
.
Secara opsional, perluas kondisi atribut untuk membatasi akses ke subset alur kerja
atau cabang. Contohnya, kondisi atribut berikut membatasi akses
ke ruang kerja tertentu:
assertion.terraform_organization_id=='ORGANIZATION_ID' && assertion.terraform_workspace_id=='WORKSPACE_ID'
Membuat workload identity pool dan penyedia workload
Anda telah mengumpulkan semua informasi yang Anda perlukan untuk membuat workload identity pool dan penyedia workload:
Konsol
Di konsol Google Cloud, buka halaman Penyedia workload dan workload pool baru .
Di bagian Buat identity pool, masukkan informasi berikut:
- Nama: Nama untuk pool. Nama ini juga digunakan sebagai ID pool. Anda tidak dapat mengubah ID pool nanti.
- Deskripsi: Teks yang menjelaskan tujuan pool.
Klik Lanjutkan.
Konfigurasikan setelan penyedia:
Azure DevOps
- Pilih penyedia: OpenID Connect (OIDC).
- Nama penyedia: nama project Azure DevOps, atau nama kustom.
- ID Penyedia: nama project Azure DevOps, atau ID kustom. Anda tidak dapat mengubah ID penyedia nantinya.
- Issuer URL: penerbit koneksi layanan yang telah Anda cari sebelumnya.
Audiens: Pilih Audiens yang diizinkan dan tempelkan nilai berikut
api://AzureADTokenExchange
GitHub Actions
- Pilih penyedia: OpenID Connect (OIDC).
- Nama penyedia: Nama untuk penyedia.
- ID Penyedia: ID untuk penyedia. Anda tidak dapat mengubah ID penyedia nantinya.
- URL Penerbit:
https://token.actions.githubusercontent.com/
- Audiens: Audiens default
GitLab SaaS
- Pilih penyedia: OpenID Connect (OIDC).
- Nama penyedia: Nama untuk penyedia.
- ID Penyedia: ID untuk penyedia. Anda tidak dapat mengubah ID penyedia nantinya.
- URL Penerbit:
https://gitlab.com
- Audiens: Audiens default
Terraform Cloud
- Pilih penyedia: OpenID Connect (OIDC).
- Nama penyedia: Nama untuk penyedia.
- ID Penyedia: ID untuk penyedia. Anda tidak dapat mengubah ID penyedia nantinya.
- URL Penerbit:
https://app.terraform.io
- Audiens: Audiens default
Klik Lanjutkan.
Di bagian Konfiguraasikan atribut penyedia, tambahkan pemetaan atribut yang telah Anda identifikasi sebelumnya.
Di bagian Kondisi atribut, masukkan kondisi atribut yang telah Anda identifikasi sebelumnya.
Klik Simpan untuk membuat workload identity pool dan penyedia workload.
gcloud
Buat workload identity pool baru:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Ganti nilai berikut:
POOL_ID
: ID unik untuk poolDISPLAY_NAME
: nama poolDESCRIPTION
: deskripsi pool. Deskripsi ini muncul saat memberikan akses ke identitas kumpulan
Tambahkan penyedia workload identity pool:
Azure DevOps
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Ganti nilai berikut:
PROVIDER_ID
: nama project Azure DevOps, atau ID kustom untuk penyedia.POOL_ID
: ID poolISSUER
: penerbit koneksi layanan yang telah Anda cari sebelumnya.MAPPINGS
: daftar yang dipisahkan koma untuk pemetaan atribut yang telah Anda identifikasi sebelumnyaCONDITIONS
: kondisi atribut yang Anda identifikasi sebelumnya
GitHub Actions
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="https://token.actions.githubusercontent.com/" \ --allowed-audiences="api://AzureADTokenExchange" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Ganti nilai berikut:
PROVIDER_ID
: ID unik untuk penyediaPOOL_ID
: ID poolMAPPINGS
: daftar yang dipisahkan koma untuk pemetaan atribut yang telah Anda identifikasi sebelumnyaCONDITIONS
: kondisi atribut yang Anda identifikasi sebelumnya
GitLab SaaS
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="https://gitlab.com" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Ganti nilai berikut:
PROVIDER_ID
: ID unik untuk penyediaPOOL_ID
: ID poolMAPPINGS
: daftar yang dipisahkan koma untuk pemetaan atribut yang telah Anda identifikasi sebelumnyaCONDITIONS
: kondisi atribut yang Anda identifikasi sebelumnya
Terraform Cloud
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="https://app.terraform.io" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Ganti nilai berikut:
PROVIDER_ID
: ID unik untuk penyedia.POOL_ID
: ID pool.MAPPINGS
: daftar yang dipisahkan koma untuk pemetaan atribut yang telah Anda identifikasi sebelumnya.CONDITIONS
: kondisi atribut yang telah Anda identifikasi sebelumnya.
Memperbarui kondisi atribut di penyedia workload identity
Bagian ini menjelaskan cara memperbarui kondisi atribut di penyedia workload identity pool yang ada untuk membatasi akses ke token yang dikeluarkan oleh organisasi GitHub, grup GitLab, atau organisasi Terraform Cloud Anda.
Untuk menemukan kondisi atribut yang direkomendasikan untuk pipeline Anda, lihat Menentukan kondisi atribut.
Konsol
Di konsol Google Cloud, buka halaman Workload Identity Pool.
Temukan workload identity pool yang berisi penyedia, lalu klik ikon
Luaskan node untuk pool.Temukan penyedia workload identity pool yang ingin Anda edit, lalu klik
Edit.Di Kondisi atribut, masukkan kondisi atribut yang telah Anda identifikasi sebelumnya.
Untuk memperbarui workload identity pool dan penyedia, klik Simpan.
gcloud
Untuk memperbarui penyedia workload identity pool, jalankan perintah berikut:
gcloud iam workload-identity-pools providers update-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --attribute-condition="CONDITIONS"
Ganti nilai berikut:
PROVIDER_ID
: ID unik untuk penyediaPOOL_ID
: ID poolCONDITIONS
: kondisi atribut yang telah Anda identifikasi sebelumnya
Mengautentikasi pipeline deployment
Anda harus melakukan langkah ini untuk setiap alur kerja GitHub Actions atau ruang kerja Terraform Cloud.
Mengizinkan workload eksternal Anda mengakses resource Google Cloud
Untuk menyelesaikan petunjuk nanti dalam panduan ini, Anda harus mengonfigurasi peniruan identitas akun layanan seperti yang dijelaskan di bagian ini.
Untuk memberi beban kerja Anda akses ke resource Google Cloud, sebaiknya Anda memberikan akses resource langsung ke akun utama. Dalam hal ini, prinsipal adalah pengguna gabungan. Beberapa produk Google Cloud memiliki batasan Google Cloud API. Jika beban kerja Anda memanggil endpoint API yang memiliki batasan, Anda dapat menggunakan peniruan identitas akun layanan. Dalam hal ini, akun utama adalah akun layanan Google Cloud, yang bertindak sebagai identitas. Anda memberikan akses ke akun layanan di resource.
Akses resource langsung
Anda dapat memberikan akses ke identitas gabungan langsung di resource menggunakan konsol Google Cloud atau gcloud CLI.
Konsol
Untuk menggunakan konsol Google Cloud guna memberikan peran IAM
langsung di resource, Anda harus membuka halaman resource, lalu
memberikan peran. Contoh berikut menunjukkan cara membuka
halaman Cloud Storage dan memberikan peran Storage Object Viewer
(roles/storage.objectViewer
) ke identitas gabungan langsung di
bucket Cloud Storage.
- Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.
Pada daftar bucket, klik nama bucket tempat Anda ingin memberi peran.
Pilih tab Permissions di dekat bagian atas halaman.
Klik tombol add_box Berikan akses.
Dialog Add principals akan muncul.
Di kolom Akun utama baru, masukkan satu atau beberapa identitas yang memerlukan akses ke bucket Anda.
Menurut subjek
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectPOOL_ID
: ID workload poolSUBJECT
: subjek individu yang dipetakan dari IdP Anda—misalnya,administrator@example.com
Menurut grup
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectWORKLOAD_POOL_ID
: ID workload poolGROUP
: grup yang dipetakan dari IdP Anda—misalnya:administrator-group@example.com
Menurut atribut
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectWORKLOAD_POOL_ID
: ID workload poolATTRIBUTE_NAME
: salah satu atribut yang dipetakan dari IdP AndaATTRIBUTE_VALUE
: nilai atribut
Pilih satu (atau beberapa) peran dari menu drop-down Pilih peran. Peran yang Anda pilih akan muncul di panel dengan deskripsi singkat tentang izin yang diberikan.
Klik Simpan.
gcloud
Untuk menggunakan gcloud CLI guna memberikan peran IAM pada resource dalam project, lakukan tindakan berikut:
Dapatkan nomor project dari project tempat resource ditentukan.
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
Berikan akses ke resource.
Untuk menggunakan gcloud CLI guna memberikan peran Storage Object Viewer (
roles/storage.objectViewer
) kepada identitas eksternal yang memenuhi kriteria tertentu, jalankan perintah berikut.Menurut subjek
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Menurut grup
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Menurut atribut
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Ganti kode berikut:
BUCKET_ID
: bucket tempat akses akan diberikanPROJECT_NUMBER
: nomor project dari project yang berisi workload identity poolPOOL_ID
: ID pool dari workload identity poolSUBJECT
: nilai yang diharapkan untuk atribut yang Anda petakan kegoogle.subject
GROUP
: nilai yang diharapkan untuk atribut yang Anda petakan kegoogle.groups
ATTRIBUTE_NAME
: nama atribut khusus dalam pemetaan atribut AndaATTRIBUTE_VALUE
: nilai atribut kustom dalam pemetaan atribut Anda
Anda dapat memberikan peran di resource Google Cloud mana pun yang mendukung kebijakan izin IAM.
Peniruan akun layanan
Untuk membuat akun layanan bagi beban kerja eksternal, lakukan langkah-langkah berikut:
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
Buat akun layanan yang merepresentasikan workload. Sebaiknya Anda menggunakan akun layanan khusus untuk setiap workload. Akun layanan tidak perlu berada dalam project yang sama dengan workload identity pool, tetapi Anda harus merujuk ke project yang berisi akun layanan.
Berikan akses akun layanan untuk resource yang ingin diakses oleh identitas eksternal.
Berikan peran Workload Identity User (
roles/iam.workloadIdentityUser
) ke akun layanan.
Untuk memberikan akses ke identitas gabungan menggunakan peniruan identitas akun layanan menggunakan Konsol Google Cloud atau gcloud CLI:
Konsol
Untuk menggunakan konsol Google Cloud guna memberikan peran IAM ke identitas gabungan dengan akun layanan, lakukan tindakan berikut:
Akun Layanan dalam project yang sama
Untuk memberikan akses menggunakan peniruan identitas akun layanan untuk akun layanan di project yang sama, lakukan hal berikut:
Buka halaman Workload Identity Pool.
Pilih Berikan akses.
Pada dialog Grant access to service account, pilih Grant access using Service Account impersonation.
Dalam daftar Akun layanan, pilih akun layanan untuk ditiru oleh identitas eksternal, lalu lakukan hal berikut:
Untuk memilih identitas dalam kumpulan yang dapat meniru identitas akun layanan, lakukan salah satu tindakan berikut:
Untuk mengizinkan hanya identitas tertentu dari workload identity pool untuk meniru identitas akun layanan, pilih Hanya identitas yang cocok dengan filter.
Di daftar Nama atribut, pilih atribut yang ingin Anda filter.
Di kolom Nilai atribut, masukkan nilai atribut yang diharapkan; misalnya, jika Anda menggunakan pemetaan atribut
google.subject=assertion.sub
, tetapkan nama Atribut menjadisubject
dan Nilai atribut menjadi nilai klaimsub
dalam token yang dikeluarkan oleh penyedia identitas eksternal Anda.
Untuk menyimpan konfigurasi, klik Simpan, lalu Tutup.
Akun layanan di project lain
Untuk memberikan akses menggunakan peniruan akun layanan untuk akun layanan di project lain, lakukan hal berikut:
Buka halaman Akun Layanan.
Pilih akun layanan yang ingin Anda tirukan identitasnya.
Klik Kelola akses.
Klik Tambahkan akun utama.
Di kolom New principal, masukkan salah satu ID akun utama berikut untuk identitas dalam kumpulan Anda yang akan meniru identitas akun layanan.
Menurut subjek
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectPOOL_ID
: ID workload poolSUBJECT
: subjek individu yang dipetakan dari IdP Anda—misalnya,administrator@example.com
Menurut grup
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectWORKLOAD_POOL_ID
: ID workload poolGROUP
: grup yang dipetakan dari IdP Anda—misalnya:administrator-group@example.com
Menurut atribut
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectWORKLOAD_POOL_ID
: ID workload poolATTRIBUTE_NAME
: salah satu atribut yang dipetakan dari IdP AndaATTRIBUTE_VALUE
: nilai atribut
Menurut kolam renang
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
Ganti kode berikut:
PROJECT_NUMBER
: nomor projectWORKLOAD_POOL_ID
: ID workload pool
Di Select a role, pilih peran Workload Identity User (
roles/iam.workloadIdentityUser
).Untuk menyimpan konfigurasi, klik Simpan.
gcloud
Untuk menggunakan gcloud CLI guna memberikan peran Pemilik Workload Identity (roles/iam.workloadIdentityUser
)
ke identitas eksternal yang memenuhi kriteria tertentu, jalankan perintah
berikut.
Menurut subjek
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Menurut grup
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Menurut atribut
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Ganti kode berikut:
SERVICE_ACCOUNT_EMAIL
: alamat email akun layananPROJECT_NUMBER
: nomor project dari project yang berisi workload identity poolPOOL_ID
: ID pool dari workload identity poolSUBJECT
: nilai yang diharapkan untuk atribut yang Anda petakan kegoogle.subject
GROUP
: nilai yang diharapkan untuk atribut yang Anda petakan kegoogle.groups
ATTRIBUTE_NAME
: nama atribut khusus dalam pemetaan atribut AndaATTRIBUTE_VALUE
: nilai atribut kustom dalam pemetaan atribut Anda
Mengonfigurasi pipeline deployment
Bagian ini menjelaskan cara menggunakan Workload Identity Federation di pipeline deployment Anda. Petunjuk di bagian ini mengasumsikan bahwa beban kerja Anda menggunakan peniruan identitas akun layanan untuk mengakses resource Google Cloud.
Azure DevOps
Edit file azure-pipelines.yml
Anda dan tambahkan kode berikut ke konfigurasi tugas:
variables: - name: Azure.WorkloadIdentity.Connection value: CONNECTION - name: GoogleCloud.WorkloadIdentity.ProjectNumber value: PROJECT_NUMBER - name: GoogleCloud.WorkloadIdentity.Pool value: POOL_ID - name: GoogleCloud.WorkloadIdentity.Provider value: PROVIDER_ID - name: GoogleCloud.WorkloadIdentity.ServiceAccount value: SERVICE_ACCOUNT_EMAIL - name: GOOGLE_APPLICATION_CREDENTIALS value: $(Pipeline.Workspace)/.workload_identity.wlconfig steps: - task: AzureCLI@2 inputs: connectedServiceNameARM: $(Azure.WorkloadIdentity.Connection) addSpnToEnvironment: true scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | echo $idToken > $(Pipeline.Workspace)/.workload_identity.jwt cat << EOF > $GOOGLE_APPLICATION_CREDENTIALS { "type": "external_account", "audience": "//iam.googleapis.com/projects/$(GoogleCloud.WorkloadIdentity.ProjectNumber)/locations/global/workloadIdentityPools/$(GoogleCloud.WorkloadIdentity.Pool)/providers/$(GoogleCloud.WorkloadIdentity.Provider)", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "$(Pipeline.Workspace)/.workload_identity.jwt" }, "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/$(GoogleCloud.WorkloadIdentity.ServiceAccount):generateAccessToken" } EOF
Ganti nilai berikut:
CONNECTION
: nama koneksi layanan AndaPROJECT_NUMBER
: nomor project dari project yang berisi workload identity poolPOOL_ID
: ID workload identity poolPROVIDER_ID
: ID penyedia workload identity poolSERVICE_ACCOUNT_EMAIL
: alamat email akun layanan
Konfigurasi tersebut akan melakukan hal berikut:
- Menggunakan tugas
AzureCLI
untuk mendapatkan token ID untuk koneksi layanan, dan menyediakannya dalam variabel bernamaidToken
. - Menyimpan token ID ke file sementara yang bernama
.workload_identity.jwt
. - Membuat file konfigurasi kredensial yang menginstruksikan library klien
untuk membaca token ID dari
.workload_identity.jwt
dan menggunakannya untuk meniru identitas akun layanan. - Menetapkan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
agar mengarah ke file konfigurasi kredensial.
GitHub Actions
Tindakan google-github-actions/auth
memungkinkan Anda secara otomatis membuat file konfigurasi kredensial
selama eksekusi alur kerja. Alat dan library klien seperti terraform
dapat kemudian menggunakan file konfigurasi kredensial ini untuk secara otomatis mendapatkan
kredensial Google.
Edit file YAML GitHub Actions Anda dan tambahkan hal berikut ini:
Izinkan tugas untuk mengambil token ID GitHub dengan menambahkan konfigurasi berikut:
permissions: id-token: write contents: read
Tambahkan langkah untuk membuat file konfigurasi kredensial:
- id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v1' with: create_credentials_file: true workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID' service_account: 'SERVICE_ACCOUNT_EMAIL'
Ganti nilai berikut:
PROJECT_NUMBER
: Nomor project dari project yang berisi workload identity pool.POOL_ID
: ID workload identity pool.PROVIDER_ID
: ID penyedia workload identity pool.SERVICE_ACCOUNT_EMAIL
: Ganti dengan alamat email akun layanan.
Contoh berikut mengonfigurasi GitHub Action:
jobs: build: # Allow the job to fetch a GitHub ID token permissions: id-token: write contents: read runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - id: 'auth' name: 'Authenticate to Google Cloud' uses: 'google-github-actions/auth@v1' with: create_credentials_file: true workload_identity_provider: 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID' service_account: 'SERVICE_ACCOUNT_EMAIL'
Untuk mengetahui detail lebih lanjut tentang penggunaan tindakan google-github-actions/auth
,
lihat Menyiapkan Workload Identity Federation.
GitLab SaaS
Edit file .gitlab-ci.yml
Anda dan tambahkan kode berikut ke konfigurasi
tugas:
job: variables: WORKLOAD_IDENTITY_PROJECT_NUMBER: PROJECT_NUMBER WORKLOAD_IDENTITY_POOL: POOL_ID WORKLOAD_IDENTITY_PROVIDER: PROVIDER_ID SERVICE_ACCOUNT: SERVICE_ACCOUNT_EMAIL GOOGLE_APPLICATION_CREDENTIALS: $CI_BUILDS_DIR/.workload_identity.wlconfig id_tokens: WORKLOAD_IDENTITY_TOKEN: aud: https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID script: - |- echo $WORKLOAD_IDENTITY_TOKEN > $CI_BUILDS_DIR/.workload_identity.jwt cat << EOF > $GOOGLE_APPLICATION_CREDENTIALS { "type": "external_account", "audience": "//iam.googleapis.com/projects/$WORKLOAD_IDENTITY_PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_IDENTITY_POOL/providers/$WORKLOAD_IDENTITY_PROVIDER", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "$CI_BUILDS_DIR/.workload_identity.jwt" }, "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/$SERVICE_ACCOUNT:generateAccessToken" } EOF
Ganti nilai berikut:
PROJECT_NUMBER
: nomor project dari project yang berisi workload identity poolPOOL_ID
: ID workload identity poolPROVIDER_ID
: ID penyedia workload identity poolSERVICE_ACCOUNT_EMAIL
: alamat email akun layanan
Konfigurasi tersebut akan melakukan hal berikut:
- Memberi petunjuk kepada GitLab untuk mengeluarkan token ID, dan menyediakannya di
variabel lingkungan bernama
WORKLOAD_IDENTITY_TOKEN
. Token ID menggunakan penyedia workload identity pool Anda sebagai audiens. - Menyimpan token ID ke file sementara yang bernama
.workload_identity.jwt
. - Membuat file konfigurasi kredensial yang menginstruksikan library klien
untuk membaca token ID dari
.workload_identity.jwt
dan menggunakannya untuk meniru identitas akun layanan. - Menetapkan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
agar mengarah ke file konfigurasi kredensial.
Terraform Cloud
Konfigurasikan ruang kerja Terraform Cloud Anda agar menggunakan Workload Identity Federation untuk melakukan autentikasi ke Google Cloud menggunakan peniruan identitas akun layanan:
Di Terraform Cloud, buka ruang kerja Anda, lalu buka Variabel.
Tambahkan variabel berikut:
Kategori variabel Kunci Nilai Variabel lingkungan TFC_GCP_PROVIDER_AUTH
true
Variabel lingkungan TFC_GCP_RUN_SERVICE_ACCOUNT_EMAIL
Alamat email akun layanan, contohnya terraform@my-project-123.iam.gserviceaccount.com
Variabel lingkungan TFC_GCP_PROJECT_NUMBER
Nomor project dari project yang berisi workload identity pool Variabel lingkungan TFC_GCP_WORKLOAD_POOL_ID
ID workload identity pool Variabel lingkungan TFC_GCP_WORKLOAD_PROVIDER_ID
ID penyedia workload identity pool Secara opsional, Anda dapat menambahkan variabel lingkungan tambahan untuk mengizinkan Terrform Cloud menggunakan akun layanan yang berbeda untuk fase
plan
danapply
. Untuk mengetahui informasi selengkapnya, lihat Variabel Lingkungan Opsional.Dalam daftar variabel, pastikan Kategori ditetapkan menjadi
env
untuk lima variabel yang Anda tambahkan di langkah sebelumnya.Pastikan konfigurasi Terraform Anda menggunakan penyedia Google Cloud versi
4.48.0
atau yang terbaru, dan perbarui jika perlu, seperti berikut:terraform { required_providers { google = { source = "hashicorp/google" version = "~> 4.48.0" } } }
Kirim perubahan ke repositori kode sumber Anda.
Langkah selanjutnya
- Baca selengkapnya tentang Workload Identity Federation.
- Pelajari praktik terbaik untuk menggunakan Workload Identity Federation dalam pipeline deployment.
- Lihat cara mengelola workload identity pool dan penyedia workload identity.
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2024-12-22 UTC.