Panduan ini menjelaskan cara menggunakan Workload Identity Federation agar workload AWS dan Azure dapat mengautentikasi ke Google Cloud tanpa kunci akun layanan.
Dengan Workload Identity Federation, workload yang berjalan di AWS EC2 dan Azure dapat menukar kredensial khusus lingkungan untuk token Layanan Token Keamanan Google Cloud jangka pendek.
Kredensial khusus lingkungan meliputi:
- Instance AWS EC2 yang dapat menggunakan profil instance untuk meminta kredensial sementara.
- Azure VM dapat menggunakan identitas terkelola untuk memperoleh token akses Azure.
Dengan menyiapkan Workload Identity Federation, Anda dapat mengizinkan workload ini menukar kredensial khusus lingkungan dengan kredensial Google Cloud jangka pendek. Workload dapat menggunakan kredensial jangka pendek ini untuk mengakses Google Cloud API.
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.
Menyiapkan penyedia identitas eksternal
Anda hanya perlu melakukan langkah ini satu kali untuk setiap tenant Microsoft Entra ID atau akun AWS.
AWS
Anda tidak perlu membuat perubahan konfigurasi di akun AWS.
Setelah mengonfigurasi workload identity pool agar dapat mempercayai akun AWS, Anda dapat mengizinkan pengguna AWS dan peran AWS untuk menggunakan kredensial keamanan AWS sementara atau permanen guna memperoleh kredensial Google Cloud jangka pendek.
Azure
Anda harus membuat aplikasi Microsoft Entra ID yang baru di tenant Microsoft Entra ID dan mengonfigurasinya agar dapat digunakan untuk Workload Identity Federation.
Setelah mengonfigurasi workload identity pool agar dapat mempercayai aplikasi, pengguna dan akun utama layanan Azure dapat meminta token akses untuk aplikasi ini, serta menukarnya dengan kredensial Google Cloud jangka pendek.
Untuk membuat aplikasi, lakukan langkah berikut:
Tetapkan URI ID Aplikasi untuk aplikasi tersebut. Anda dapat menggunakan URI ID Aplikasi default (
APPID
) atau menentukan URI kustom.Anda akan memerlukan URI ID Aplikasi saat mengonfigurasi penyedia workload identity pool.
Agar aplikasi dapat memperoleh token akses untuk aplikasi Microsoft Entra ID, Anda dapat menggunakan identitas yang dikelola:
Membuat identitas yang dikelola. Catat ID Objek identitas yang dikelola. Anda akan memerlukannya saat mengonfigurasi peniruan identitas.
Tetapkan identitas terkelola ke virtual machine atau resource lain yang menjalankan aplikasi Anda.
Mengonfigurasi Workload Identity Federation
Anda hanya perlu melakukan langkah ini satu kali per akun AWS atau tenant Microsoft Entra ID. Lalu, Anda dapat menggunakan workload identity pool dan penyedia workload identity yang sama untuk beberapa workload dan di beberapa project Google Cloud.
Untuk mulai mengonfigurasi Workload Identity Federation, lakukan langkah 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 dan kondisi atribut
Kredensial khusus lingkungan dari workload AWS atau Azure Anda mencakup beberapa atribut. Anda harus menentukan atribut yang ingin digunakan sebagai ID subjek (
google.subject
) di Google Cloud.Google Cloud menggunakan ID subjek di Cloud Audit Logs dan di ID akun utama untuk mengidentifikasi pengguna atau peran AWS atau Azure dengan unik.
Anda juga dapat memetakan atribut tambahan. Lalu, Anda dapat merujuk ke atribut tambahan ini saat memberikan akses ke resource.
AWS
Pemetaan atribut dapat menggunakan kolom respons untuk
GetCallerIdentity
sebagai atribut sumber. Kolom ini meliputi:account
: nomor akun AWS.arn
: AWS ARN entity eksternal.userid
: ID unik entity panggilan.
Jika aplikasi berjalan pada instance Amazon Elastic Compute Cloud (EC2) dengan peran yang dilampirkan, Anda dapat menggunakan pemetaan atribut berikut:
google.subject=assertion.arn attribute.account=assertion.account attribute.aws_role=assertion.arn.extract('assumed-role/{role}/') attribute.aws_ec2_instance=assertion.arn.extract('assumed-role/{role_and_session}').extract('/{session}')
Pemetaan tersebut akan melakukan hal berikut:
- Menggunakan ARN sebagai ID subjek—misalnya:
"arn:aws:sts::000000000000:assumed-role/ec2-my-role/i-00000000000000000
- Memasukkan atribut khusus
account
dan menetapkannya ke ID akun AWS - Memasukkan atribut khusus
aws_role
dan menetapkannya ke nama peran AWS—misalnya:ec2-my-role
- Memasukkan atribut khusus
aws_ec2_instance
dan menetapkannya ke ID instance EC2—misalnya:i-00000000000000000
Dengan pemetaan ini, Anda dapat memberikan akses ke:
Instance EC2 tertentu:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_ec2_instance/EC2_INSTANCE_ID
Semua pengguna dan instance dalam suatu peran:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/ROLE_NAME
Azure
Pemetaan atribut dapat menggunakan klaim yang tersemat di token akses Azure, termasuk klaim kustom, sebagai atribut sumber. Dalam sebagian besar kasus, sebaiknya gunakan klaim
sub
sebagai ID subjek:google.subject=assertion.sub
Untuk token akses yang dikeluarkan bagi identitas yang dikelola, klaim
sub
mencakup ID Objek dari identitas yang dikelola. Jika Anda menggunakan klaim yang berbeda, pastikan klaim tersebut unik dan tidak dapat ditetapkan ulang.Jika tidak yakin dengan daftar klaim yang dapat Anda rujuk, lakukan langkah berikut:
Hubungkan ke Azure VM yang memiliki identitas terkelola yang ditetapkan.
Dapatkan token akses dari Layanan Metadata Instance Azure (IMDS):
Bash
curl \ "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \ -H "Metadata: true" | jq -r .access_token
Perintah ini menggunakan alat
jq
.jq
tersedia secara default di Cloud Shell.PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" ` -Headers @{Metadata="true"}).access_token Write-Host $SubjectToken
Ganti
APP_ID_URI
dengan URI ID Aplikasi dari aplikasi yang telah Anda konfigurasi untuk Workload Identity Federation.Di browser web, buka
https://jwt.ms/
, lalu tempel token akses ke dalam kolom.Klik Klaim untuk melihat daftar klaim yang tersemat di token akses.
Untuk identitas layanan, biasanya Anda tidak perlu membuat pemetaan untuk
google.groups
atau atribut khusus.Anda juga dapat 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.AWS
Anda dapat menggunakan kondisi atribut untuk membatasi pengguna dan peran IAM yang dapat menggunakan Workload Identity Federation untuk memperoleh token Google Cloud jangka pendek.
Misalnya, kondisi berikut membatasi akses ke peran AWS dan tidak mengizinkan ID IAM lainnya:
assertion.arn.startsWith('arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/')
Azure
Anda dapat menggunakan kondisi atribut untuk membatasi pengguna dan akun utama layanan yang dapat menggunakan Workload Identity Federation untuk memperoleh token Google Cloud jangka pendek. Atau, Anda dapat mengonfigurasi aplikasi Microsoft Entra ID untuk menggunakan penetapan peran aplikasi.
Membuat workload identity pool dan penyedia workload
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mengonfigurasi Workload Identity Federation, minta administrator untuk memberi Anda peran IAM berikut pada project:
-
Admin Workload Identity Pool (
roles/iam.workloadIdentityPoolAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
)
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.Kini, Anda sudah mengumpulkan semua informasi yang diperlukan untuk membuat workload identity pool dan penyedia workload identity:
Konsol
Di konsol Google Cloud, buka halaman Penyedia workload dan workload pool baru .
Di bagian Buat identity pool, masukkan:
- 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:
AWS
Konfigurasikan setelan penyedia berikut:
- Pilih penyedia: AWS.
- Nama penyedia: nama untuk penyedia. Nama ini juga digunakan sebagai ID penyedia. Anda tidak dapat mengubah ID penyedia nantinya.
Azure
Konfigurasikan setelan penyedia berikut:
- Pilih penyedia: OpenID Connect (OIDC).
- Nama penyedia: Nama untuk penyedia. Nama ini juga digunakan sebagai ID penyedia. Anda tidak dapat mengubah ID penyedia nantinya.
- URL Penerbit:
https://sts.windows.net/TENANT_ID
. GantiTENANT_ID
dengan ID tenant (GUID) dari tenant Microsoft Entra ID Anda. - Audiens yang diizinkan: URI ID Aplikasi yang Anda gunakan saat mendaftarkan aplikasi di Microsoft Entra ID.
Klik Lanjutkan.
Di bagian Mengonfigurasi atribut penyedia, tambahkan pemetaan atribut yang sudah Anda identifikasi sebelumnya.
Di bagian Kondisi atribut, masukkan kondisi atribut yang sudah Anda identifikasi sebelumnya. Jika Anda tidak memiliki kondisi atribut, biarkan kolom ini kosong.
Klik Simpan untuk membuat workload identity pool dan penyedia workload identity.
gcloud
Buat workload identity pool yang baru:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Ganti kode berikut:
POOL_ID
: ID unik untuk pool.DISPLAY_NAME
: nama pool.DESCRIPTION
: deskripsi pool. Deskripsi ini muncul saat memberikan akses ke identitas pool.
Tambahkan penyedia workload identity pool:
AWS
Untuk membuat penyedia workload identity pool untuk AWS, jalankan perintah berikut:
gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --account-id="ACCOUNT_ID" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Ganti kode berikut:
PROVIDER_ID
: ID unik untuk penyedia.POOL_ID
: ID pool.ACCOUNT_ID
: 12 digit angka yang mengidentifikasi akun AWS Anda.MAPPINGS
: Daftar yang dipisahkan koma dari pemetaan atribut yang sudah Anda identifikasi sebelumnya.CONDITIONS
: Kondisi atribut yang sudah Anda identifikasi sebelumnya. Jika Anda tidak memiliki parameter, hapus atribut.
Contoh:
gcloud iam workload-identity-pools providers create-aws example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --account-id="123456789000" \ --attribute-mapping="google.subject=assertion.arn"
Azure
Untuk membuat penyedia workload identity pool untuk Azure, jalankan perintah berikut:
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER_URI" \ --allowed-audiences="APPLICATION_ID_URI" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Ganti kode berikut:
PROVIDER_ID
: ID unik untuk penyedia.POOL_ID
: ID pool.ISSUER_URI
: ID tenant (GUID) dari tenant Microsoft Entra ID Anda, terkadang diformat sebagaihttps://sts.windows.net/TENANT_ID
. URI penerbit dapat bervariasi. Untuk menemukan URI penerbit, Anda dapat men-debug JWT menggunakan JWT.io.APPLICATION_ID_URI
: URI ID Aplikasi yang digunakan saat Anda mendaftarkan aplikasi di Microsoft Entra ID.MAPPINGS
: Daftar yang dipisahkan koma dari pemetaan atribut yang Anda identifikasi sebelumnya.CONDITIONS
: (Opsional) kondisi atribut yang Anda identifikasi sebelumnya.
Contoh:
gcloud iam workload-identity-pools providers create-oidc example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --issuer-uri="https://sts.windows.net/00000000-1111-2222-3333-444444444444" \ --allowed-audiences="api://my-app" \ --attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"
Mengautentikasi workload
Anda harus melakukan langkah berikut satu kali per workload.
Mengizinkan workload eksternal Anda mengakses resource Google Cloud
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
) ke 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 untuk workload eksternal, lakukan langkah berikut:
Aktifkan API IAM, Security Token Service, and Service Account Credentials.
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
Mendownload atau membuat konfigurasi kredensial
Library Klien Cloud, gcloud CLI, dan Terraform dapat otomatis memperoleh kredensial eksternal, dan menggunakan kredensial ini untuk meniru identitas akun layanan. Agar library dan alat dapat menyelesaikan proses ini, Anda harus menyediakan file konfigurasi kredensial. File ini menentukan hal berikut:
- Tempat Anda bisa memperoleh kredensial eksternal
- Workload identity pool dan penyedia workload identity yang akan digunakan
- Akun layanan yang akan ditiru identitasnya
Untuk membuat file konfigurasi kredensial, lakukan langkah berikut:
Konsol
Untuk mendownload file konfigurasi kredensial di konsol Google Cloud, lakukan hal berikut:
Di konsol Google Cloud, buka halaman Workload Identity Pool.
Temukan workload identity pool untuk IdP yang ingin Anda gunakan, lalu klik pool tersebut.
Jika Anda memilih untuk menggunakan akses resource langsung, lakukan hal berikut:
Klik Grant access.
Pilih Berikan akses menggunakan identitas gabungan (Direkomendasikan).
Klik Download.
Lanjutkan dengan petunjuk untuk dialog Konfigurasikan aplikasi Anda, nanti dalam prosedur ini.
Jika Anda memilih untuk menggunakan peniruan akun layanan, lakukan hal berikut:
Pilih Akun layanan yang terhubung.
Temukan akun layanan yang ingin Anda gunakan, lalu klik
Download.Lanjutkan dengan petunjuk untuk dialog Konfigurasikan aplikasi Anda, nanti dalam prosedur ini.
Dalam dialog Mengonfigurasi aplikasi Anda, pilih penyedia yang berisi identitas eksternal.
Berikan setelan tambahan berikut:
AWS
Tidak perlu setelan tambahan.
Azure
URL ID Aplikasi: URI ID Aplikasi dari aplikasi Azure
Pilih Download konfigurasi
untuk mendownload file konfigurasi kredensial, lalu klik Tutup.
gcloud
Untuk membuat file konfigurasi kredensial menggunakan
gcloud iam workload-identity-pools create-cred-config
, lakukan:AWS
Untuk membuat file konfigurasi kredensial yang memungkinkan library memperoleh token akses dari metadata instance EC2, lakukan langkah berikut:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --aws \ --output-file=FILEPATH.json
Ganti kode berikut:
PROJECT_NUMBER
: Nomor project dari project yang berisi workload identity poolPOOL_ID
: ID workload identity pool.PROVIDER_ID
: ID penyedia workload identity pool.SERVICE_ACCOUNT_EMAIL
: Jika Anda menggunakan peniruan identitas akun layanan, ganti dengan alamat email akun layanan. Hapus tanda ini jika Anda tidak menggunakan peniruan akun layanan.SERVICE_ACCOUNT_TOKEN_LIFETIME
: Jika Anda menggunakan peniruan akun layanan, ganti dengan masa aktif token akses akun layanan, dalam hitungan detik. Jika masa aktif tidak diberikan, default-nya adalah satu jam. Hapus tanda ini jika Anda tidak menggunakan peniruan akun layanan. Untuk menentukan masa aktif agar lebih lama dari satu jam, Anda harus mengonfigurasi batasan kebijakan organisasiconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: File untuk menyimpan konfigurasi.
Jika Anda menggunakan AWS IMDSv2, flag tambahan
--enable-imdsv2
harus ditambahkan ke perintahgcloud iam workload-identity-pools create-cred-config
:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --aws \ --enable-imdsv2 \ --output-file=FILEPATH.json
Jika tidak dapat menggunakan server metadata AWS, Anda dapat memberikan kredensial keamanan AWS melalui variabel lingkungan AWS berikut:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_REGION
atauAWS_DEFAULT_REGION
- Opsional:
AWS_SESSION_TOKEN
Library dan gcloud CLI menggunakan variabel lingkungan AWS ini saat server metadata AWS tidak tersedia.
Azure
Buat file konfigurasi kredensial yang memungkinkan library memperoleh token akses dari Layanan Metadata Instance Azure (IMDS):
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --azure \ --app-id-uri APPLICATION_ID_URI \ --output-file=FILEPATH.json
Ganti kode 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
: Jika Anda menggunakan peniruan identitas akun layanan, ganti dengan alamat email akun layanan. Hapus tanda ini jika Anda tidak menggunakan peniruan akun layanan.APPLICATION_ID_URI
: URI ID Aplikasi dari aplikasi Azure.SERVICE_ACCOUNT_TOKEN_LIFETIME
: Jika Anda menggunakan peniruan identitas akun layanan, masa aktif token akses akun layanan, dalam hitungan detik. Jika masa aktif tidak diberikan, default-nya adalah satu jam. Hapus tanda ini jika Anda tidak menggunakan peniruan akun layanan. Untuk menentukan masa aktif agar lebih lama dari satu jam, Anda harus mengonfigurasi batasan kebijakan organisasiconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: File untuk menyimpan konfigurasi.
Menggunakan konfigurasi kredensial untuk mengakses Google Cloud
Agar alat dan library klien dapat menggunakan konfigurasi kredensial, lakukan langkah berikut di lingkungan AWS atau Azure Anda:
Lakukan inisialisasi variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
dan arahkan ke file konfigurasi kredensial:Bash
denganexport GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
FILEPATH
adalah jalur relatif ke file konfigurasi kredensial.PowerShell
dengan$env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
FILEPATH
adalah jalur relatif ke file konfigurasi kredensial.Gunakan library klien atau alat yang mendukung Workload Identity Federation dan dapat menemukan kredensial secara otomatis:
C++
Library Klien Google Cloud untuk C++ mendukung Workload Identity Federation sejak versi v2.6.0. Untuk menggunakan Workload Identity Federation, Anda harus mem-build library klien dengan gRPC versi 1.36.0 atau yang lebih baru.
Go
Library klien untuk Go mendukung Workload Identity Federation jika menggunakan modul
golang.org/x/oauth2
versi v0.0.0-20210218202405-ba52d332ba99 atau yang lebih baru.Untuk memeriksa versi modul yang digunakan library klien Anda, jalankan perintah berikut:
cd $GOPATH/src/cloud.google.com/go go list -m golang.org/x/oauth2
Java
Library klien untuk Java mendukung Workload Identity Federation jika menggunakan artefak
com.google.auth:google-auth-library-oauth2-http
versi 0.24.0 atau yang lebih baru.Untuk memeriksa versi artefak yang digunakan library klien Anda, jalankan perintah Maven berikut di direktori aplikasi Anda:
mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
Node.js
Library klien untuk Node.js mendukung Workload Identity Federation jika menggunakan paket
google-auth-library
versi 7.0.2 atau yang lebih baru.Untuk memeriksa versi paket yang digunakan library klien Anda, jalankan perintah berikut di direktori aplikasi Anda:
npm list google-auth-library
Saat membuat objek
GoogleAuth
, Anda dapat menentukan project ID atau mengizinkanGoogleAuth
untuk otomatis menemukan project ID. Untuk otomatis menemukan project ID, akun layanan dalam file konfigurasi harus memiliki peran Browser (roles/browser
), atau peran dengan izin yang setara, di project Anda. Untuk mengetahui detailnya, lihatREADME
untuk paketgoogle-auth-library
.Python
Library klien untuk Python mendukung Workload Identity Federation jika menggunakan paket
google-auth
versi 1.27.0 atau yang lebih baru.Untuk memeriksa versi paket yang digunakan library klien Anda, jalankan perintah berikut di lingkungan tempat paket diinstal:
pip show google-auth
Untuk menentukan project ID bagi klien autentikasi, Anda dapat menetapkan variabel lingkungan
GOOGLE_CLOUD_PROJECT
atau mengizinkan klien untuk otomatis menemukan project ID. Untuk otomatis menemukan project ID, akun layanan dalam file konfigurasi harus memiliki peran Browser (roles/browser
), atau peran dengan izin yang setara, di project Anda. Untuk mengetahui detailnya, lihat panduan pengguna untuk paketgoogle-auth
.gcloud
Untuk melakukan autentikasi menggunakan Workload Identity Federation, gunakan perintah
gcloud auth login
:gcloud auth login --cred-file=FILEPATH.json
Ganti
FILEPATH
dengan jalur ke file konfigurasi kredensial.Dukungan untuk Workload Identity Federation di gcloud CLI tersedia di gcloud CLI versi 363.0.0 dan versi lebih baru.
Terraform
Penyedia Google Cloud mendukung Workload Identity Federation jika Anda menggunakan versi 3.61.0 atau yang lebih baru:
terraform { required_providers { google = { source = "hashicorp/google" version = "~> 3.61.0" } } }
bq
Untuk melakukan autentikasi menggunakan Workload Identity Federation, gunakan perintah
gcloud auth login
, sebagai berikut:gcloud auth login --cred-file=FILEPATH.json
Ganti
FILEPATH
dengan jalur ke file konfigurasi kredensial.Dukungan untuk Workload Identity Federation di bq tersedia di gcloud CLI versi 390.0.0 dan versi lebih baru.
Jika tidak dapat menggunakan library klien yang mendukung Workload Identity Federation, Anda dapat melakukan autentikasi secara terprogram menggunakan REST API.
Skenario lanjutan
Melakukan autentikasi workload menggunakan REST API
Jika tidak dapat menggunakan library klien, Anda dapat mengikuti langkah ini untuk mengizinkan workload eksternal memperoleh token akses jangka pendek menggunakan REST API:
Dapatkan kredensial dari IdP eksternal:
AWS
Buat dokumen JSON yang berisi informasi yang biasanya akan Anda sertakan dalam permintaan ke endpoint
GetCallerIdentity()
AWS, termasuk tanda tangan permintaan yang valid.Workload Identity Federation merujuk ke dokumen JSON ini sebagai token
GetCallerIdentity
. Token ini memungkinkan Workload Identity Federation memverifikasi identitas tanpa mengungkapkan kunci akses rahasia AWS.Token
GetCallerIdentity
terlihat mirip seperti:{ "url": "https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15", "method": "POST", "headers": [ { "key": "Authorization", "value" : "AWS4-HMAC-SHA256 Credential=AKIASOZTBDV4D7ABCDEDF/20200228/us-east-1/sts/aws4_request, SignedHeaders=host;x-amz-date,Signature=abcedefdfedfd" }, { "key": "host", "value": "sts.amazonaws.com" }, { "key": "x-amz-date", "value": "20200228T225005Z" }, { "key": "x-goog-cloud-target-resource", "value": "//iam.googleapis.com/projects/12345678/locations/global/workloadIdentityPools/my-pool/providers/my-aws-provider" }, { "key": "x-amz-security-token", "value": "GizFWJTqYX...xJ55YoJ8E9HNU=" } ] }
Token tersebut berisi kolom berikut:
url
: URL endpoint AWS STS untukGetCallerIdentity()
, dengan isi permintaanGetCallerIdentity()
standar yang ditambahkan sebagai parameter kueri. Contoh,https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15
. Sebaiknya gunakan endpoint STS regional dan rancang infrastruktur yang andal untuk workload Anda. Untuk mengetahui informasi selengkapnya, lihat Endpoint AWS STS regional.method
: Metode permintaan HTTP:POST
.headers
: Header permintaan HTTP, harus mencakup:Authorization
: Tanda tangan permintaan.host
: Nama host kolomurl
, misalnya,sts.amazonaws.com
.x-amz-date
: Waktu saat Anda akan mengirim permintaan, diformat sebagai string ISO 8601 Basic. Nilai ini biasanya ditetapkan ke waktu saat ini dan digunakan untuk membantu mencegah serangan replay.x-goog-cloud-target-resource
: Nama resource lengkap penyedia identitas tanpa awalanhttps:
. Contoh://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
x-amz-security-token
: Token sesi. Hanya diperlukan jika Anda menggunakan kredensial keamanan sementara.
Contoh berikut membuat token
GetCallerIdentity
yang dienkode URL. Ekstrak token yang dienkode URL untuk digunakan nantinya. Tindakan ini juga akan membuat token yang dapat dibaca manusia hanya untuk referensi Anda:Lakukan inisialisasi variabel berikut:
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:aws:token-type:aws4_request" SUBJECT_TOKEN=TOKEN
PowerShell
$SubjectTokenType = "urn:ietf:params:aws:token-type:aws4_request" $SubjectToken = "TOKEN"
Dengan
TOKEN
sebagai tokenGetCallerIdentity
yang dienkode URL dan dihasilkan oleh skrip.Azure
Hubungkan ke Azure VM yang memiliki identitas terkelola yang ditetapkan dan dapatkan token akses dari Layanan Metadata Instance Azure (IMDS):
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt" SUBJECT_TOKEN=$(curl \ "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \ -H "Metadata: true" | jq -r .access_token) echo $SUBJECT_TOKEN
Perintah ini menggunakan alat
jq
.jq
tersedia secara default di Cloud Shell.PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" ` -Headers @{Metadata="true"}).access_token Write-Host $SubjectToken
Dengan
APP_ID_URI
sebagai URI ID Aplikasi dari aplikasi yang sudah Anda konfigurasi untuk Workload Identity Federation.Gunakan API Layanan Token Keamanan untuk menukar kredensial dengan token akses jangka pendek:
Bash
STS_TOKEN=$(curl https://sts.googleapis.com/v1/token \ --data-urlencode "audience=//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \ --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \ --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \ --data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \ --data-urlencode "subject_token_type=$SUBJECT_TOKEN_TYPE" \ --data-urlencode "subject_token=$SUBJECT_TOKEN" | jq -r .access_token) echo $STS_TOKEN
PowerShell
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 $StsToken = (Invoke-RestMethod ` -Method POST ` -Uri "https://sts.googleapis.com/v1/token" ` -ContentType "application/json" ` -Body (@{ "audience" = "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" "grantType" = "urn:ietf:params:oauth:grant-type:token-exchange" "requestedTokenType" = "urn:ietf:params:oauth:token-type:access_token" "scope" = "https://www.googleapis.com/auth/cloud-platform" "subjectTokenType" = $SubjectTokenType "subjectToken" = $SubjectToken } | ConvertTo-Json)).access_token Write-Host $StsToken
Ganti nilai berikut:
PROJECT_NUMBER
: Nomor project dari project yang berisi workload identity poolPOOL_ID
: ID workload identity poolPROVIDER_ID
: ID penyedia workload identity pool
Jika Anda menggunakan peniruan akun layanan, gunakan token dari Layanan Token Keamanan untuk memanggil metode
generateAccessToken
dari IAM Service Account Credentials API untuk mendapatkan token akses.
Token untuk layanan Cloud Run
Saat mengakses layanan Cloud Run, Anda harus menggunakan token ID.
Bash
TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .token { "audience": "SERVICE_URL" } EOF ) echo $TOKEN
PowerShell
$Token = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "audience" = "SERVICE_URL" } | ConvertTo-Json)).token Write-Host $Token
Ganti kode berikut:
-
SERVICE_ACCOUNT_EMAIL
: alamat email akun layanan. -
SERVICE_URL
: URL layanan—misalnya,https://my-service-12345-us-central1.run.app
. Anda juga dapat menetapkannya ke endpoint layanan kustom. Untuk informasi selengkapnya, lihat Memahami audiens kustom.
Token untuk platform lain
Saat mengakses layanan lain, Anda harus menggunakan token akses.
Bash
TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .accessToken { "scope": [ "https://www.googleapis.com/auth/cloud-platform" ] } EOF ) echo $TOKEN
PowerShell
$Token = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "scope" = , "https://www.googleapis.com/auth/cloud-platform" } | ConvertTo-Json)).accessToken Write-Host $Token
Ganti kode berikut:
-
SERVICE_ACCOUNT_EMAIL
: alamat email akun layanan.
Langkah selanjutnya
- Baca selengkapnya tentang Workload Identity Federation.
- Pelajari praktik terbaik untuk menggunakan Workload Identity Federation.
- 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-11-27 UTC.