Usa políticas de autorización para delegar la autorización a IAP y IAM

En esta página, se describe cómo usar las políticas de autorización para designar a Identity-Aware Proxy (IAP) como el motor de autorización personalizado en una política de autorización para los balanceadores de cargas de aplicaciones.

Para delegar la autorización al IAP y a Identity and Access Management (IAM), autorizas el tráfico a una regla de reenvío según IAM o las identidades del usuario final para los balanceadores de cargas administrados. Esto te permite aplicar el control de acceso basado en IAP para tus servicios de backend.

Antes de comenzar

Crea la política de autorización y habilita IAP

Para crear una política de autorización, crea un archivo de políticas que defina el objetivo y las reglas, y, luego, habilita IAP en la regla de reenvío.

gcloud

  1. Run the following command to prepare a policy.yaml file.
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
customProvider:
  cloudIap: {}
target:
  loadBalancingScheme: EXTERNAL_MANAGED
  resources:
  - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID
EOF
  1. Run the following command to enable IAP on a forwarding rule.
gcloud beta network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

Replace the following:

  • PROJECT_ID: The Google Cloud project ID.
  • LOCATION: The region that the resource is located in.
  • FORWARDING_RULE_ID: The ID of the forwarding rule resource.
  • AUTHZ_POLICY_NAME: The name of the authorization policy.

API

  1. Run the following command to prepare a policy.json file.
    cat << EOF > policy.json
    {
    "name": "AUTHZ_POLICY_NAME",
    "target": {
    "loadBalancingScheme": "INTERNAL_MANAGED",
    "resources": [
    "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID"
    ],
    },
    "action": "CUSTOM",
    "httpRules": [],
    "customProvider": {
    "cloudIap": {}
    }
    }
    EOF
    
  2. Run the following command to enable IAP on a forwarding rule.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://networksecurity.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzPolicies"
    

    Replace the following:

    • PROJECT_ID: The Google Cloud project ID.
    • LOCATION: The region that the resource is located in.
    • FORWARDING_RULE_ID: The ID of the forwarding rule resource.
    • AUTHZ_POLICY_NAME: The name of the authorization policy.

Aplica permisos a los recursos

Puedes usar la API de IAP para aplicar permisos de IAM a recursos individuales en un proyecto protegido con IAP. Los permisos de IAM otorgados a un nivel determinado se aplican a todos los niveles por debajo de este. Por ejemplo, un permiso otorgado a nivel de proyecto se aplica a todos los recursos de Google Cloud del proyecto.

A continuación, se incluyen algunos comandos de ejemplo para configurar permisos. Para obtener más información, consulta gcloud alpha iap web set-iam-policy:

gcloud

En los comandos de ejemplo, reemplaza POLICY_FILE por la ruta de acceso a un archivo en formato YAML que contenga una política válida. El siguiente es un ejemplo de archivo YAML:

policy:
  bindings:
    members: user:example@example.com
    role: roles/iap.httpsResourceAccessor

Actualiza el permiso de quién puede acceder al recurso de la regla de reenvío

gcloud alpha iap web set-iam-policy POLICY_FILE [--organization=ORGANIZATION \
--folder=FOLDER --project=/PROJECT_ID \
--resource-type=RESOURCE_TYPE --service=SERVICE]

Configura el permiso a nivel de la organización

gcloud alpha iap web set-iam-policy POLICY_FILE --organization=ORGANIZATION

Configura el permiso a nivel de la carpeta

gcloud alpha iap web set-iam-policy POLICY_FILE --folder=FOLDER

Configura el permiso a nivel del proyecto

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=iap_web

Configura el permiso para todas las reglas de reenvío globales de un proyecto

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=forwarding_rule

Configura el permiso para todas las reglas de reenvío en un proyecto de una región

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --region=REGION

Configura el permiso para una regla de reenvío global específica en un proyecto

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --service=SERVICE

Configura el permiso para una regla de reenvío específica en un proyecto de una región

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --service=SERVICE --region=REGION

API

Configura el permiso a nivel de la organización

organization/ORGANIZATION

Configura el permiso a nivel de la carpeta

folders/FOLDER

Configura el permiso a nivel del proyecto

projects/PROJECT_ID

Configura el permiso para todas las reglas de reenvío globales de un proyecto

projects/PROJECT_ID/forwarding_rule

Configura el permiso para todas las reglas de reenvío en un proyecto de una región

projects/PROJECT_ID/iap_web/forwarding_rule-REGION

Configura el permiso para una regla de reenvío global específica en un proyecto

projects/PROJECT_ID/iap_web/forwarding_rule/services/SERVICE

Configura el permiso para una regla de reenvío específica en un proyecto de una región

projects/PROJECT_ID/iap_web/forwarding_rule-REGION/services/SERVICE

Establece la política de autorización

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d @policy.json \
"https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"

En el caso de policy.json, puedes crear el archivo JSON ejecutando el siguiente comando. Actualiza los valores según sea necesario.

cat << EOF > policy.json
{
  "policy": {
      "bindings": {
            "members": "user:example@example.com",
            "role": "roles/iap.httpsResourceAccessor",
        }
    }
}
EOF