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 Identity-Aware Proxy (IAP) como el motor de autorización personalizado en una política de autorización para Application Load Balancers.

Para delegar la autorización a IAP y a Identity and Access Management (IAM), autorizas el tráfico a una regla de reenvío en función de las identidades de IAM o 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

  • Comprende los conceptos de las políticas de autorización.
  • Asegúrate de que los servicios de backend de las reglas de reenvío no tengan IAP habilitado. Si IAP está habilitado, recibirás un error cuando envíes tu configuración.
  • Habilita la API de Network Services.

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 destino y las reglas, y luego habilita IAP en la regla de reenvío. Puedes aplicar IAP solo a solicitudes específicas si defines condiciones en la sección httpRules de tu archivo de políticas. Si se omite la sección httpRules, se aplica IAP en todas las solicitudes.

gcloud

  1. Ejecuta el siguiente comando para preparar un archivo policy.yaml. La política permite que los clientes con un rango de direcciones IP de 10.0.0.0/24 habiliten el IAP en una regla de reenvío.
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
httpRules:
  - from:
      sources:
      - ipBlocks:
        - prefix: "10.0.0.0"
          length: 24
customProvider:
  cloudIap: {}
target:
  loadBalancingScheme: EXTERNAL_MANAGED
  resources:
  - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID
EOF
  1. Ejecuta el siguiente comando para habilitar el IAP en una regla de reenvío.
gcloud network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto de Google Cloud .
  • LOCATION: Es la región en la que se encuentra el recurso.
  • FORWARDING_RULE_ID: Es el ID del recurso de la regla de reenvío.
  • AUTHZ_POLICY_NAME: Es el nombre de la política de autorización.

API

  1. Ejecuta el siguiente comando para preparar un archivo policy.json.
    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": [
      {
        "from": {
          "sources": {
            "ipBlocks": [
              {
                "prefix": "10.0.0.0",
                "length": 24
              }
            ]
          }
        }
      }
    ],
    "customProvider": {
      "cloudIap": {}
    }
    }
    EOF
    
  2. Ejecuta el siguiente comando para habilitar el IAP en una regla de reenvío.

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

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto de Google Cloud .
    • LOCATION: Es la región en la que se encuentra el recurso.
    • FORWARDING_RULE_ID: Es el ID del recurso de la regla de reenvío.
    • AUTHZ_POLICY_NAME: Es el nombre de la política de autorización.

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 Google Cloud recursos del proyecto.

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

gcloud

En los comandos de ejemplo, reemplaza POLICY_FILE por la ruta de acceso a un archivo con formato YAML que contenga una política válida. A continuación, se muestra un archivo YAML de ejemplo:

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

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

gcloud 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 iap web set-iam-policy POLICY_FILE --organization=ORGANIZATION

Configura el permiso a nivel de la carpeta

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

Configura el permiso a nivel del proyecto

gcloud 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 iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=forwarding_rule

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

gcloud 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 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 en una región

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

Reemplaza lo siguiente:

  • POLICY_FILE: Es la ruta de acceso a un archivo YAML que contiene una política válida.
  • ORGANIZATION: Es el ID de tu organización.
  • FOLDER: Es la carpeta que contiene tu aplicación.
  • PROJECT_ID: Es el ID del proyecto. Google Cloud
  • RESOURCE_TYPE: Es el tipo de recurso de IAP. El tipo de recurso debe ser app-engine, iap_web, compute, organization o folder.
  • SERVICE: Es el nombre o el ID de la regla de reenvío.
  • REGION: Es la región en la que se encuentra el recurso.

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 de un proyecto en 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 en 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"

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

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

Reemplaza lo siguiente:

  • ORGANIZATION: Es el ID de tu organización.
  • FOLDER: Es la carpeta que contiene tu aplicación.
  • PROJECT_ID: Es el ID del proyecto. Google Cloud
  • REGION: Es la región en la que se encuentra el recurso.
  • SERVICE: Es el nombre o el ID de la regla de reenvío.