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 in Cloud Build aufrufen.
Wenn Sie beispielsweise eine serverlose Plattformanwendung wie Cloud Run Functions, Cloud Run oder App Engine ausführen, können Sie sicher mit Ihrer Anwendung aus Cloud Build-Arbeitslasten heraus interagieren.
Hinweise
-
Enable the Cloud Build and IAM APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Wenn Sie dieses Konto verwenden möchten, um kurzlebige Anmeldedaten zu erstellen, müssen Sie auch die IAM Service Account Credentials API aktivieren.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.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
Ihr benutzerdefiniertes Dienstkonto muss die Berechtigung iam.serviceAccounts.getOpenIdToken
haben.
- 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 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 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 anhand des folgenden Code-Snippets 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 anhand des folgenden Code-Snippets gezeigt, wie Sie eine direkte Anfrage an den Metadatenserver senden, 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 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
.
Eine zusätzliche Anleitung zum Generieren und Verwenden von ID-Tokens in Ihren Arbeitslasten finden Sie unter Methoden zum Abrufen eines ID-Tokens.