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 yang dapat menggunakan identitas yang dikelola 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
Siapkan autentikasi.
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
Konsol
Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.
gcloud
Anda dapat menggunakan sampel gcloud CLI di halaman ini dari salah satu lingkungan pengembangan berikut:
-
Cloud Shell: Untuk menggunakan terminal online dengan gcloud CLI yang sudah disiapkan, aktifkan Cloud Shell.
Di bagian bawah halaman ini, sesi Cloud Shell akan dimulai dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi dimulai.
-
Shell lokal: Untuk menggunakan gcloud CLI di lingkungan pengembangan lokal, instal dan initialize gcloud CLI.
Python
Untuk menggunakan contoh Python di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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 Azure AD atau akun AWS.
AWS
Anda tidak perlu membuat perubahan konfigurasi di akun AWS.
Setelah configure 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 Azure AD yang baru di tenant Azure AD dan mengonfigurasinya agar dapat digunakan untuk workload identity federation.
Setelah configure 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 (
api://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 Azure AD, 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 yang dikelola 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 Azure AD. 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.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
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 (Contoh:
"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 (Contoh:ec2-my-role
) - Memasukkan atribut khusus
aws_ec2_instance
dan menetapkannya ke ID instance EC2 (Contoh: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 sudah Anda konfigurasi untuk workload identity federation.Di browser web, buka
https://jwt.ms/
, lalu tempel token akses ke dalam kotak teks.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. Anda juga dapat mengonfigurasi aplikasi Azure AD untuk menggunakan penetapan peran aplikasi.
Membuat workload identity pool dan penyedia workload identity
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi workload identity federation, minta administrator Anda untuk memberikan peran IAM berikut pada project:
-
Admin Workload Identity Pool (
roles/iam.workloadIdentityPoolAdmin
) -
Admin Akun Layanan (
roles/iam.serviceAccountAdmin
)
Untuk mengetahui informasi selengkapnya tentang pemberian 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.
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 Azure AD Anda. - Audiens yang diizinkan: URI ID Aplikasi yang Anda gunakan saat mendaftarkan aplikasi di Azure AD.
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 Azure AD 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 Azure AD.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.
Membuat akun layanan untuk workload eksternal
Aktifkan API IAM, Security Token Service, and Service Account Credentials.
Buat akun layanan yang merepresentasikan workload. Sebaiknya, gunakan akun layanan khusus untuk setiap workload.
Akun layanan tidak perlu berada dalam project yang sama dengan workload identity pool.
Berikan akses akun layanan untuk resource yang ingin diakses oleh identitas eksternal.
Mengizinkan workload eksternal untuk meniru identitas akun layanan
Agar identitas eksternal dapat meniru identitas akun layanan, berikan
peran Pengguna Workload Identity ke identitas eksternal (roles/iam.workloadIdentityUser
) 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
Membuat konfigurasi kredensial
Library Klien Cloud, gcloud CLI, dan Terraform dapat otomatis memperoleh kredensial eksternal, serta menggunakannya untuk meniru identitas akun layanan. Agar library dan alat dapat menyelesaikan proses ini, Anda harus menyediakan file konfigurasi kredensial. File ini menentukan:
- Tempat Anda dapat 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
Download file konfigurasi kredensial di konsol Google Cloud:
Di konsol Google Cloud, buka halaman Workload Identity Pool.
Temukan workload identity pool berisi IdP yang ingin Anda gunakan, lalu klik pool tersebut.
Pilih Akun layanan yang terhubung.
Temukan akun layanan yang ingin Anda gunakan, lalu klik
Download.Dalam dialog Mengonfigurasi aplikasi Anda, pilih penyedia berisi identitas eksternal yang akan meniru identitas akun layanan.
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 poolPROVIDER_ID
: ID penyedia workload identity poolSERVICE_ACCOUNT_EMAIL
: alamat email akun layananSERVICE_ACCOUNT_TOKEN_LIFETIME
: masa aktif token akses akun layanan, dalam hitungan detik. Jika masa aktif tidak diberikan, default-nya adalah satu jam. 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
perintah
gcloud 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 poolPOOL_ID
: ID workload identity poolPROVIDER_ID
: ID penyedia workload identity poolSERVICE_ACCOUNT_EMAIL
: alamat email akun layananAPPLICATION_ID_URI
: URI ID Aplikasi dari aplikasi AzureSERVICE_ACCOUNT_TOKEN_LIFETIME
: masa aktif token akses akun layanan, dalam hitungan detik. Jika masa aktif tidak diberikan, default-nya adalah satu jam. 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
export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
denganFILEPATH
sebagai jalur file relatif ke file konfigurasi kredensial.PowerShell
$env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
denganFILEPATH
sebagai jalur file 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 penggabungan workload identity sejak versi v2.6.0. Untuk menggunakan workload identity federation, Anda harus membangun library klien dengan gRPC versi 1.36.0 atau yang lebih baru.
Go
Library klien untuk Go mendukung penggabungan identitas jika menggunakan modul
golang.org/x/oauth2
versi v0.0.0-20210218202405-ba52d332ba99 atau versi 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 penggabungan identitas jika menggunakan artefak
com.google.auth:google-auth-library-oauth2-http
versi 0.24.0 atau versi 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 versi 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 penggabungan identitas jika menggunakan paket
google-auth
versi 1.27.0 atau versi 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 file 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 versi lebih baru:
terraform { required_providers { google = { source = "hashicorp/google" version = "~> 3.61.0" } } }
gsutil
Untuk melakukan autentikasi menggunakan workload identity federation, gunakan salah satu metode berikut:
Saat Anda menggunakan gsutil bersamaan dengan gcloud, login seperti biasa:
gcloud auth login --cred-file=FILEPATH.json
Saat Anda menggunakan gsutil sebagai aplikasi command line mandiri, edit file .boto untuk menyertakan bagian berikut:
[Credentials] gs_external_account_file = FILEPATH
Dalam kedua kasus tersebut, ganti
FILEPATH
dengan jalur file ke file konfigurasi kredensial.Dukungan untuk workload identity federation di gsutil tersedia di gcloud CLI versi 379.0.0 dan versi lebih baru.
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 file 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 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 desain infrastruktur yang andal untuk workload Anda. Untuk 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 lengkap resource 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 di atas.Azure
Hubungkan 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
Gunakan token dari Layanan Token Keamanan untuk memanggil metode
generateAccessToken
dari IAM Service Account Credentials API untuk memperoleh token akses:
Bash
ACCESS_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 $ACCESS_TOKEN
PowerShell
$AccessToken = (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 $AccessToken
Ganti SERVICE_ACCOUNT_EMAIL
dengan alamat email akun
layanan.
Langkah selanjutnya
- Baca selengkapnya mengenai workload identity federation.
- Pelajari praktik terbaik untuk menggunakan workload identity federation.
- Lihat cara mengelola workload identity pool dan penyedia workload identity.