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 federation identitas workload Microsoft Entra untuk mendapatkan token ID yang secara unik mengidentifikasi project Azure DevOps.
- 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
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
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
-
Buat kredensial autentikasi lokal untuk Akun Google Anda:
gcloud auth application-default login
Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi penggabungan identitas workload,
minta administrator untuk memberi Anda peran IAM
Workload Identity Pool Admin (roles/iam.workloadIdentityPoolAdmin
) pada project.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.
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 DevOps Azure mengautentikasi ke Google Cloud, pertama-tama Anda harus mengonfigurasi koneksi layanan untuk Azure Resource Manager. Koneksi ini memungkinkan pipeline memperoleh token ID, yang kemudian dapat ditukar dengan kredensial Google Cloud.
Untuk membuat koneksi layanan untuk Azure Resource Manager, lakukan hal berikut:
- Di Azure DevOps, buka project Anda lalu buka Project Settings.
- Buka Pipeline > Koneksi layanan.
- Klik Create service connection.
- Pilih Azure Resource Manager.
- Klik Next.
- Pilih Workload Identity federation (otomatis)
- Klik Next.
Konfigurasikan setelan berikut:
Tingkat cakupan: Pilih langganan.
Anda harus memilih langganan meskipun tidak berencana menggunakan koneksi layanan untuk mengakses resource Azure.
Service connection name: Masukkan nama, misalnya
google-cloud
.
Klik Save.
Pada langkah berikutnya, Anda memerlukan penerbit dan ID subjek koneksi layanan. Untuk mencari detail ini, lakukan hal berikut:
- Klik koneksi layanan yang baru saja dibuat.
- Klik Kelola Utama Layanan.
- Buka Sertifikat & rahasia > Kredensial gabungan.
- Klik kredensial gabungan.
Di halaman Edit kredensial, temukan ID berikut:
- Penerbit: mengidentifikasi organisasi Azure DevOps Anda secara unik
- ID subjek: mengidentifikasi koneksi layanan secara unik
Azure DevOps secara 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 langkah berikut:
- Di portal Azure, buka langganan yang Anda pilih sebagai cakupan.
- Buka Kontrol akses (IAM) > Penetapan peran.
- Temukan penetapan peran untuk koneksi layanan, lalu hapus.
GitHub Actions
Anda tidak perlu membuat perubahan konfigurasi apa pun di akun GitHub Anda.
Setelah Anda configure 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 configure 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 configure 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 hal berikut:
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
Sebaiknya,
gunakan project khusus untuk mengelola workload identity pool dan penyedia workload identity.
-
Make sure that billing is enabled for your Google Cloud project.
Aktifkan API IAM, Resource Manager, Service Account Credentials, and Security Token Service.
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 DevOps Azure 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 di atas 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
Atau, gunakan kondisi atribut untuk membatasi akses ke koneksi layanan tertentu. Misalnya, kondisi berikut membatasi akses ke koneksi di 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' && 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).
- Provider name: nama project Azure DevOps, atau nama kustom.
- Provider ID: nama project Azure DevOps, atau ID kustom. Anda tidak dapat mengubah ID penyedia nantinya.
- Penerbit 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 kumpulanDISPLAY_NAME
: nama kumpulanDESCRIPTION
: 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 Anda telah 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 kumpulan identitas workload yang ada untuk membatasi akses ke token yang diterbitkan oleh organisasi GitHub, grup GitLab, atau organisasi Cloud Terraform Anda.
Guna menemukan kondisi atribut yang direkomendasikan untuk pipeline Anda, lihat Menentukan kondisi atribut.
Konsol
Di Konsol Google Cloud, buka halaman Workload Identity Pools.
Temukan kumpulan workload identity yang berisi penyedia, lalu klik ikon
Expand node untuk kumpulan tersebut.Temukan penyedia kumpulan workload identity yang ingin Anda edit, lalu klik
Edit.Di Kondisi atribut, masukkan kondisi atribut yang telah Anda identifikasi sebelumnya.
Untuk memperbarui penyedia dan kumpulan workload identity, klik Save.
gcloud
Untuk memperbarui penyedia kumpulan workload identity, 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.
Membuat akun layanan untuk pipeline deployment
Aktifkan API IAM, Security Token Service, and Service Account Credentials.
Membuat akun layanan yang mewakili workload. Sebaiknya Anda gunakan akun layanan khusus untuk setiap pipeline deployment.
Akun layanan tidak perlu berada dalam project yang sama dengan workload identity pool.
Memberikan akun layanan akses ke resource yang ingin diakses oleh identitas eksternal.
Mengizinkan pipeline deployment untuk meniru identitas akun layanan
Agar identitas eksternal dapat meniru identitas akun layanan, berikan
peran Pengguna Workload Identity (roles/iam.workloadIdentityUser
) kepada mereka pada
akun layanan tersebut. Anda dapat memberikan peran ke identitas eksternal tertentu, atau ke
beberapa identitas eksternal:
- Untuk identitas eksternal tertentu, tulis kondisi atribut yang memeriksa
atribut
google.subject
. - Untuk grup identitas eksternal, tulis kondisi atribut yang memeriksa
atribut
google.groups
atau atribut khususattribute.NAME
.
Konsol
Agar identitas eksternal dapat meniru identitas akun layanan menggunakan Konsol Google Cloud, lakukan hal berikut:
Di Konsol Google Cloud, buka halaman Workload Identity Pool.
Temukan workload identity pool yang ingin Anda perbarui lalu pilih pool tersebut.
Untuk memberikan akses ke workload identity pool yang dipilih, klik
Berikan akses.Dalam daftar Akun layanan, pilih akun layanan untuk ditiru oleh identitas eksternal.
Untuk memilih identitas dalam pool 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; contohnya, jika Anda menggunakan pemetaan atribut
google.subject=assertion.sub
, tetapkan namaAtribut menjadisubject
dan Nilai atribut menjadi nilai klaimsub
dalam token yang dikeluarkan oleh penyedia identitas eksternal Anda.
Untuk menyimpan konfigurasi, klik Simpan, lalu Tutup.
gcloud
Agar identitas eksternal dapat meniru identitas akun layanan menggunakan gcloud CLI, lakukan hal berikut:
Untuk memperoleh nomor project Anda saat ini, jalankan perintah berikut:
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
Untuk memberikan peran Pemilik Workload Identity (
roles/iam.workloadIdentityUser
) ke identitas eksternal yang memenuhi kriteria tertentu: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 Anda
Mengonfigurasi pipeline deployment
Sekarang Anda siap menggunakan workload identity federation di pipeline deployment Anda.
Azure DevOps
Edit file azure-pipelines.yml
Anda dan tambahkan kode berikut ke konfigurasi pekerjaan Anda:
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 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 poolPOOL_ID
: ID workload identity poolPROVIDER_ID
: ID penyedia workload identity poolSERVICE_ACCOUNT_EMAIL
: alamat email akun layanan
Contoh:
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:
- Instruksikan GitLab untuk mengeluarkan token ID, dan menyediakannya di
variabel lingkungan bernama
WORKLOAD_IDENTITY_TOKEN
. Token ID menggunakan penyedia workload identity pool Anda sebagai audiens. - Simpan token ID ke file sementara yang bernama
.workload_identity.jwt
. - Buat file konfigurasi kredensial yang menginstruksikan library klien
untuk membaca token ID dari
.workload_identity.jwt
dan gunakan untuk meniru identitas akun layanan. - Tetapkan 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:
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.
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-11-27 UTC.