Mengizinkan akses antarlayanan

Jika arsitektur Anda menggunakan beberapa 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 yang aman dari dalam Cloud Build.

Misalnya, jika Anda menjalankan aplikasi platform serverless seperti Cloud Functions, Cloud Run, atau App Engine, Anda dapat berinteraksi secara aman dengan aplikasi dari dalam workload Cloud Build.

Sebelum memulai

  • Enable the Cloud Build and IAM APIs.

    Enable the APIs

  • Jika berencana menggunakan akun ini untuk membuat kredensial berumur pendek, Anda juga harus mengaktifkan IAM Service Account Credentials API.

    Enable the API

  • 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 Google Cloud yang sama dengan tempat Anda menjalankan build.

Izin IAM yang diperlukan

Akun layanan yang ditentukan pengguna harus memiliki izin iam.serviceAccounts.getOpenIdToken.

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 mengonfigurasi langkah-langkah build untuk memperoleh token ID:

  • menggunakan gcloud CLI
  • kirim permintaan langsung ke server {i>metadata<i}

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_AUDIENCE adalah URL atau target audiens untuk mendapatkan token ID, seperti http://www.example.com.
  • SERVICE_ACCOUNT_ID adalah alamat email atau ID unik untuk akun layanan yang ditentukan pengguna. Contoh, service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION adalah bucket Cloud Storage untuk menyimpan log build. Contoh, 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_AUDIENCE adalah URL atau target audiens untuk mendapatkan token ID, seperti http://www.example.com.
  • SERVICE_ACCOUNT_ID adalah alamat email atau ID unik untuk akun layanan yang ditentukan pengguna. Contoh, service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION adalah bucket Cloud Storage untuk menyimpan log build. Contoh, gs://mylogsbucket.

Untuk mengetahui petunjuk tambahan tentang cara membuat dan menggunakan token ID di beban kerja, lihat Metode untuk mendapatkan token ID.

Langkah selanjutnya