Dienstidentität konfigurieren

Ein Cloud Run-Dienst oder eine Cloud Run-Überarbeitung hat eine Dienstidentität, die als authentifiziertes Konto für den Zugriff auf Google Cloud APIs über Ihren Cloud Run-Instanzcontainer verwendet wird. Weitere Informationen zur Dienstidentität finden Sie unter Einführung in die Dienstidentität.

So wird die Dienstidentität verwendet

In Cloud Run ist die Dienstidentität ein Dienstkonto, das sowohl eine Ressource als auch ein Hauptkonto ist.

  • Dienstidentität als Ressource: Um ein Dienstkonto als Dienstidentität anzuhängen, muss das Bereitstellerkonto Zugriff auf die Dienstidentitätsressource haben. Bei bestimmten Vorgängen, z. B. zum Erstellen oder Aktualisieren eines Dienstes oder einer Überarbeitung, muss das Bereitstellerkonto Berechtigungen für die Dienstidentitätsressource haben.
  • Dienstidentität als Hauptkonto: Um von einem Cloud Run-Dienst oder einer Cloud Run-Überarbeitung aus auf Google Cloud APIs zugreifen zu können, müssen Sie der Dienstidentität die erforderlichen Rollen oder Berechtigungen für die Vorgänge erteilen, die Ihr Dienst oder Ihre Überarbeitung ausführen soll.

Im nächsten Abschnitt werden die erforderlichen Rollen beschrieben, um dem Bereitstellerkonto Zugriff auf die Dienstidentitätsressource und den Zugriff für das Dienstkontohauptkonto zu gewähren.

Erforderliche Rollen

Sie oder Ihr Administrator müssen IAM-Rollen und -Berechtigungen für das Bereitstellerkonto und die Dienstidentität zuweisen.

Klicken, um die erforderlichen Rollen für das Bereitstellerkonto aufzurufen

Um die Berechtigungen zu erhalten, die Sie zum Anhängen eines Dienstkontos als Dienstidentität für den Dienst oder die Überarbeitung benötigen, müssen Sie oder Ihr Administrator Ihrem Bereitstellerkonto die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das Dienstkonto zuweisen, das als Dienstidentität verwendet wird.

Diese vordefinierte Rolle enthält die Berechtigung iam.serviceAccounts.actAs, die zum Anhängen eines Dienstkontos für den Dienst oder die Überarbeitung erforderlich ist. Sie können diese Berechtigung auch erhalten, indem Sie benutzerdefinierte Rollen konfigurieren oder andere vordefinierte Rollen verwenden.

Eine Anleitung dazu, wie Sie dem Bereitstellerkonto diese Rolle für die Dienstidentität zuweisen, finden Sie unter Bereitstellungsberechtigungen. Befindet sich das Dienstkonto in einem anderen Projekt als der Cloud Run-Dienst oder die Cloud Run-Überarbeitung, müssen Sie oder Ihr Administrator auch eine IAM-Rolle für den Cloud Run-Dienst-Agent konfigurieren und eine Organisationsrichtlinie einrichten. Weitere Informationen finden Sie unter Dienstkonten in anderen Projekten verwenden.

Klicken, um die erforderlichen Rollen für die Dienstidentität anzusehen

Damit die Dienstidentität von Cloud Run aus auf Google Cloud APIs zugreifen kann, müssen Sie oder Ihr Administrator der Dienstidentität die Berechtigungen oder Rollen erteilen, die für die von Ihnen gewünschten Vorgänge erforderlich sind. Informationen zum Zugriff auf bestimmte Cloud-Clientbibliotheken finden Sie in der Google Cloud-Dokumentation für den Google Cloud-Dienst.

Wenn ein Cloud Run-Dienst oder eine Überarbeitung nicht auf andere Google Cloud-Dienste zugreift, müssen Sie der Dienstidentität keine Rollen oder Berechtigungen zuweisen und Sie können das Standard-Dienstkonto verwenden, das dem Projekt zugewiesen wurde.

Empfehlungen zum Erstellen dedizierter Dienstkonten abrufen

Wenn Sie ein neues Dienstkonto über die Google Cloud Console erstellen, ist der optionale Schritt "Diesem Dienstkonto Zugriff auf das Projekt gewähren" für jeden zusätzlichen Zugriff erforderlich. Beispielsweise kann ein Cloud Run-Dienst einen anderen privaten Cloud Run-Dienst aufrufen oder auf eine Cloud SQL-Datenbank zugreifen, die beide IAM-Rollen erfordern. Weitere Informationen finden Sie in der Dokumentation zum Verwalten des Zugriffs.

Der Recommender-Dienst gibt automatisch Empfehlungen zum Erstellen eines dedizierten Dienstkontos mit den minimal erforderlichen Berechtigungen.

Dienstidentität konfigurieren

Wenn Sie noch kein Dienstkonto erstellt haben, können Sie entweder ein nutzerverwaltetes Dienstkonto in IAM oder in Cloud Run erstellen.

Zum Konfigurieren der Dienstidentität verwenden Sie entweder die Google Cloud Console, die gcloud CLI oder die API (YAML), wenn Sie einen neuen Dienst erstellen oder neue Überarbeitung bereitstellen oder Terraform:

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Öffnen Sie Cloud Run.

  2. Klicken Sie auf Dienst erstellen, wenn Sie einen neuen Dienst für die Bereitstellung konfigurieren. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Wenn Sie einen neuen Dienst konfigurieren, füllen Sie die Seite mit den anfänglichen Diensteinstellungen wie gewünscht aus und klicken Sie dann auf Container, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  4. Klicken Sie auf den Tab Sicherheit.

    Image

    • Klicken Sie auf das Drop-down-Menü Dienstkonto und wählen Sie ein vorhandenes Dienstkonto aus oder klicken Sie gegebenenfalls auf Neues Dienstkonto erstellen.
  5. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

Wenn Sie noch kein Dienstkonto erstellt haben, können Sie entweder ein nutzerverwaltetes Dienstkonto in IAM erstellen.

Sie können einen vorhandenen Dienst für ein neues Laufzeitdienstkonto mithilfe des folgenden Befehls aktualisieren:

gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

Ersetzen Sie:

  • SERVICE durch den Namen des Dienstes.
  • SERVICE_ACCOUNT durch das Dienstkonto, das der neuen Identität zugeordnet ist: Dieser Wert ist die E-Mail-Adresse des Dienstkontos, z. B. example@myproject.iam.gserviceaccount.com.

Sie können ein Dienstkonto auch während der Bereitstellung mit dem folgenden Befehl festlegen:

gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT

Ersetzen Sie:

  • IMAGE_URL durch einen Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • SERVICE_ACCOUNT durch das Dienstkonto, das der neuen Identität zugeordnet ist: Dieser Wert ist die E-Mail-Adresse des Dienstkontos, z. B. example@myservice.iam.gserviceaccount.com.

YAML

Wenn Sie noch kein Dienstkonto erstellt haben, können Sie entweder ein nutzerverwaltetes Dienstkonto in IAM erstellen.

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aktualisieren Sie das Attribut serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT
    

    Ersetzen Sie

    • SERVICE durch den Namen Ihres Cloud Run-Dienstes.
    • SERVICE_ACCOUNT durch das Dienstkonto, das der neuen Identität zugeordnet ist: Dieser Wert ist die E-Mail-Adresse des Dienstkontos, z. B. SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Fügen Sie der vorhandenen Datei main.tf die folgende Ressource hinzu, um ein Dienstkonto zu erstellen:

resource "google_service_account" "cloudrun_service_identity" {
  account_id = "my-service-account"
}

Erstellen oder aktualisieren Sie einen Cloud Run-Dienst und fügen Sie Ihr Dienstkonto hinzu:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloud-run-srv"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.cloudrun_service_identity.email
  }
}

Dienstkonten in anderen Projekten verwenden

Wenn Sie ein Dienstkonto aus einem anderen Google Cloud-Projekt als der Cloud Run-Ressource konfigurieren, gehen Sie so vor:

  1. Sie oder Ihr Administrator müssen die Rolle "Dienstkontonutzer" (roles/iam.serviceAccountUser) für das Dienstkonto zuweisen, das Sie als Dienstidentität verwenden.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

      Zur Seite „Dienstkonten“

    2. Wählen Sie die E-Mail-Adresse des Dienstkontos aus, die Sie als Dienstidentität verwenden.

    3. Klicken Sie auf den Tab Berechtigungen.

    4. Klicken Sie auf die Schaltfläche Zugriff gewähren.

    5. Geben Sie die E-Mail-Adresse des Bereitstellerkontos ein, die dem Hauptkonto entspricht, dem Sie die Administrator- oder Entwicklerrolle zuweisen.

    6. Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle Dienstkonten > Dienstkontonutzer aus.

    7. Klicken Sie auf Speichern.

    gcloud

    Verwenden Sie den Befehl gcloud iam service-accounts add-iam-policy-binding und ersetzen Sie die markierten Variablen durch die entsprechenden Werte:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"
    

    Ersetzen Sie:

    • SERVICE_ACCOUNT_NAME: Der Name des Dienstkontos, an das Sie die Cloud Run-Ressource anhängen.
    • SERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, in dem sich das Dienstkonto befindet.
    • PRINCIPAL durch das Bereitstellerkonto, für das Sie die Bindung hinzufügen, im Format user|group|serviceAccount:email oder domain:domain. Beispiele:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. Sie oder Ihr Administrator müssen dem Dienst-Agent der Cloud Run-Ressource die Rolle "Ersteller von Dienstkonto-Tokens" (roles/iam.serviceAccountTokenCreator) für das Dienstkonto zuweisen, das Sie als Dienstidentität verwenden. Der Dienst-Agent hat das Format service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

      Zur Seite „Dienstkonten“

    2. Wählen Sie die E-Mail-Adresse des Dienstkontos aus, die Sie als Dienstidentität verwenden.

    3. Klicken Sie auf den Tab Berechtigungen.

    4. Klicken Sie auf die Schaltfläche Zugriff gewähren.

    5. Geben Sie die E-Mail-Adresse des Dienst-Agents ein. Beispiel: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    6. Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle Dienstkonten > Ersteller von Dienstkonto-Tokens aus.

    7. Klicken Sie auf Speichern.

    gcloud

    Führen Sie den Befehl gcloud iam service-accounts add-iam-policy-binding aus:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Ersetzen Sie die folgenden Werte:

    • SERVICE_ACCOUNT_NAME: Der Name des Dienstkontos, an das Sie die Cloud Run-Ressource anhängen.
    • SERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, in dem sich das Dienstkonto befindet.
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: Die Projektnummer, in der sich Cloud Run befindet.

    Der Befehl gibt die aktualisierte „allow”-Richtlinie für das vom Nutzer verwaltete Dienstkonto aus.

  3. Für das Projekt, das dieses Dienstkonto enthält, muss die Organisationsrichtlinie iam.disableCrossProjectServiceAccountUsage auf Ordnerebene auf "falsch/nicht erzwungen" festgelegt oder dies aus Einstellungen auf Projektebene übernommen werden. Standardmäßig ist dies auf true eingestellt.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Organisationsrichtlinien auf.

      Zu den Organisationsrichtlinien

    2. Wählen Sie in der Projektauswahl die Organisation und das Projekt aus, für die Sie die projektübergreifende Dienstkontonutzung deaktivieren möchten.

    3. Wählen Sie die Richtlinie Projektübergreifende Dienstkontonutzung deaktivieren aus.

    4. Klicken Sie auf Richtlinie verwalten.

    5. Wählen Sie unter Richtlinienquelle die Option Richtlinie des übergeordneten Elements überschreiben aus.

    6. Klicken Sie auf Regel hinzufügen.

    7. Wählen Sie unter Erzwingung die Option Aus.

    8. Klicken Sie auf Richtlinie festlegen, um die Richtlinie zu erzwingen.

    gcloud

    Achten Sie in dem Projekt mit dem Dienstkonto darauf, dass die Einschränkung der Organisationsrichtlinie iam.disableCrossProjectServiceAccountUsage nicht erzwungen wird. Diese Einschränkung wird standardmäßig erzwungen.

    Führen Sie folgenden Befehl aus, um diese Organisationsrichtlinieneinschränkung zu deaktivieren:

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID
    

    Ersetzen Sie SERVICE_ACCOUNT_PROJECT_ID durch die ID des Projekts, das das Dienstkonto enthält.

Sie können Rollenmitgliedschaften direkt auf die Dienstkontoressource anwenden oder von höheren Ebenen in der Ressourcenhierarchie übernehmen.

Nächste Schritte