Jika arsitektur Anda menggunakan banyak layanan, Anda mungkin memerlukan kredensial untuk mengaktifkan komunikasi antarlayanan. Cloud Build menyediakan dukungan bawaan untuk standar OpenID Connect (OIDC) untuk autentikasi dan otorisasi yang aman antarlayanan.
Anda dapat menggunakan Cloud Build untuk membuat token ID. Dengan token ini, Anda dapat memanggil endpoint aman dari dalam Cloud Build.
Misalnya, jika Anda menjalankan aplikasi platform serverless seperti Cloud Run Functions, Cloud Run, atau App Engine, Anda dapat berinteraksi dengan aman dengan aplikasi Anda dari dalam workload Cloud Build.
Sebelum memulai
-
Aktifkan Cloud Build dan IAM API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran. Jika Anda berencana menggunakan akun ini untuk membuat kredensial berjangka pendek, Anda juga perlu mengaktifkan IAM Service Account Credentials API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.Untuk menggunakan contoh command line dalam panduan ini, instal dan konfigurasi Google Cloud CLI.
Pastikan Anda telah membuat akun layanan yang ingin digunakan. Anda harus membuat akun di project yang sama Google Cloud tempat Anda menjalankan build.
Izin IAM yang diperlukan
Akun layanan yang ditentukan pengguna harus memiliki izin iam.serviceAccounts.getOpenIdToken.
- Berikan peran Pembuat Token OpenID Connect Identity pada Akun Layanan (
roles/iam.serviceAccountOpenIdTokenCreator) ke akun layanan yang ditentukan pengguna di project tempat Anda membuat akun layanan.
Untuk mengetahui petunjuk tentang cara memberikan peran IAM ke akun layanan, lihat Mengelola akses ke akun layanan.
Metode untuk mendapatkan token ID
Ada dua cara untuk mengonfigurasi langkah-langkah build guna mendapatkan token ID:
- menggunakan gcloud CLI
- mengirim permintaan langsung ke server metadata
Mendapatkan token ID melalui gcloud
Di bagian ini, cuplikan kode berikut menunjukkan cara menggunakan gcloud CLI untuk mendapatkan token ID:
YAML
steps:
- name: 'gcr.io/cloud-builders/gcloud'
script: 'gcloud auth print-identity-token --audiences ${_TOKEN_AUDIENCE} > /workspace/identity_token.txt'
env:
- _TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}
service_account: '$_SERVICE_ACCOUNT'
substitutions:
_TOKEN_AUDIENCE: 'TOKEN_AUDIENCE'
_SERVICE_ACCOUNT_ID: 'SERVICE_ACCOUNT_ID'
_SERVICE_ACCOUNT: 'projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}'
logsBucket: 'LOGS_BUCKET_LOCATION'
options:
logging: GCS_ONLY
dynamic_substitutions: true
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/gcloud",
"script": "gcloud auth print-identity-token --audiences ${_TOKEN_AUDIENCE} > /workspace/identity_token.txt"
"env": [
"_TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}"
]
}
],
"service_account": "$_SERVICE_ACCOUNT",
"substitutions": {
"_TOKEN_AUDIENCE": "TOKEN_AUDIENCE",
"_SERVICE_ACCOUNT_ID": "SERVICE_ACCOUNT_ID",
"_SERVICE_ACCOUNT": "projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}"
},
"logsBucket": "LOGS_BUCKET_LOCATION",
"options": {
"logging": "GCS_ONLY",
"dynamic_substitutions": true
}
}
Ganti kode berikut:
TOKEN_AUDIENCEadalah URL atau audiens target untuk mendapatkan token ID, sepertihttp://www.example.com.SERVICE_ACCOUNT_IDadalah alamat email atau ID unik untuk akun layanan yang ditentukan pengguna. Misalnya,service-account-name@project-id.iam.gserviceaccount.com.LOGS_BUCKET_LOCATIONadalah bucket Cloud Storage untuk menyimpan log build. Misalnya,gs://mylogsbucket.
Mengirim permintaan langsung ke server metadata
Di bagian ini, cuplikan kode berikut menunjukkan cara membuat permintaan langsung ke server metadata untuk mendapatkan token ID:
YAML
steps:
- name: 'gcr.io/cloud-builders/curl'
id: 'printTokenFromCurl'
script: |
curl -H 'Metadata-Flavor: Google' http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${_TOKEN_AUDIENCE} -o /workspace/identity_token.txt
env:
- _TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}
service_account: '$_SERVICE_ACCOUNT'
substitutions:
_TOKEN_AUDIENCE: 'TOKEN_AUDIENCE'
_SERVICE_ACCOUNT_ID: 'SERVICE_ACCOUNT_ID'
_SERVICE_ACCOUNT: 'projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}'
logsBucket: 'LOGS_BUCKET_LOCATION'
options:
logging: GCS_ONLY
dynamic_substitutions: true
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/curl",
"id": "printTokenFromCurl"
"script": "curl -H 'Metadata-Flavor: Google' http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${_TOKEN_AUDIENCE} -o /workspace/identity_token.txt"
"env":
"_TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}"
}
],
"service_account": "$_SERVICE_ACCOUNT",
"substitutions": {
"_TOKEN_AUDIENCE": "TOKEN_AUDIENCE",
"_SERVICE_ACCOUNT_ID": "SERVICE_ACCOUNT_ID",
"_SERVICE_ACCOUNT": "projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}"
},
"logsBucket": "LOGS_BUCKET_LOCATION",
"options": {
"logging": "GCS_ONLY",
"dynamic_substitutions": true
}
}
Ganti kode berikut:
TOKEN_AUDIENCEadalah URL atau audiens target untuk mendapatkan token ID, sepertihttp://www.example.com.SERVICE_ACCOUNT_IDadalah alamat email atau ID unik untuk akun layanan yang ditentukan pengguna. Misalnya,service-account-name@project-id.iam.gserviceaccount.com.LOGS_BUCKET_LOCATIONadalah bucket Cloud Storage untuk menyimpan log build. Misalnya,gs://mylogsbucket.
Untuk mengetahui petunjuk tambahan tentang cara membuat dan menggunakan token ID dalam workload Anda, lihat Metode untuk mendapatkan token ID.
Langkah berikutnya
- Meneruskan data dalam langkah-langkah pembangunan aplikasi
- Men-deploy ke Cloud Run
- Men-deploy ke App Engine