Las condiciones de administración de identidades y accesos (IAM) te permiten definir políticas de IAM con permisos condicionales. Debes especificar las condiciones en las vinculaciones de funciones de la política de IAM de un recurso. Si una condición existe, el rol solo se otorga cuando la expresión de la condición se evalúa como true
. Cada expresión de condición es un conjunto de instrucciones lógicas que te permite especificar uno o varios atributos. A fin de obtener más información, consulta la referencia de atributos para las condiciones de IAM.
Cuando se usa con Cloud Load Balancing, las condiciones de IAM te permiten otorgar de forma condicional roles predefinidos (como administrador del balanceador de cargas o administrador de red) o personalizados.
Las condiciones de IAM admiten una expresión de condición para comprobar el esquema de balanceo de cargas de una regla de reenvío. Por ejemplo, puedes otorgar de forma condicional a un principal de IAM la capacidad de crear balanceadores de cargas internos, pero no externos. Si ese principal de IAM intenta crear una regla de reenvío para un balanceador de cargas externo, Google Cloud rechaza la acción y muestra un error como el siguiente:
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'
Usa condiciones de IAM en los balanceadores de cargas de Google Cloud
El esquema de balanceo de cargas de una regla de reenvío determina qué tipo o tipos de balanceador de cargas puede usar la regla de reenvío. En otras palabras, el esquema de balanceo de cargas corresponde al tipo de balanceador de cargas, como se muestra en la siguiente tabla.
Esquema de balanceo de cargas | Descripción |
---|---|
EXTERNAL |
Balanceador de cargas de aplicaciones clásico Balanceador de cargas de red del proxy clásico Balanceador de cargas de red de transferencia externo |
EXTERNAL_MANAGED |
Balanceador de cargas de aplicaciones externo global Balanceador de cargas de red de proxy externo global Balanceador de cargas de aplicaciones externo regional Balanceador de cargas de red de proxy externo regional |
INTERNAL | Balanceador de cargas de red de transferencia interno |
INTERNAL_MANAGED | Balanceador de cargas de aplicaciones interno regional Balanceador de cargas de red del proxy interno regional Balanceador de cargas de aplicaciones interno entre regiones Balanceador de cargas de red del proxy interno entre regiones |
INTERNAL_SELF_MANAGED | Cloud Service Mesh |
Cuando crees el balanceador de cargas especifica el campo loadBalancingScheme
.
Si marcas el campo loadBalancingScheme
en una condición de IAM, puedes otorgarle a los principales la capacidad de crear ciertos tipos de balanceadores de cargas.
Especifica las condiciones de IAM
Puedes establecer vinculaciones de roles condicionales mediante el mismo método setIamPolicy
que usas para configurar cualquier otra vinculación de roles. Para establecer una vinculación de rol con una condición en un proyecto, puedes usar la API de REST, la herramienta de línea de comandos de gcloud
o la página de IAM en la consola de Google Cloud.
Para obtener más información, consulta Administra políticas condicionales.
Ejemplo de expresiones de condición para el balanceo de cargas
La siguiente expresión de condición, que se puede usar en una política de IAM, permite una solicitud a la API solo si se cumple una de las siguientes condiciones:
- La solicitud no implica crear una regla de reenvío.
La solicitud es crear una regla de reenvío que tenga uno de los esquemas de balanceo de cargas internos.
!compute.isForwardingRuleCreationOperation() || ( compute.isForwardingRuleCreationOperation() && compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED']) )
Se omite el esquema de balanceo de cargas EXTERNAL
.
Si una principal intenta crear una regla de reenvío con el esquema de balanceo de cargas EXTERNAL
, aparecerá un mensaje de error de permisos.
Ejemplo de una política
Esta política de IAM de ejemplo para un proyecto le otorga al principal de IAM jane@example.com
la función predefinida de administrador del balanceador de cargas, y excluye la capacidad de crear balanceadores de cargas externos (porque el esquema de balanceo de cargas EXTERNAL
se omite). jane@example.com
puede crear balanceadores de cargas internos y administrar, modificar y borrar cualquier balanceador de cargas.
{
"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'])
)
"
}
}
]
}
Otorga permisos de cuenta de servicio de GKE para tipos específicos de reglas de reenvío
También puedes usar las condiciones de IAM para limitar el acceso a la cuenta de servicio de GKE a fin de crear solo tipos específicos de reglas de reenvío.
En este ejemplo de JSON, se muestra una política de IAM completa para otorgar a la cuenta de servicio de GKE (service-PROJECT_ID@container-engine-robot.iam.gserviceaccount.com
) la función de agente de servicio de Kubernetes Engine. Esta función permite que la cuenta de servicio cree, modifique y borre componentes del balanceador de cargas, excepto las reglas de reenvío externas.
Con este otorgamiento condicional, la cuenta de servicio de GKE solo puede crear nuevas reglas de reenvío internas, pero puede administrar todas las reglas de reenvío existentes.
{
"bindings": [
{
"role": "roles/container.serviceAgent",
"members": ["serviceAccount:service-<var>PROJECT_ID</var>@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'])
)
||
!compute.isForwardingRuleCreationOperation()
"
}
}
]
}
Si intentas crear un nuevo servicio de GKE de tipo LoadBalancer sin la anotación para un balanceador de cargas de red de transferencia interno cuando no hay otros otorgamientos, aparecerá un mensaje de error como el siguiente:
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
Además, sin otros otorgamientos, intentar crear un nuevo objeto Ingress genera un mensaje de error similar porque el controlador de Ingress de Cloud Load Balancing debe crear un balanceador de cargas de aplicaciones externo.
Los mensajes de error de GKE están disponibles mediante los comandos kubectl describe
y kubectl get events -w
.
¿Qué sigue?
- Obtén más información sobre IAM.
- Asigna funciones de IAM.