Dienst-zu-Dienst-Zugriff autorisieren

Wenn Ihre Architektur mehrere Dienste verwendet, benötigen Sie wahrscheinlich Anmeldedaten, um die Kommunikation zwischen den Diensten zu ermöglichen. Cloud Build bietet integrierte Unterstützung für den OpenID Connect (OIDC)-Standard für die sichere Authentifizierung und Autorisierung zwischen Diensten.

Sie können Cloud Build verwenden, um ID-Tokens zu generieren. Mit diesen Tokens können Sie sichere Endpunkte innerhalb von Cloud Build aufrufen.

Wenn Sie beispielsweise eine serverlose Plattformanwendung wie Cloud Run-Funktionen, Cloud Run oder App Engine ausführen, können Sie über Cloud Build-Arbeitslasten sicher mit Ihrer Anwendung interagieren.

Hinweise

  • Enable the Cloud Build and IAM APIs.

    Enable the APIs

  • Wenn Sie dieses Konto verwenden möchten, um kurzlebige Anmeldedaten zu erstellen, müssen Sie auch die IAM Service Account Credentials API aktivieren.

    Enable the API

  • Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, installieren und konfigurieren Sie die Google Cloud CLI.

  • Achten Sie darauf, dass Sie das Dienstkonto erstellt haben, das Sie verwenden möchten. Sie müssen das Konto in demselben Google Cloud -Projekt erstellen, in dem Sie Builds ausführen.

Erforderliche IAM-Berechtigungen

Das von Ihnen angegebene Dienstkonto muss die Berechtigung iam.serviceAccounts.getOpenIdToken haben.

Eine Anleitung zum Zuweisen von IAM-Rollen zu einem Dienstkonto finden Sie unter Zugriff auf Dienstkonten verwalten.

Methoden zum Abrufen eines ID-Tokens

Es gibt zwei Möglichkeiten, Ihre Buildschritte so zu konfigurieren, dass ID-Tokens abgerufen werden:

  • gcloud CLI verwenden
  • eine direkte Anfrage an den Metadatenserver senden

ID-Token über gcloud abrufen

In diesem Abschnitt wird mit dem folgenden Code-Snippet gezeigt, wie Sie mit der gcloud CLI ID-Tokens abrufen:

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
  }
}

Ersetzen Sie Folgendes:

  • TOKEN_AUDIENCE ist die URL oder Zielgruppe, für die das ID-Token abgerufen werden soll, z. B. http://www.example.com.
  • SERVICE_ACCOUNT_ID ist die E-Mail-Adresse oder eindeutige ID des vom Nutzer angegebenen Dienstkontos. Beispiel: service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION ist der Cloud Storage-Bucket, in dem Build-Logs gespeichert werden. Beispiel: gs://mylogsbucket.

Direkte Anfrage an den Metadatenserver senden

In diesem Abschnitt wird im folgenden Code-Snippet gezeigt, wie du eine direkte Anfrage an den Metadatenserver sendest, um ID-Tokens zu erhalten:

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
  }
}

Ersetzen Sie Folgendes:

  • TOKEN_AUDIENCE ist die URL oder Zielgruppe, für die das ID-Token abgerufen werden soll, z. B. http://www.example.com.
  • SERVICE_ACCOUNT_ID ist die E-Mail-Adresse oder eindeutige ID des vom Nutzer angegebenen Dienstkontos. Beispiel: service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION ist der Cloud Storage-Bucket, in dem Build-Logs gespeichert werden. Beispiel: gs://mylogsbucket.

Weitere Informationen zum Generieren und Verwenden von ID-Tokens in Ihren Arbeitslasten finden Sie unter Methoden zum Abrufen eines ID-Tokens.

Nächste Schritte