Übersicht über Cloud IAM Conditions

Einführung

Auf dieser Seite wird die Funktion Conditions von Cloud Identity and Access Management (Cloud IAM) erläutert. Mit dieser Funktion können Sie eine bedingte attributbasierte Zugriffskontrolle für Google Cloud Platform- (GCP-)Ressourcen definieren und verbindlich festlegen.

Cloud IAM Conditions bietet die Möglichkeit, Berechtigungen für Identitäten (Mitglieder) an konfigurierte Bedingungen zu knüpfen. Damit kann beispielsweise Nutzern der temporäre Zugriff bei Auftreten eines Produktionsproblems gewährt oder der Ressourcenzugriff auf Mitarbeiter am Unternehmenssitz beschränkt werden.

Die Bedingungen werden in den Rollenbindungen der Cloud IAM-Richtlinie einer Ressource angegeben. Ist eine Bedingung vorhanden, wird die Rolle nur zugewiesen, wenn der Bedingungsausdruck als true ausgewertet wird. Jeder Bedingungsausdruck wird als Satz logischer Anweisungen definiert, in denen Sie ein oder mehrere Attribute angeben können, die geprüft werden sollen.

Für den nicht öffentlichen Betarelease anmelden

Derzeit müssen Sie zur Nutzung von Cloud IAM Conditions in den Pool für den nicht öffentlichen Betarelease aufgenommen werden. Wenn Sie sich dafür bewerben möchten, füllen Sie bitte dieses Formular aus.

Cloud IAM-Richtlinien mit Bedingungen

Cloud IAM-Richtlinien bestehen aus einer oder mehreren Rollenbindungen mit folgender Struktur:

"bindings": [
  {
    "role": ...
    "members": ...
    "condition": ...
  },
  ...
]

Das Objekt condition ist optional, jede Rollenbindung kann nur ein solches Objekt enthalten. Im Bedingungsausdruck können aber mehrere Anweisungen verwendet werden, die eine Reihe unterschiedliche Attribute auswerten. Wenn keine Bedingungsprüfung erforderlich ist, wird den angegebenen Mitgliedern immer eine Rollenbindung ohne das Objekt condition zugewiesen. Das Objekt condition hat folgende Struktur:

"condition": {
    "title": ...
    "description": ...
    "expression": ...
}

Für die Bedingung ist die Angabe von title (Titel) erforderlich, die Angabe von description (Beschreibung) dagegen optional. Sowohl der Titel als auch die Beschreibung sind reine Informationsfelder, die die Ermittlung und das inhaltliche Verständnis der Bedingung unterstützen sollen. Das Feld expression definiert einen attributbasierten logischen Ausdruck mithilfe einer Teilmenge der Common Expression Language (CEL). Weitere Informationen finden Sie in der CEL-Spezifikation und der entsprechenden Sprachdefinition.

Im Allgemeinen besteht ein Bedingungsausdruck aus einer oder mehreren Klauseln, die mit logischen Operatoren (&&, || oder !) verknüpft werden. Jede Klausel legt eine attributbasierte Regel zur Steuerung der Bindung fest.

Bedingungsattribute

In dieser privaten Betaversion basieren die unterstützten Bedingungsattribute entweder auf der angeforderten Ressource (z. B. auf ihrem Typ oder Namen) oder auf den Details der Anfrage (z. B. ihrem Zeitstempel, ihrer ursprünglichen IP-Adresse oder der Ziel-IP-Adresse der Compute-Zielinstanz). Im Folgenden finden Sie Beispiele und eine Beschreibung für beide Attributtypen.

Ressourcenattribute

Ressourcenattribute ermöglichen die Festlegung von Beschränkungen basierend auf der Ressource in der Zugriffsanfrage, etwa hinsichtlich des Ressourcentyps, des Ressourcennamens oder des verwendeten GCP-Dienstes.

Beispielausdrücke

So gewähren Sie den Zugriff auf Compute-Instanzen, aber auf keine anderen Ressourcentypen:

resource.type == “google.cloud.compute.Instance”

So gewähren Sie den Zugriff auf Cloud Storage-Ressourcen, aber auf keine Ressourcen anderer Dienste:

resource.service == “google.cloud.storage”

So gewähren Sie den Zugriff nur auf Ressourcen, deren Namen mit dem angegebenen String beginnen:

resource.name.startsWith("projects/_/buckets/exampleco-site-assets-")

Anfrageattribute

Anfrageattribute ermöglichen Beschränkungen auf der Grundlage von Details der Zugriffsanfrage wie Datum/Uhrzeit, erforderlicher URL-Host/-Pfad (für Cloud IAP), IP-Adresse und Port des Ziels (für TCP-Tunneling in Cloud IAP) oder Zugriffsebenen. Zugriffsebenen werden über die Konfiguration der Organisation festgelegt und ermöglichen derzeit die Beschränkung zulässiger IP-Ursprungsadressen. Weitere Informationen finden Sie in der Dokumentation zu Access Context Manager.

Beispielausdrücke für Datum/Uhrzeit

So gewähren Sie einen vorübergehenden Zugriff bis zu einem bestimmten Ablaufdatum bzw. einer bestimmten Ablaufzeit:

request.time < timestamp("2019-01-01T07:00:00Z")

So gewähren Sie den Zugriff nur während bestimmter Arbeitszeiten:

request.time.getHours("Europe/Berlin") >= 9 &&
request.time.getHours("Europe/Berlin") <= 17 &&
request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
request.time.getDayOfWeek("Europe/Berlin") <= 5

So gewähren Sie den Zugriff nur für einen bestimmten Monat und ein bestimmtes Jahr:

request.time.getFullYear("Europe/Berlin") == 2018
request.time.getMonth("Europe/Berlin") < 6

Gültige Formate:

Beispiel für URL-Host-/-Pfadausdrücke (für Cloud IAP)

So gewähren Sie den Zugriff nur für bestimmte Subdomains oder URL-Pfade in der Anfrage:

request.host == "hr.example.com"
request.host.endsWith(".example.com")
request.path == "/admin/payroll.js"
request.path.startsWith("/admin")

Beispiel für Ausdrücke "Ziel-IP/-Port" (für Cloud IAP für TCP-Tunneling)

So ermöglichen Sie den Zugriff auf eine bestimmte Ziel-IP oder einen bestimmten Ziel-Port in der Anfrage:

destination.ip == "14.0.0.1"
destination.ip != "127.0.0.1"
destination.port == 22
destination.port > 21 && destination.port <= 23

Beispiel für Ausdrücke zur Zugriffsebene

Mit dem folgenden Beispiel ist der Zugriff zulässig, wenn die Anfrage einer benutzerdefinierten Zugriffsebene entspricht. In diesem Fall werden die IP-Bereiche des Unternehmensnetzwerks in der Zugriffsebene "TrustedCorpNet" festgelegt:

"accessPolicies/199923665455/accessLevels/TrustedCorpNet" in
request.auth.access_levels

Beispiel für Ausdruck mit mehreren Attributen

Im folgenden Beispiel ist der Zugriff zulässig, wenn die Anfrage zu einem bestimmten Zeitpunkt gestellt wird und mit einem Präfix für den Ressourcennamen, mit der gewünschten Zugriffsebene und mit einem bestimmten Ressourcentyp übereinstimmt:

request.time > timestamp("2018-08-03T16:00:00-07:00") &&
request.time < timestamp("2018-08-03T16:05:00-07:00") &&
((resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/dev") ||
 (resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod") &&
  "accessPolicies/34569256/accessLevels/CorpNetwork2" in request.auth.access_levels)) ||
 resource.type != "google.cloud.compute.Instance")

Bedingungen festlegen

Bedingte Rollenbindungen werden mit der gleichen Methode setIamPolicy festgelegt, die auch zur Konfiguration anderer Rollenbindungen verwendet wird. Zur Festlegung einer Rollenbindung mit einer Bedingung für ein Projekt können Sie die REST API, das gcloud-Befehlszeilentool oder die IAM-Seite in der Cloud Console verwenden.

Das folgende JSON-Beispiel zeigt die Verwendung einer Bedingung im Rahmen einer vollständigen Cloud IAM-Richtlinie:

{
  "bindings": [
    {
      "role": "roles/storage.objectViewer",
      "members": "user:jane@example.com",
      "condition": {
          "title": "expires_end_of_2018",
          "description": "Expires at midnight on 2018-12-31",
          "expression": "request.time < timestamp(\"2019-01-01T00:00:00Z\")"
      }
    }
  ]
}