Dienst-zu-Dienst-Zugriff autorisieren

Wenn Ihre Architektur mehrere Dienste verwendet, benötigen Sie wahrscheinlich Anmeldedaten, um die Kommunikation zwischen 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 mit Cloud Build ID-Tokens generieren. Mit diesen Tokens können Sie sichere Endpunkte aus Cloud Build heraus aufrufen.

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

Hinweise

  • Cloud Build and IAM APIs aktivieren.

    Aktivieren Sie die APIs

  • Wenn Sie dieses Konto zum Erstellen kurzlebiger Anmeldedaten verwenden möchten, müssen Sie auch die IAM Service Account Credentials API aktivieren.

    Aktivieren Sie die 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 im selben Google Cloud-Projekt erstellen, in dem Sie Builds ausführen.

Erforderliche IAM-Berechtigungen

Das vom Nutzer 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 Build-Schritte zum Abrufen von ID-Tokens zu konfigurieren:

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

ID-Token über gcloud abrufen

In diesem Abschnitt wird anhand des folgenden Code-Snippets veranschaulicht, 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 für das benutzerdefinierte Dienstkonto. Beispiel: service-account-name@project-id.iam.gserviceaccount.com.
  • LOGS_BUCKET_LOCATION ist der Cloud Storage-Bucket zum Speichern von Build-Logs. Beispiel: gs://mylogsbucket.

Direkte Anfrage an den Metadatenserver senden

In diesem Abschnitt wird anhand des folgenden Code-Snippets veranschaulicht, wie Sie eine direkte Anfrage an den Metadatenserver senden, 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 für das benutzerdefinierte Dienstkonto. 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