In diesem Leitfaden wird beschrieben, wie Sie den kontextsensitiven Zugriff einrichten, um den Dienstkonto-Zugriff auf Cloud de Confiance by S3NS 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 Kontextsensitiver Zugriff-Richtlinien 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.Zugriffsebenen mit eingeschränktem Umfang 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 Cloud de Confiance Organisation und mindestens ein Cloud de Confiance Projekt.
-
Installieren Sie die Google Cloud CLI.
-
Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.
Weitere Informationen finden Sie unter 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 -
Cloud de Confiance Projekt erstellen oder auswählen
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- 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 „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Cloud de Confiance Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Cloud de Confiance Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Cloud de Confiance Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch Ihren Cloud de Confiance Projektnamen.
-
Prüfen Sie, ob die Abrechnung für Ihr Cloud de Confiance Projekt aktiviert ist.
- Aktualisieren Sie die Google Cloud CLI-Komponenten:
gcloud components update --quiet
- Erstellen Sie ein Dienstkonto in Ihrem Projekt, falls Sie noch keines haben. Dieses Dienstkonto ist das Ziel der Richtlinie für den kontextsensitiven Zugriff.
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:
- Cloud Access Binding Admin (
roles/accesscontextmanager.gcpAccessAdmin) - Access Context Manager Admin (
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.
Richtlinien für kontextsensitiven Zugriff an verschiedene Ressourcenebenen binden
Sie können Richtlinien für den kontextsensitiven Zugriff mit demselben Erzwingungsmodus an Ressourcen binden, die sich auf verschiedenen Ebenen der Ressourcenhierarchie befinden. Wenn auf eine Ressource zugegriffen werden soll, wird zuerst die Richtlinie für den kontextsensitiven Zugriff verwendet, 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 Richtlinie 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, wertet der Kontextsensitiver Zugriff die Richtlinie aus, die an das Dienstkonto gebunden ist. Für andere Dienstkonten im Projekt, an die keine Richtlinien 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 Richtlinien verwenden, um Richtlinien inkrementell und selektiv bereitzustellen. So können Sie beispielsweise Folgendes tun:
- Binden Sie eine Richtlinie 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 Richtlinie im Erzwingungsmodus nur an bestimmte Dienstkonten.
- Binden Sie die Richtlinie im Erzwingungsmodus auf Projektebene und binden Sie bei Bedarf eine weniger restriktive Richtlinie im Erzwingungsmodus an bestimmte Dienstkonten.
Attribute für Zugriffsebenen 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 Cloud de Confiance-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 Common Expression Language (CEL)-Ausdruck. Der Ausdruck muss zu
trueausgewertet werden, um den Zugriff zu erlauben, und zufalse, um den Zugriff zu verweigern.Der folgende CEL-Ausdruck ist nützlich, um den Zugriff durch Dienstkonten einzuschränken.
Der Ausdruck wird mit
trueausgewertet, wenn die Anfrage von einer oder mehreren angegebenen Projektnummern stammt:expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"originatesFromProjectsprüft, ob die Anfrage aus einem Netzwerk stammt, das dem angegebenen Projekt zugeordnet 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 Zugriffsebene im Format
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 in einem Projekt 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.s3ns.iam.gserviceaccount.com \
--level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Ersetzen Sie Folgendes:
ORGANIZATION_ID: Ihre Cloud de ConfianceOrganisations-IDSERVICE_ACCOUNT_NAME: der Name, nicht die E-Mail-Adresse des ZieldienstkontosSERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, das das Ziel-Dienstkonto enthältPOLICY_ID: die ID der Access Context Manager-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.s3ns.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 ZieldienstkontosSERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, das das Ziel-Dienstkonto enthältPOLICY_ID: die ID der Access Context Manager-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 Cloud de Confiance 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 Cloud de ConfianceOrganisations-IDPROJECT_NUMBER: die Projektnummer des Projekts, das alle Dienstkonten enthält, für die Sie den Zugriff binden möchtenPOLICY_ID: die ID der Access Context Manager-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 Access Context Manager-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 verwenden.ORGANIZATION_ID: Ihre Cloud de ConfianceOrganisations-ID
Wenn 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.
Die API-Antwort für den Vorgang zum Erstellen der Bindung enthält den Namen der Bindung, der die eindeutige Bindungs-ID enthält.
Probelaufmodus verwenden
Sie können die Zugriffsebene 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 die Zugriffsebene verstößt, protokolliert Kontextsensitiver Zugriff den Verstoß in Cloud-Audit-Logs.
Zugriffsebene im Probelaufmodus binden
gcloud
Wenn Sie die Zugriffsebene 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 die Zugriffsebene 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 Access Context Manager-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 Probelaufmodus-Logs ansehen.
Console
So rufen Sie Dienstkonto-Zugriffsverweigerungen im Testlaufmodus von Cloud-Audit-Logs über die Cloud de Confiance Console auf:
Rufen Sie in der Cloud de Confiance 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 Cloud de Confiance -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 Dienstkonto-Zugriffsverweigerungen 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, mit dem Sie Protokollierungsinformationen über relative Zeiträume hinweg aufrufen können. Wenn Sie dem Befehl beispielsweise --freshness=3h hinzufügen, können Sie Logeinträge für den 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.
Die Zugriffsebene muss eine Ressource auf Organisationsebene sein.
Achten Sie darauf, dass die Zugriffsebene in Ihrer Richtlinie für den kontextsensitiven Zugriff auf Attributen basiert, die für Dienstkonten unterstützt werden.
Prüfen Sie, ob die Richtlinie für den kontextsensitiven Zugriff an das gewünschte Dienstkonto gebunden ist.
Prüfen Sie, ob die Identität Ihres Nutzers durch eine Richtlinie für den kontextsensitiven Zugriff eingeschränkt ist. Dies kann passieren, wenn eine Nutzeridentität Mitglied einer Google-Gruppe ist, für die eine Richtlinie für den kontextsensitiven Zugriff festgelegt ist. Diese Richtlinie kann den Nutzerzugriff einschränken, wodurch der Anrufvorgang zum Dienstkonto verhindert wird.
Wenden Sie sich an Ihren Sicherheitsadministrator.
Zugriff verweigert
Der Zugriff wird aus folgenden Gründen verweigert:
Sie haben die Richtlinie für kontextsensitiven Zugriff im Erzwingungsmodus und nicht im Testlaufmodus 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 allgemeine Anleitungen zur Fehlerbehebung befolgen.
Die Zugriffsebene muss aktualisiert werden, um weitere Quellen einzuschließen. Beispiel: Eine IP-Adresse wird verwendet, die bei der Erstellung der Zugriffsebene nicht angegeben wurde.