Identität von Funktionen (1. Generation)
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 Run 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 Run Functions ein Standarddienstkonto als Identität für die Funktionsausführung:
Cloud Run-Funktionen verwenden das App Engine-Standarddienstkonto
PROJECT_ID@appspot.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 oder
- Einzelne Dienstkonten für Funktionen erstellen
Berechtigungen für das Standardlaufzeitdienstkonto ändern
Console
Rufen Sie in der Google Cloud Console die IAM-Seite auf:
Wählen Sie das App Engine-Standarddienstkonto oder das Compute-Standarddienstkonto aus der Tabelle aus.
Klicken Sie rechts neben der Zeile auf das Stiftsymbol, um den Tab Berechtigungen bearbeiten aufzurufen.
Bearbeiten Sie die Rollen im Drop-down Rolle so, dass die geringstmöglichen Berechtigungen vergeben werden.
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.
- Erstellen Sie Ihr Dienstkonto. Notieren Sie sich den Namen.
- Gewähren Sie die passenden Rollen, je nachdem, auf welche Ressourcen die Funktion zugreifen muss.
Wenn sich das Dienstkonto und die Funktion in anderen Projekten als dem Projekt befinden, in dem sich das Dienstkonto befindet:
- Konfigurieren Sie das Dienstkonto so, dass es projektübergreifend funktioniert.
Weisen Sie dem Cloud Run-Dienst-Agent (
service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator
) zu.PROJECT
bezieht sich auf das Projekt, in dem sich die Funktion befindet. Der Cloud Run-Dienst-Agent verwaltet den projektübergreifenden Zugriff für Ihr Dienstkonto.Gewähren Sie dem Cloud Run Functions-Dienst-Agent des Dienstkontos aus dem anderen Projekt die Berechtigung
iam.serviceaccounts.actAs
.
Gewähren Sie dem Dienstkonto Zugriff auf die Ressource. Die Methode dafür hängt vom Ressourcentyp ab.
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
Öffnen Sie die Google Cloud Console:
Geben Sie die Funktion wie gewünscht an und konfigurieren Sie sie.
Klicken Sie auf Laufzeit, Build..., um weitere Einstellungen aufzurufen.
Wählen Sie den Tab Laufzeit aus.
Klicken Sie auf das Drop-down-Menü Dienstkonto und wählen Sie das gewünschte Dienstkonto aus.
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 --no-gen2 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
Öffnen Sie die Google Cloud Console:
Klicken Sie auf den Namen der gewünschten Funktion, um die zugehörige Detailseite aufzurufen.
Klicken Sie auf das Bleistiftsymbol oben auf der Detailseite, um die Funktion zu bearbeiten.
Klicken Sie auf Laufzeit, Build..., um weitere Einstellungen aufzurufen.
Wählen Sie den Tab Laufzeit aus.
Klicken Sie auf das Drop-down-Menü Dienstkonto und wählen Sie das gewünschte Dienstkonto aus.
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.
Weitere Informationen
Erfahren Sie, wie Sie den Zugriff auf Ihre Funktionen autorisieren oder Entwickler und andere Funktionen authentifizieren, damit diese Ihre Funktionen aufrufen können.