Mit Identity and Access Management (IAM) Conditions können Sie IAM-Richtlinien mit bedingten Berechtigungen definieren. Sie geben Bedingungen in den Rollenbindungen der IAM-Richtlinie einer Ressource an. Wenn eine Bedingung vorhanden ist, wird die Rolle nur dann gewährt, wenn der Bedingungsausdruck true
ergibt. Jeder Bedingungsausdruck ist ein Satz logischer Anweisungen, in denen Sie ein oder mehrere Attribute angeben können. Weitere Informationen finden Sie unter Attributreferenz für IAM Conditions.
Wenn Cloud IAM Conditions mit Cloud Load Balancing verwendet wird, können Sie darin vordefinierte Rollen (z. B. Load-Balancer-Administrator oder Netzwerkadministrator) oder benutzerdefinierte Rollen unter bestimmten Bedingungen zuweisen.
IAM Conditions unterstützt einen Bedingungsausdruck, mit dem das Load-Balancing-Schema einer Weiterleitungsregel geprüft werden kann. Sie können beispielsweise einem IAM-Hauptkonto die Möglichkeit geben, interne Load-Balancer zu erstellen, jedoch keine externen. Wenn ein Cloud IAM-Hauptkonto versucht, eine Weiterleitungsregel für einen externen Load-Balancer zu erstellen, lehnt Google Cloud die Aktion ab und gibt einen Fehler wie den folgenden zurück:
ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: - Required 'compute.forwardingRules.create' permission for 'projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME'
IAM Conditions für Google Cloud-Load-Balancer verwenden
Das Load-Balancing-Schema einer Weiterleitungsregel bestimmt, welcher Typ oder welche Typen von Load-Balancern die Weiterleitungsregel verwenden können. Mit anderen Worten, das Load-Balancing-Schema entspricht dem Typ des Load-Balancers, wie in der folgenden Tabelle dargestellt.
Load-Balancing-Schema | Beschreibung |
---|---|
EXTERN | Classic Application Load Balancer Externer Proxy-Network Load Balancer Externer Passthrough-Network Load Balancer |
EXTERNAL_MANAGED | Globaler externer Application Load Balancer Regionaler externer Application Load Balancer Globaler externer Proxy-Network Load Balancer regionaler externer Proxy-Network Load Balancer |
INTERN | Interner Passthrough-Network-Load-Balancer |
INTERNAL_MANAGED | Regionaler interner Application Load Balancer Regionsübergreifender interner Application Load Balancer Regionaler interner Proxy-Network Load Balancer Regionsübergreifender interner Proxy-Network Load Balancer |
INTERNAL_SELF_MANAGED | Cloud Service Mesh |
Beim Erstellen des Load-Balancers geben Sie das Feld loadBalancingScheme
an.
Durch Auswahl des Felds loadBalancingScheme
in einer IAM-Bedingung können Sie Hauptkonten die Möglichkeit geben, bestimmte Arten von Load-Balancern zu erstellen.
IAM Conditions angeben
Sie können bedingte Rollenbindungen mit derselben setIamPolicy
-Methode festlegen, mit der Sie auch andere Rollenbindungen konfigurieren. Sie können eine Rollenbindung mit einer Bedingung für ein Projekt festlegen. Verwenden Sie dazu die REST API, das gcloud
-Befehlszeilentool oder die IAM-Seite in der Google Cloud Console.
Weitere Informationen finden Sie unter Bedingte Richtlinien verwalten.
Beispiele für Bedingungsausdrücke für Load-Balancing
Der folgende Bedingungsausdruck, der in einer IAM-Richtlinie verwendet werden kann, lässt eine API-Anfrage nur zu, wenn eine der folgenden Bedingungen erfüllt ist:
- Die Anfrage umfasst keine Erstellung einer Weiterleitungsregel.
Die Anforderung besteht darin, eine Weiterleitungsregel mit einem der internen Schemas zu erstellen.
!compute.isForwardingRuleCreationOperation() || ( compute.isForwardingRuleCreationOperation() && compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED']) )
Das Load-Balancing-Schema EXTERNAL
wird ausgelassen.
Wenn ein Hauptkonto versucht, eine Weiterleitungsregel mit dem Load-Balancing-Schema EXTERNAL
zu erstellen, wird eine Berechtigungsfehlermeldung angezeigt.
Beispielrichtlinie
In diesem IAM-Richtlinienbeispiel für ein Projekt wird dem IAM-Hauptkonto jane@example.com
die vordefinierte Rolle des Load-Balancer-Administrators zugewiesen, mit Ausnahme der Möglichkeit, externe Load-Balancer zu erstellen (da das Load-Balancer-Schema EXTERNAL
ausgelassen wird). jane@example.com
kann interne Load-Balancer erstellen und Load-Balancer verwalten, ändern und löschen.
{
"bindings": [
{
"role": "roles/compute.loadBalancerAdmin",
"members": ["user:jane@example.com"],
"condition": {
"title": "only_internal_lb_schemes",
"description": "Internal LB creation only permitted",
"expression": "
!compute.isForwardingRuleCreationOperation() || (
compute.isForwardingRuleCreationOperation() &&
compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'])
)
"
}
}
]
}
GKE-Dienstkontoberechtigungen für bestimmte Arten von Weiterleitungsregeln erteilen
Sie können mit IAM Conditions auch den Zugriff auf das GKE-Dienstkonto beschränken, um nur bestimmte Arten von Weiterleitungsregeln zu erstellen.
Dieses JSON-Beispiel zeigt eine vollständige IAM-Richtlinie, um dem GKE-Dienstkonto (service-PROJECT_ID@container-engine-robot.iam.gserviceaccount.com
) die Rolle "Kubernetes Engine-Dienst-Agent" zuzuweisen. Diese Rolle ermöglicht dem Dienstkonto das Erstellen, Ändern und Löschen von Load-Balancer-Komponenten, mit Ausnahme von externen Weiterleitungsregeln.
Mit dieser bedingten Berechtigung kann das GKE-Dienstkonto nur neue interne Weiterleitungsregeln erstellen, aber alle vorhandenen Weiterleitungsregeln verwalten.
{ "bindings": [ { "role": "roles/container.serviceAgent", "members": ["serviceAccount:service-PROJECT_ID@container-engine-robot.iam.gserviceaccount.com"], "condition": { "title": "only_internal_lb_schemes", "description": "Internal LB Creation Only Permitted", "expression": "( compute.isForwardingRuleCreationOperation() && compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED']) ) || !compute.isForwardingRuleCreationOperation() " } } ] }
Wenn andere Berechtigungen fehlen, wird beim Erstellen eines neuen GKE-Diensts vom Typ LoadBalancer ohne die Annotation für einen internen Passthrough-Netzwerk-Load-Balancer eine Fehlermeldung wie die folgende angezeigt:
Error creating load balancer (will retry): failed to ensure load balancer for service default/SERVICE-NAME: failed to create forwarding rule for load balancer (a01d427111c7011ea96e142010a80006(default/SERVICE-NAME)): googleapi: Error 403: Required 'compute.forwardingRules.create' permission for 'projects/PROJECT_ID/regions/[region]/forwardingRules/FORWARDING_RULE_NAME', forbidden
Ohne andere Berechtigungen verursacht der Versuch, ein neues Ingress-Objekt zu erstellen, eine ähnliche Fehlermeldung, da der Cloud Load Balancing-Ingress-Controller einen externen Application Load Balancer erstellen muss.
GKE-Fehlermeldungen sind mit den Befehlen kubectl describe
und kubectl get events -w
verfügbar.