Usar políticas de autorização para delegar autorização ao IAP e ao IAM

Esta página descreve como usar políticas de autorização para designar o Identity-Aware Proxy (IAP) como o mecanismo de autorização personalizado em uma política de autorização para balanceadores de carga de aplicativos.

Para delegar a autorização ao IAP e ao Identity and Access Management (IAM), você autoriza o tráfego para uma regra de encaminhamento com base nas identidades do IAM ou do usuário final para balanceadores de carga gerenciados. Isso permite aplicar o controle de acesso baseado em IAP aos seus serviços de back-end.

Antes de começar

Crie a política de autorização e ative o IAP

Para criar uma política de autorização, você cria um arquivo de política que define o destino e as regras e, em seguida, ativa o IAP na regra de encaminhamento.

gcloud

  1. Execute o comando a seguir para preparar um arquivo policy.yaml.
$ 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. Execute o comando a seguir para ativar o IAP em uma regra de encaminhamento.
gcloud beta network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • LOCATION: a região em que o recurso está localizado.
  • FORWARDING_RULE_ID: o ID do recurso da regra de encaminhamento.
  • AUTHZ_POLICY_NAME: o nome da política de autorização.

API

  1. Execute o comando a seguir para preparar um arquivo 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": [],
    "customProvider": {
    "cloudIap": {}
    }
    }
    EOF
    
  2. Execute o comando a seguir para ativar o IAP em uma regra de encaminhamento.

    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"
    

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud.
    • LOCATION: a região em que o recurso está localizado.
    • FORWARDING_RULE_ID: o ID do recurso da regra de encaminhamento.
    • AUTHZ_POLICY_NAME: o nome da política de autorização.

Aplicar permissões a recursos

É possível usar a API IAP para aplicar as permissões do IAM a recursos individuais em um projeto protegido pelo IAP. As permissões do IAM concedidas em determinado nível se aplicam a todos níveis abaixo dele. Por exemplo, uma permissão concedida no nível do projeto se aplica a todos os recursos do Google Cloud no projeto.

Veja a seguir alguns exemplos de comandos para configurar permissões. Para mais informações, consulte gcloud alpha iap web set-iam-policy.

gcloud

Nos comandos de exemplo, substitua POLICY_FILE pelo caminho para um arquivo formatado em YAML que contenha uma política válida. Confira a seguir um exemplo de arquivo YAML:

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

Atualize a permissão para quem pode acessar o recurso da regra de encaminhamento

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

Configurar permissão no nível da organização

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

Configurar permissão no nível da pasta

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

Configurar a permissão no nível do projeto

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

Configurar a permissão para todas as regras de encaminhamento globais em um projeto

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

Configurar a permissão para todas as regras de encaminhamento em um projeto em uma região

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

Configurar a permissão para uma regra de encaminhamento global específica em um projeto

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

Configure a permissão para uma regra de encaminhamento específica em um projeto em uma região

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

API

Configurar permissão no nível da organização

organization/ORGANIZATION

Configurar permissão no nível da pasta

folders/FOLDER

Configurar a permissão no nível do projeto

projects/PROJECT_ID

Configurar a permissão para todas as regras de encaminhamento globais em um projeto

projects/PROJECT_ID/forwarding_rule

Configurar a permissão para todas as regras de encaminhamento em um projeto em uma região

projects/PROJECT_ID/iap_web/forwarding_rule-REGION

Configurar a permissão para uma regra de encaminhamento global específica em um projeto

projects/PROJECT_ID/iap_web/forwarding_rule/services/SERVICE

Configure a permissão para uma regra de encaminhamento específica em um projeto em uma região

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

Definir a política de autorizaçã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://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"

Para policy.json, é possível criar o arquivo JSON executando o comando a seguir. Atualize os valores conforme necessário.

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