Identität von Funktionen

Aus Sicherheitsgründen erfordern die meisten Interaktionen zwischen Entitäten in Google Cloud, dass jede Entität eine überprüfbare Identität hat, die durch eine Art von Secret wie ein Passwort oder ein Schlüssel gesichert ist. So wie andere Entitäten eine Identität benötigen, um auf Cloud Functions zugreifen zu können, benötigen Funktionen häufig Zugriff auf andere Ressourcen in Google Cloud, um ihre Aufgaben zu erfüllen. Jede Funktion ist einem Dienstkonto zugeordnet, das als Identität dient, wenn die Funktion auf andere Ressourcen zugreift. Das Dienstkonto, das von einer Funktion als Identität verwendet wird, wird auch als Laufzeitdienstkonto bezeichnet.

Für den Produktions-Einsatz empfiehlt Google, dass Sie jeder Funktion eine dedizierte Identität zuweisen. Weisen Sie ihr dazu ein nutzerverwaltetes Dienstkonto zu. Mit von Nutzern verwalteten Dienstkonten können Sie den Zugriff steuern. Dazu weisen Sie minimale Berechtigungen mithilfe der Identitäts- und Zugriffsverwaltung zu.

Laufzeitdienstkonto

Wenn Sie bei der Bereitstellung einer Funktion kein anderes Laufzeitdienstkonto angeben, verwendet Cloud Functions ein Standarddienstkonto als Identität für die Funktionsausführung:

  • Cloud Functions (1. Generation) verwendet das App Engine-Standarddienstkonto PROJECT_ID@appspot.gserviceaccount.com.
  • Cloud Functions (2. Generation) verwendet das Compute-Standarddienstkonto PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Beachten Sie, dass sich die Projektnummer von Projekt-ID und Projektnamen unterscheidet. Die Projektnummer finden Sie in der Google Cloud Console auf der Dashboard-Seite:

Diese Standarddienstkonten haben die Rolle Bearbeiter, die einen umfassenden Zugriff auf viele Google Cloud-Dienste ermöglicht. Dies ist zwar der schnellste Weg, um Funktionen zu entwickeln. Google empfiehlt jedoch, das Standarddienstkonto nur zu Test- und Entwicklungszwecken zu verwenden. Für die Produktion sollten Sie dem Laufzeitdienstkonto nur die Mindestberechtigungen erteilen, die für sein Ziel erforderlich sind.

So sichern Sie Ihre Funktionen in der Produktion:

Berechtigungen für das Standardlaufzeitdienstkonto ändern

Console

  1. Rufen Sie in der Google Cloud Console die IAM-Seite auf:

    Zur Google Cloud Console

  2. Wählen Sie das App Engine-Standarddienstkonto oder das Compute-Standarddienstkonto aus der Tabelle aus.

  3. Klicken Sie rechts neben der Zeile auf das Stiftsymbol, um den Tab Berechtigungen bearbeiten aufzurufen.

  4. Bearbeiten Sie die Rollen im Drop-down Rolle so, dass die geringstmöglichen Berechtigungen vergeben werden.

  5. Klicken Sie auf Speichern.

gcloud

Entfernen Sie die Rolle Bearbeiter und fügen Sie dann mit dem Befehl gcloud projects add-iam-policy-binding eine neue Rolle hinzu:

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="SERVICE_ACCOUNT_EMAIL" \
--role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="SERVICE_ACCOUNT_EMAIL" \
--role="ROLE"

Dabei ist PROJECT_ID die Projekt-ID des verwendeten Projekts, SERVICE_ACCOUNT_EMAIL die E-Mail-Adresse des Standardlaufzeitdienstkontos, wie zuvor unter Laufzeitdienstkonto angezeigt und ROLE ist die neue Rolle, die dem Standardlaufzeitdienstkonto zugewiesen werden soll.

Einzelne Dienstkonten für Funktionen verwenden

Für mehr Flexibilität bei der Zugriffssteuerung für Funktionen können Sie jeder von ihnen ein eigenes nutzerverwaltetes Dienstkonto zuweisen.

  1. Erstellen Sie Ihr Dienstkonto. Notieren Sie sich den Namen.
  2. Gewähren Sie die passenden Rollen, je nachdem, auf welche Ressourcen die Funktion zugreifen muss.
  3. Wenn sich das Dienstkonto und die Funktion in anderen Projekten als dem Projekt befinden, in dem sich das Dienstkonto befindet:

    1. Konfigurieren Sie das Dienstkonto so, dass es projektübergreifend funktioniert.
    2. Gewähren Sie beiden Dienstkonten die Rolle „Service Account Token Creator“ (roles/iam.serviceAccountTokenCreator), wobei PROJECT... sich auf das Projekt, bezieht in dem sich die Funktion befindet:

      • Standarddienstkonto, das variiert, je nachdem, ob Sie mit 1. Generation oder 2. Generation arbeiten: <ph type="x-smartling-placeholder">
          </ph>
        • 1. Generation: App Engine-Standarddienstkonto (PROJECT_ID@appspot.gserviceaccount.com)
        • 2. Generation: Compute Engine-Standarddienstkonto (PROJECT_NUMBER-compute@developer.gserviceaccount.com)
      • Cloud Functions-Dienst-Agent (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

      Diese Konten verwalten den projektübergreifenden Zugriff für Ihr Dienstkonto.

    3. Gewähren Sie dem Cloud Functions-Dienst-Agent des Dienstkontos aus dem anderen Projekt die Berechtigung iam.serviceaccounts.actAs.

  4. Gewähren Sie dem Dienstkonto Zugriff auf die Ressource. Die Methode dafür hängt vom Ressourcentyp ab.

  5. Verbinden Sie das Dienstkonto mit der Funktion. Sie können dies entweder während der Bereitstellung oder durch Aktualisieren einer zuvor bereitgestellten Funktion tun.

Nutzerverwaltetes Dienstkonto bei der Bereitstellung hinzufügen

Console

  1. Öffnen Sie die Google Cloud Console:

    Zur Google Cloud Console

  2. Geben Sie die Funktion wie gewünscht an und konfigurieren Sie sie.

  3. Klicken Sie auf Laufzeit, Build..., um weitere Einstellungen aufzurufen.

  4. Wählen Sie den Tab Laufzeit aus.

  5. Klicken Sie auf das Drop-down-Menü Dienstkonto und wählen Sie das gewünschte Dienstkonto aus.

  6. Klicken Sie auf Weiter und Bereitstellen.

gcloud

Fügen Sie beim Bereitstellen einer Funktion mit gcloud functions deploy das Flag --service-account hinzu. Beispiel:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

Dabei ist FUNCTION_NAME der Funktionsname und SERVICE_ACCOUNT_EMAIL die E-Mail-Adresse des Dienstkontos.

Dienstkonto einer vorhandenen Funktion aktualisieren

Sie können das Laufzeitdienstkonto einer vorhandenen Funktion aktualisieren.

Console

  1. Öffnen Sie die Google Cloud Console:

    Zur Google Cloud Console

  2. Klicken Sie auf den Namen der gewünschten Funktion, um die zugehörige Detailseite aufzurufen.

  3. Klicken Sie auf das Bleistiftsymbol oben auf der Detailseite, um die Funktion zu bearbeiten.

  4. Klicken Sie auf Laufzeit, Build..., um weitere Einstellungen aufzurufen.

  5. Wählen Sie den Tab Laufzeit aus.

  6. Klicken Sie auf das Drop-down-Menü Dienstkonto und wählen Sie das gewünschte Dienstkonto aus.

  7. Klicken Sie auf Weiter und Bereitstellen.

gcloud

Fügen Sie beim Bereitstellen einer Funktion mit gcloud functions deploy das Flag --service-account hinzu:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

Dabei ist FUNCTION_NAME der Funktionsname und SERVICE_ACCOUNT_EMAIL das Dienstkonto.

Die noch einmal bereitgestellte Funktion verwendet jetzt das neue Laufzeitdienstkonto.

Metadatenserver zum Abrufen von Tokens verwenden

Obwohl IAM-definierte Dienstkonten die bevorzugte Methode zur Verwaltung des Zugriffs in Google Cloud sind, erfordern einige Dienste möglicherweise andere Modi, z. B. einen API-Schlüssel, OAuth 2.0-Client oder Dienstkontoschlüssel. Für den Zugriff auf eine externe Ressource sind möglicherweise auch alternative Methoden erforderlich.

Wenn Ihr Zieldienst erfordert, dass Sie ein OpenID Connect-Id-Token oder ein Oauth 2.0-Zugriffstoken angeben, können Sie den Compute Metadata Server verwenden, um diese Tokens abzurufen, anstatt einen vollständigen OAuth-Client einzurichten.

Identitätstokens

Sie können den Compute Metadata Server verwenden, um ID-Tokens für eine bestimmte Zielgruppe abzurufen:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
  -H "Metadata-Flavor: Google"

Dabei ist AUDIENCE das angeforderte Ziel, z. B. die URL eines Dienstes, den Sie aufrufen (wie https://service.domain.com), oder die OAuth-Client-ID einer geschützten IAP-Ressource wie z. B. 1234567890.apps.googleusercontent.com.

Zugriffstokens

OAuth 2.0-Zugriffstoken verwenden Bereiche, um Zugriffsberechtigungen zu definieren. Standardmäßig haben Zugriffstokens in Google Cloud den Bereich cloud-platform. Für den Zugriff auf andere Google oder Google Cloud APIs benötigen Sie ein Zugriffstoken mit dem entsprechenden Geltungsbereich.

Sie können den Compute Metadata Server verwenden, um Zugriffstokens abzurufen.

Sie können Zugriffstokens mit einem bestimmten Geltungsbereich selbst generieren:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \
  -H "Metadata-Flavor: Google"

Dabei ist SCOPES eine durch Kommas getrennte Liste der angeforderten OAuth-Bereiche, z. B. https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Eine Übersicht der Geltungsbereiche entnehmen Sie der Liste der Google OAuth-Geltungsbereiche.

Mehr zur Verwendung der Play Console erfahren

Erfahren Sie, wie Sie den Zugriff auf Ihre Funktionen autorisieren oder Entwickler und andere Funktionen authentifizieren, damit diese Ihre Funktionen aufrufen können.