Kontextsensitiven Zugriff für Dienstkonten konfigurieren

In diesem Leitfaden wird beschrieben, wie Sie den kontextsensitiven Zugriff einrichten, um den Zugriff von Dienstkonten auf Google Cloud -APIs basierend auf von Ihnen definierten Zugriffsebenen zu sichern.

Beschränkungen

Für Richtlinien für kontextsensitiven Zugriff für Dienstkonten gelten die folgenden Einschränkungen:

  • Sie können keine netzwerk- oder IP-adressbasierten Attribute für Dienstkontobindungen verwenden, wenn das Dienstkonto für Workflowausführungen und Cloud Scheduler verwendet wird.

  • Kontextsensitive Zugriffsrichtlinien können keine Verbindungen zu privaten Google Kubernetes Engine-Clustern (GKE) mit kubectl oder zu Cloud SQL mit dem Auth-Proxy blockieren.

  • Wenn eine Zugriffsebene, die Sie an ein Dienstkonto binden, nicht unterstützte Attribute wie Device-Attribute enthält, verweigert der kontextsensitive Zugriff den API-Zugriff.

  • Bereichsbezogene Zugriffsebenen werden für Dienstkonten nicht unterstützt.

Wenn Sie Cloud Build und Cloud Run verwenden, empfehlen wir die folgenden integrierten VPC-Features (Virtual Private Cloud):

Hinweis

  1. Sie benötigen eine Google Cloud -Organisation und mindestens ein Google Cloud -Projekt.
  2. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach 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.
  3. Installieren Sie die Google Cloud CLI.

  4. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  5. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  6. Google Cloud -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 Berechtigung resourcemanager.projects.create enthält. Informationen zum Zuweisen von Rollen
    • Erstellen Sie ein Projekt in Google Cloud :

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Projekt in Google Cloud , das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Projekt in Google Cloud aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  7. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.

  8. Aktivieren Sie die IAM, Access Context Manager und Resource Manager APIs, falls sie noch nicht aktiviert sind:

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

    gcloud services enable accesscontextmanager.googleapis.com cloudresourcemanager.googleapis.com iam.googleapis.com
  9. Installieren Sie die Google Cloud CLI.

  10. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  11. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Google Cloud -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 Berechtigung resourcemanager.projects.create enthält. Informationen zum Zuweisen von Rollen
    • Erstellen Sie ein Projekt in Google Cloud :

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Projekt in Google Cloud , das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Projekt in Google Cloud aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  13. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.

  14. Aktivieren Sie die IAM, Access Context Manager und Resource Manager APIs, falls sie noch nicht aktiviert sind:

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

    gcloud services enable accesscontextmanager.googleapis.com cloudresourcemanager.googleapis.com iam.googleapis.com
  15. Aktualisieren Sie die Google Cloud CLI-Komponenten:
    gcloud components update --quiet
  16. Erstellen Sie ein Dienstkonto in Ihrem Projekt, falls Sie noch keines haben. Dieses Dienstkonto ist das Ziel der Richtlinie für kontextsensitiven Zugriff.

Erforderliche Rollen

In diesem Abschnitt werden die IAM-Rollen (Identity and Access Management) beschrieben, die für die Verwendung des kontextsensitiven Zugriffs erforderlich sind.

Rollen auf Projektebene

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dienstkontoadministrator (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 das Nutzerkonto oder Dienstkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie auf Organisationsebene 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 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 eine Ressource versucht, auf eine andere Ressource zuzugreifen, verwendet der kontextsensitive Zugriff die Richtlinie, die an diese Ressource gebunden ist, bevor er versucht, 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 kontextsensitive Zugriff die Richtlinie aus, die an das Dienstkonto gebunden ist. Für andere Dienstkonten im Projekt, an die keine Richtlinien gebunden sind, wertet der kontextsensitive Zugriff die Richtlinie im Erzwingungsmodus aus, die an das Projekt gebunden ist. Das Gleiche gilt, wenn der erzwungene Modus 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 schrittweise und selektiv bereitzustellen. Sie können beispielsweise Folgendes tun:

  1. Binden Sie eine Richtlinie im Probelaufmodus auf Projektebene und prüfen Sie, ob sie wie erwartet funktioniert. Suchen Sie dazu in Cloud-Audit-Logs nach Ereignissen, bei denen der Zugriff verweigert wurde.
  2. Binden Sie die Richtlinie im erzwungenen Modus nur an bestimmte Dienstkonten.
  3. Binden Sie die Richtlinie im erzwungenen Modus auf Projektebene und binden Sie bei Bedarf eine weniger restriktive Richtlinie im erzwungenen Modus an bestimmte Dienstkonten.

Zugriffsebenenattribute für Dienstkonten

In diesem Abschnitt werden die Zugriffsebenenattribute 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.
  • Geostandort, der auf der öffentlichen IP-Adresse basiert.

    Wenn das Dienstkonto eine Anfrage an Google Cloud-APIs stellt, wertet der kontextsensitive Zugriff die Anfrage aus und vergleicht die IP-Adresse der Anfrage mit den IP-Adressen, die in der Richtlinie für kontextsensitiven Zugriff angegeben sind. Wenn die IP-Adressen übereinstimmen, wird der API-Aufruf durch den kontextsensitiven Zugriff zugelassen. Wenn die IP-Adressen nicht übereinstimmen, wird der API-Aufruf durch den kontextsensitiven Zugriff abgelehnt.

  • Eine benutzerdefinierte Zugriffsebene mit einem CEL-Ausdruck (Common Expression Language). Der Ausdruck muss den Wert true haben, um den Zugriff zu erlauben, und false, um den Zugriff zu verweigern.

    Der folgende CEL-Ausdruck ist nützlich, um den Zugriff durch Dienstkonten einzuschränken.

    Der Ausdruck wird mit true ausgewertet, wenn die Anfrage von einer oder mehreren angegebenen Projektnummern stammt:

        expression: "originatesFromProjects(origin, ['projects/PROJECT_NUMBER'])"
        

    originatesFromProjects prüft, ob die Anfrage von 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 bestimmten 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.

  1. Folgen Sie der Anleitung unter Einfache Zugriffsebene erstellen oder Benutzerdefinierte Zugriffsebene erstellen.

  2. Notieren Sie sich den vollständigen Namen der Zugriffsebene, 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 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

Binden Sie die Zugriffsebene mit der gcloud CLI an ein Dienstkonto.

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-ID.
  • SERVICE_ACCOUNT_NAME: die ID des Zieldienstkontos (der Teil der E-Mail-Adresse vor dem Symbol @).
  • SERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, das das Zieldienstkonto enthält.
  • POLICY_ID: die ID der Access Context Manager-Zugriffsrichtlinie.
  • ACCESS_LEVEL_NAME: der Name der von Ihnen erstellten Zugriffsebene.

    Wenn Sie den kontextsensitiven Zugriff verwenden möchten, ohne die Zugriffsebene zu erzwingen und den Zugriff zu verweigern, können Sie die Zugriffsebene im Probelaufmodus binden.

REST API

Führen Sie den folgenden Befehl aus, um die Zugriffsebene mithilfe der REST API an ein bestimmtes Dienstkonto zu binden:

  1. 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: die ID des Zieldienstkontos (der Teil der E-Mail-Adresse vor dem Symbol @).

    • SERVICE_ACCOUNT_PROJECT_ID: die ID des Projekts, das das Zieldienstkonto enthält.

    • POLICY_ID: die ID der Access Context Manager-Zugriffsrichtlinie.

    • ACCESS_LEVEL_NAME: der Name der von Ihnen erstellten Zugriffsebene.

  2. 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 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-ID.
  • PROJECT_NUMBER: die Projektnummer des Projekts, das alle Dienstkonten enthält, an die Sie den Zugriff binden möchten.
  • POLICY_ID: die ID der Access Context Manager-Zugriffsrichtlinie.
  • ACCESS_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:

  1. 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, an die Sie den Zugriff binden möchten.
    • POLICY_ID: die ID der Access Context Manager-Zugriffsrichtlinie.
    • ACCESS_LEVEL_NAME: der Name der von Ihnen erstellten Zugriffsebene.
  2. 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 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 Zugriffsebene im Probelaufmodus 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 der kontextsensitive 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, formatiert so:

--dry-run-level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME

REST API

Erstellen Sie die Datei request.json mit folgendem Inhalt, um die Zugriffsebene im Probelaufmodus zu binden:

{
"principal": {
  "serviceAccountProjectNumber": "TARGET_PROJECT_NUMBER"
},
"dryRunAccessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
}

Ersetzen Sie Folgendes:

  • TARGET_PROJECT_NUMBER: die Projektnummer des Zielprojekts.
  • POLICY_ID: die ID der Access Context Manager-Zugriffsrichtlinie.
  • ACCESS_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 können. Weitere Informationen zum Suchen nach Einträgen im Probelaufmodus in Cloud-Audit-Logs finden Sie unter Logs im Probelaufmodus ansehen.

Console

So rufen Sie in der Google Cloud Console die Zugriffsverweigerungen für Dienstkonten im Probelaufmodus von Cloud-Audit-Logs auf:

Rufen Sie in der Google Cloud Console das und die Seite Log-Explorer auf:

Zum Log-Explorer

Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis mit der Zwischenüberschrift Logging aus.

  1. Wählen Sie in der Google Cloud Console Ihr Projekt oder Ihre Organisation aus.

  2. Geben Sie im Feld Logabfrage die folgende Abfrage ein:

    protoPayload.serviceName="contextawareaccess.googleapis.com"
    protoPayload.metadata.dryRunEvaluationResult:DENIED
    SEARCH("SERVICE_ACCOUNT_NAME")
    
  3. Wählen Sie in der Zeitraumauswahl eine vordefinierte relative Zeit 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 die Zugriffsverweigerungen für Dienstkonten 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 Organisation.
  • SERVICE_ACCOUNT_NAME: die ID des Dienstkontos (der Teil der E-Mail-Adresse vor dem Symbol @).

Der Befehl gcloud logging read unterstützt das Flag --freshness, um Logging-Informationen über relative Zeiträume hinweg aufzurufen. Wenn Sie dem Befehl beispielsweise --freshness=3h hinzufügen, können Sie Logeinträge im Probelaufmodus der letzten 3 Stunden aufrufen.

Nächste Schritte