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 sichere Endpunkte aus Cloud Build aufrufen.
Wenn Sie beispielsweise eine serverlose Plattformanwendung wie Cloud Run-Funktionen, Cloud Run oder App Engine können Sie von Cloud Build-Arbeitslasten aus mit Ihrer Anwendung interagieren.
Hinweise
-
Enable the Cloud Build and IAM APIs.
Wenn Sie dieses Konto zum Erstellen kurzlebiger Anmeldedaten verwenden möchten: müssen Sie auch die IAM Service Account Credentials API aktivieren.
Um die Befehlszeilenbeispiele in dieser Anleitung zu verwenden, 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
Ihr benutzerdefiniertes Dienstkonto muss die
Berechtigung „iam.serviceAccounts.getOpenIdToken
“.
- Weisen Sie dem vom Nutzer angegebenen Dienstkonto in dem Projekt, in dem Sie das Dienstkonto erstellt haben, die Rolle Ersteller des OpenID Connect-Identitätstokens für das Dienstkonto (
roles/iam.serviceAccountOpenIdTokenCreator
) zu.
Eine Anleitung zum Gewähren von IAM-Rollen für ein 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:
- die 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 Fordern Sie das ID-Token an, 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 zeigt das folgende Code-Snippet, wie Sie eine direkte an den Metadatenserver, um ID-Tokens abzurufen:
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 Fordern Sie das ID-Token an, 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 Siehe Methoden zum Abrufen eines ID-Tokens.