In diesem Leitfaden wird beschrieben, wie Sie den kontextsensitiven Zugriff einrichten, um den Zugriff von Dienstkonten auf Google Cloud APIs anhand von Zugriffsebenen zu schützen, die Sie definieren.
Beschränkungen
Für Richtlinien für kontextsensitiven Zugriff für Dienstkonten gelten die folgenden Einschränkungen:
Netzwerkbasierte oder IP-adressenbasierte Attribute können nicht für Dienstkonto-Bindungen verwendet werden, wenn das Dienstkonto für Workflow-Ausführungen und Cloud Scheduler verwendet wird.
Verbindungen zu privaten GKE-Clustern über
kubectlund zu Cloud SQL über den Auth-Proxy können nicht durch Richtlinien für kontextsensitiven Zugriff blockiert werden.Wenn eine Zugriffsebene, die an ein Dienstkonto gebunden ist, nicht unterstützte Attribute wie
Device-Attribute enthält, wird der API-Zugriff verweigert.Bereichsbezogene Zugriffsebenen werden für Dienstkonten nicht unterstützt.
Wenn Sie Cloud Build und Cloud Run verwenden, empfehlen wir die folgenden integrierten VPC-Funktionen:
Verwenden Sie für Cloud Run den serverlosen VPC-Zugriff.
Verwenden Sie für Cloud Build private Pools.
Hinweis
- Sie benötigen eine Google Cloud -Organisation und mindestens ein Google Cloud -Projekt.
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
- Aktualisieren Sie die Google Cloud CLI-Komponenten:
gcloud components update --quiet
- Erstellen Sie ein Dienstkonto in Ihrem Projekt, falls noch keines vorhanden ist. Dieses Dienstkonto ist das Ziel der Zugriffsrichtlinie.
Erforderliche Rollen
In diesem Abschnitt werden die IAM-Rollen (Identity and Access Management) beschrieben, die für die Verwendung von kontextsensitivem Zugriff erforderlich sind.
Rollen auf Projektebene
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dienstkonto-Administrator (roles/iam.serviceAccountAdmin) für das Nutzerkonto oder Dienstkonto zuzuweisen, um die Berechtigung zu erhalten, die Sie auf Projektebene benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigung the required permissions, die auf Projektebene erforderlich ist.
Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Rollen auf Organisationsebene
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Nutzerkonto oder Dienstkonto zuzuweisen, um die Berechtigung zu erhalten, die Sie auf Organisationsebene benötigen:
- Administrator für Cloud-Zugriffsbindungen (
roles/accesscontextmanager.gcpAccessAdmin) - Access Context Manager-Administrator (
roles/accesscontextmanager.policyAdmin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigung the required permissions, die auf Organisationsebene erforderlich ist.
Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Zugriffsrichtlinien an verschiedene Ressourcenebenen binden
Sie können Zugriffsrichtlinien mit demselben Erzwingungsmodus an Ressourcen binden, die sich auf verschiedenen Ebenen der Ressourcenhierarchie befinden. Wenn eine Ressource versucht, auf eine andere Ressource zuzugreifen, verwendet der Kontextsensitive Zugriff die Richtlinie, die an diese Ressource gebunden ist, bevor versucht wird, eine Richtlinie zu verwenden, die an eine Ressource auf höherer Ebene gebunden ist.
Sie können beispielsweise eine Zugriffsrichtlinie im Erzwingungsmodus direkt an ein Dienstkonto und eine andere Richtlinie im Erzwingungsmodus an das Projekt binden, das das Dienstkonto enthält. Wenn das Dienstkonto versucht, auf Ressourcen zuzugreifen, wird die Richtlinie, die an das Dienstkonto gebunden ist, durch den kontextsensitiven Zugriff ausgewertet. Für andere Dienstkonten im Projekt, an die keine Zugriffsrichtlinien gebunden sind, wertet der Kontextsensitiver Zugriff die Richtlinie für den Erzwingungsmodus aus, die an das Projekt gebunden ist. Das gilt auch, wenn der Erzwingungsmodus sowohl für die Richtlinie auf Projektebene als auch für die Richtlinie auf Dienstkontoebene auf „Probelauf“ festgelegt ist.
Sie können mehrere Zugriffsrichtlinien verwenden, um Zugriffsrichtlinien inkrementell und selektiv bereitzustellen. Sie können beispielsweise Folgendes tun:
- Binden Sie eine Zugriffsrichtlinie im Probelaufmodus auf Projektebene und prüfen Sie in Cloud-Audit-Logs, ob sie wie erwartet funktioniert, indem Sie nach Ereignissen suchen, bei denen der Zugriff verweigert wurde.
- Binden Sie die Zugriffsrichtlinie im Erzwingungsmodus nur an bestimmte Dienstkonten.
- Binden Sie die Zugriffsrichtlinie im Erzwingungsmodus auf Projektebene und binden Sie bei Bedarf eine weniger restriktive Zugriffsrichtlinie im Erzwingungsmodus an bestimmte Dienstkonten.
Zugriffsebenenattribute für Dienstkonten
In diesem Abschnitt werden die Zugriffsebenen aufgeführt, die für Dienstkonten unterstützt werden.
Die folgenden Attribute werden für Dienstkonten unterstützt:
- IP-Subnetzwerke, die auf der öffentlichen IP-Adresse basieren.
- VPC-Netzwerke, die auf der privaten IP-Adresse basieren.
-
Geolokalisierung, die auf der öffentlichen IP-Adresse basiert.
Wenn das Dienstkonto eine Anfrage an Google Cloud-APIs sendet, wird die Anfrage vom kontextsensitiven Zugriff ausgewertet und die IP-Adresse der Anfrage wird mit den in der Richtlinie für den kontextsensitiven Zugriff angegebenen IP-Adressen verglichen. Wenn die IP-Adressen übereinstimmen, ist der API-Aufruf zulässig. Wenn die IP-Adresse nicht übereinstimmt, wird der API-Aufruf abgelehnt.
-
Eine benutzerdefinierte Zugriffsebene mit einem Ausdruck in Common Expression Language (CEL). Der Ausdruck muss den Wert
trueergeben, um den Zugriff zuzulassen, undfalse, um den Zugriff zu verweigern.Der folgende CEL-Ausdruck ist nützlich, um den Zugriff durch Dienstkonten einzuschränken.
Der Ausdruck wird zu
trueausgewertet, wenn die Anfrage von einer oder mehreren angegebenen Projektnummern stammt:expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"Mit
originatesFromProjectswird geprüft, ob die Anfrage aus einem Netzwerk stammt, das mit dem angegebenen Projekt verknüpft ist, und ob die Anfrage von einer privaten IP-Adresse stammt. -
Tageszeit, die auf der Uhrzeit und dem Datum der Anfrage in einer angegebenen Zeitzone basiert.
Weitere Informationen finden Sie unter Zugriffsbedingungen für Uhrzeit und Tag konfigurieren.
Zugriffsebene erstellen
In diesem Abschnitt wird beschrieben, wie Sie eine Zugriffsebene in Ihrer Organisation erstellen. Zugriffsebenen definieren die Bedingungen, unter denen der Zugriff zulässig ist.
Folgen Sie der Anleitung unter Einfache Zugriffsebene erstellen oder Benutzerdefinierte Zugriffsebene erstellen.
Notieren Sie sich den vollständigen Namen der Zugriffsrichtlinie, der das folgende Format hat:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
Zugriffsbindung erstellen
Binden Sie die Zugriffsebene an das ausgewählte Dienstkonto. Dadurch werden die in der Zugriffsebene definierten Bedingungen erzwungen. Sie können die Zugriffsebene an ein einzelnes Dienstkonto oder an alle Dienstkonten innerhalb eines Projekts binden.
Zugriffsebene an ein bestimmtes Dienstkonto binden
In diesem Abschnitt wird beschrieben, wie Sie die Zugriffsebene an ein bestimmtes Dienstkonto binden.
gcloud
Zugriffsebene mit der gcloud CLI an ein Dienstkonto binden
gcloud access-context-manager cloud-bindings create \
--organization=ORGANIZATION_ID \
--service-account=SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
--level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Ersetzen Sie Folgendes:
ORGANIZATION_ID: Ihre Google Cloud Organisations-IDSERVICE_ACCOUNT_NAME: der Name, nicht die E-Mail-Adresse des Ziel-DienstkontosSERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, das das Zieldienstkonto enthältPOLICY_ID: die ID der ZugriffsrichtlinieACCESS_LEVEL_NAME: der Name der von Ihnen erstellten ZugriffsebeneWenn Sie den kontextsensitiven Zugriff verwenden möchten, ohne die Zugriffsebene zu erzwingen und den Zugriff zu verweigern, können Sie die Zugriffsebene im Probebetrieb binden.
REST API
Führen Sie den folgenden Befehl aus, um die Zugriffsebene mit der REST API an ein bestimmtes Dienstkonto zu binden:
Erstellen Sie eine
request.json-Datei mit folgendem Inhalt:{ "principal": { "serviceAccount": "SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Ersetzen Sie Folgendes:
SERVICE_ACCOUNT_NAME: der Name, nicht die E-Mail-Adresse des Ziel-DienstkontosSERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, das das Zieldienstkonto enthältPOLICY_ID: die ID der ZugriffsrichtlinieACCESS_LEVEL_NAME: der Name der von Ihnen erstellten Zugriffsebene
Führen Sie dazu diesen Befehl aus:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das Sie für die API-Aufrufe verwendenORGANIZATION_ID: Ihre Google Cloud Organisations-ID.
Zugriffsebene an alle Dienstkonten in einem Projekt binden
In diesem Abschnitt wird beschrieben, wie Sie die Zugriffsebene an alle Dienstkonten in einem Projekt binden.
gcloud
Führen Sie den folgenden Befehl aus, um die Zugriffsebene mit der gcloud CLI an alle Dienstkonten in einem Projekt zu binden:
gcloud access-context-manager cloud-bindings create \ --organization=ORGANIZATION_ID \ --service-account-project-number=PROJECT_NUMBER \ --level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Ersetzen Sie Folgendes:
ORGANIZATION_ID: Ihre Google Cloud Organisations-IDPROJECT_NUMBER: die Projektnummer des Projekts, das alle Dienstkonten enthält, für die Sie den Zugriff binden möchtenPOLICY_ID: die ID der ZugriffsrichtlinieACCESS_LEVEL_NAME: Der Name der von Ihnen erstellten Zugriffsebene.
REST API
So binden Sie die Zugriffsebene mithilfe der REST API an alle Dienstkonten in einem Projekt:
Erstellen Sie eine
request.json-Datei mit folgendem Inhalt:{ "principal": { "serviceAccountProjectNumber": "PROJECT_NUMBER" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Ersetzen Sie Folgendes:
PROJECT_NUMBER: die Projektnummer des Projekts, das alle Dienstkonten enthält, für die Sie den Zugriff binden möchtenPOLICY_ID: die ID der ZugriffsrichtlinieACCESS_LEVEL_NAME: Der Name der von Ihnen erstellten Zugriffsebene.
Führen Sie dazu diesen Befehl aus:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, mit dem Sie die API-Aufrufe ausführenORGANIZATION_ID: Ihre Google Cloud Organisations-ID
Wenn Sie den kontextsensitiven Zugriff verwenden möchten, ohne die Zugriffsebene zu erzwingen und den Zugriff zu verweigern, können Sie die Zugriffsrichtlinie im Probebetrieb binden.
Die API-Antwort für den Vorgang zum Erstellen einer Bindung enthält den Namen der Bindung, der die eindeutige Bindungs-ID enthält.
Probelaufmodus verwenden
Sie können die Zugriffsrichtlinie im Probelaufmodus binden. Wenn Sie den Probelaufmodus verwenden, können Ihre Dienstkonten weiterhin ohne Erzwingung auf Ressourcen zugreifen. Wenn Ihre Dienstkonten jedoch versuchen, auf eine Weise zuzugreifen, die gegen Zugriffsrichtlinien verstößt, werden die Verstöße in Cloud-Audit-Logs protokolliert.
Zugriffsrichtlinien im Probelaufmodus binden
gcloud
Wenn Sie Zugriffsrichtlinien im Probelaufmodus binden möchten, ersetzen Sie den Parameter --level durch --dry-run-level, der so formatiert ist:
--dry-run-level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
REST API
Wenn Sie Zugriffsrichtlinien im Probebetrieb binden möchten, erstellen Sie die Datei request.json mit folgendem Inhalt:
{
"principal": {
"serviceAccountProjectNumber": "TARGET_PROJECT_NUMBER"
},
"dryRunAccessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
}
Ersetzen Sie Folgendes:
TARGET_PROJECT_NUMBER: die Projektnummer des ZielprojektsPOLICY_ID: die ID der ZugriffsrichtlinieACCESS_LEVEL_NAME: der Name der Zugriffsebene
Cloud-Audit-Logs prüfen
In diesem Abschnitt wird beschrieben, wie Sie in Cloud-Audit-Logs nach Zugriffsverweigerungen im Probelaufmodus für Ihr Dienstkonto suchen. Weitere Informationen zum Suchen nach Einträgen im Probelaufmodus in Cloud-Audit-Logs finden Sie unter Logs im Probelaufmodus ansehen.
Console
So rufen Sie Dienstkonto-Zugriffsverweigerungen im Dry-Run-Modus von Cloud-Audit-Logs über die Google Cloud Console auf:
Rufen Sie in der Google Cloud Console das und die Seite Log-Explorer auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis mit der Zwischenüberschrift Logging aus.
Wählen Sie in der Google Cloud -Console Ihr Projekt oder Ihre Organisation aus.
Geben Sie im Feld „Logabfrage“ die folgende Abfrage ein:
protoPayload.serviceName="contextawareaccess.googleapis.com" protoPayload.metadata.dryRunEvaluationResult:DENIED SEARCH("`SERVICE_ACCOUNT_NAME`")Wählen Sie in der Zeitraumauswahl einen vordefinierten relativen Zeitraum aus, z. B. Letzte 30 Minuten, Letzte Stunde oder Letzte 24 Stunden, oder geben Sie einen benutzerdefinierten Zeitraum an.
gcloud
So rufen Sie mit der gcloud CLI Verweigerungen des Dienstkonto-Zugriffs im Probelaufmodus von Cloud-Audit-Logs auf:
gcloud logging read \
'protoPayload.serviceName="contextawareaccess.googleapis.com" AND
protoPayload.metadata.dryRunEvaluationResult:DENIED AND
SEARCH("`SERVICE_ACCOUNT_NAME`")' \
--organization=ORGANIZATION_ID
Ersetzen Sie Folgendes:
ORGANIZATION_ID: die ID der OrganisationSERVICE_ACCOUNT_NAME: der Name des Dienstkontos
Der Befehl gcloud logging read unterstützt das Flag --freshness, um Protokollierungsinformationen über relative Zeiträume hinweg aufzurufen. Wenn Sie dem Befehl beispielsweise --freshness=3h hinzufügen, können Sie Logeinträge im Probeausführungsmodus der letzten drei Stunden aufrufen.
Fehlerbehebung
In diesem Abschnitt wird beschrieben, wie Sie Probleme mit dem kontextsensitiven Zugriff für Dienstkonten beheben.
Allgemeine Fehlerbehebung
Cloud-Audit-Logs prüfen
Verwenden Sie die folgende Logabfrage und sehen Sie sich die Logeinträge an, um weitere Informationen zu erhalten.
protoPayload.serviceName="contextawareaccess.googleapis.com"
Sehen Sie sich den Ressourcennamen der Zugriffsebene an, den der kontextsensitive Zugriff meldet, wenn er Erzwingungsereignisse protokolliert.
Achten Sie darauf, dass die Zugriffsebene eine Ressource auf Organisationsebene ist.
Achten Sie darauf, dass die Zugriffsebene in Ihren Zugriffsrichtlinien auf Attributen basiert, die für Dienstkonten unterstützt werden.
Prüfen Sie, ob die Zugriffsrichtlinie an das gewünschte Dienstkonto gebunden ist.
Achten Sie darauf, dass die Identität Ihres Nutzers nicht durch eine Zugriffsrichtlinie eingeschränkt wird. Dies kann passieren, wenn eine Nutzeridentität Mitglied einer Google-Gruppe mit einer gebundenen Zugriffsrichtlinie ist. Diese Richtlinie kann den Nutzerzugriff einschränken und so den Anruffluss zum Dienstkonto verhindern.
Wenden Sie sich an Ihren Sicherheitsadministrator.
Zugriff verweigert
Der Zugriff wird aus folgenden Gründen verweigert:
Sie haben die Zugriffsrichtlinie im Erzwingungsmodus und nicht im Probelaufmodus gebunden.
Anstelle der Erzwingung können Sie den Probelaufmodus verwenden, damit Dienstkonten auf Ressourcen zugreifen und Erzwingungsereignisse protokollieren können, ohne den Zugriff auf Ressourcen tatsächlich zu verweigern. Außerdem können Sie die allgemeinen Anleitungen zur Fehlerbehebung befolgen.
Die Zugriffsebene muss aktualisiert werden, um weitere Quellen einzuschließen. Beispiel: Es wird eine IP-Adresse verwendet, die beim Erstellen der Zugriffsebene nicht angegeben wurde.