Utiliser des stratégies d'autorisation pour déléguer l'autorisation à l'IAP et à IAM

Cette page explique comment utiliser des règles d'autorisation pour désigner Identity-Aware Proxy (IAP) comme moteur d'autorisation personnalisé dans une règle d'autorisation pour les équilibreurs de charge d'application.

Pour déléguer l'autorisation à IAP et à Identity and Access Management (IAM), vous autorisez le trafic vers une règle de transfert en fonction des identités IAM ou des utilisateurs finaux pour les équilibreurs de charge gérés. Cela vous permet d'appliquer un contrôle des accès basé sur IAP pour vos services de backend.

Avant de commencer

  • Comprendre les concepts des règles d'autorisation.
  • Assurez-vous que l'IAP n'est pas activé pour les services de backend des règles de transfert. Si IAP est activé, vous recevez un message d'erreur lorsque vous envoyez votre configuration.
  • Activez l'API Network Services.

Créer la règle d'autorisation et activer IAP

Pour créer une règle d'autorisation, vous devez créer un fichier de règle qui définit la cible et les règles, puis activer IAP sur la règle de transfert. Vous pouvez choisir d'appliquer IAP uniquement à des requêtes spécifiques en définissant des conditions dans la section httpRules de votre fichier de règles. Si la section httpRules est omise, IAP est appliqué à toutes les requêtes.

gcloud

  1. Exécutez la commande suivante pour préparer un fichier policy.yaml. La stratégie permet aux clients dont la plage d'adresses IP est 10.0.0.1/24 d'activer IAP sur une règle de transfert.
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
httpRules:
  - from:
      sources:
      - ipBlocks:
        - prefix: "10.0.0.1"
          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. Exécutez la commande suivante pour activer IAP sur une règle de transfert.
gcloud beta network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet Google Cloud .
  • LOCATION : région dans laquelle se trouve la ressource.
  • FORWARDING_RULE_ID : ID de la ressource de règle de transfert.
  • AUTHZ_POLICY_NAME : nom de la règle d'autorisation.

API

  1. Exécutez la commande suivante pour préparer un fichier 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.1",
                "length": "24"
              }
            ]
          }
        }
      }
    ],
    "customProvider": {
      "cloudIap": {}
    }
    }
    EOF
    
  2. Exécutez la commande suivante pour activer IAP sur une règle de transfert.

    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/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzPolicies"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet Google Cloud .
    • LOCATION : région dans laquelle se trouve la ressource.
    • FORWARDING_RULE_ID : ID de la ressource de règle de transfert.
    • AUTHZ_POLICY_NAME : nom de la règle d'autorisation.

Appliquer des autorisations aux ressources

Vous pouvez utiliser l'API IAP pour appliquer des autorisations IAM à des ressources individuelles dans un projet sécurisé par IAP. Les autorisations IAM accordées à un certain niveau s'appliquent à tous les niveaux inférieurs. Par exemple, une autorisation accordée au niveau du projet s'applique à toutes les ressources Google Cloud du projet.

Vous trouverez ci-dessous quelques exemples de commandes permettant de configurer les autorisations. Pour en savoir plus, consultez la section sur gcloud alpha iap web set-iam-policy.

gcloud

Dans les exemples de commandes, remplacez POLICY_FILE par le chemin d'accès à un fichier au format YAML contenant une règle valide. Voici un exemple de fichier YAML :

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

Mettre à jour l'autorisation d'accès à la ressource de règle de transfert

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

Configurer les autorisations au niveau de l'organisation

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

Configurer les autorisations au niveau du dossier

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

Configurer les autorisations au niveau du projet

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

Configurer les autorisations pour toutes les règles de transfert globales d'un projet

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

Configurer les autorisations pour toutes les règles de transfert d'un projet dans une région

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

Configurer l'autorisation pour une règle de transfert globale spécifique dans un projet

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

Configurer l'autorisation pour une règle de transfert spécifique dans un projet d'une région

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

Remplacez les éléments suivants :

  • POLICY_FILE : chemin d'accès à un fichier YAML contenant une stratégie valide.
  • ORGANIZATION : ID de votre organisation.
  • FOLDER : dossier contenant votre application.
  • PROJECT_ID : ID du projet Google Cloud .
  • RESOURCE_TYPE : type de ressource IAP. Le type de ressource doit être app-engine, iap_web, compute, organization ou folder.
  • SERVICE : ID ou nom de la règle de transfert.
  • REGION : région dans laquelle se trouve la ressource.

API

Configurer les autorisations au niveau de l'organisation

organization/ORGANIZATION

Configurer les autorisations au niveau du dossier

folders/FOLDER

Configurer les autorisations au niveau du projet

projects/PROJECT_ID

Configurer les autorisations pour toutes les règles de transfert globales d'un projet

projects/PROJECT_ID/forwarding_rule

Configurer les autorisations pour toutes les règles de transfert d'un projet dans une région

projects/PROJECT_ID/iap_web/forwarding_rule-REGION

Configurer l'autorisation pour une règle de transfert globale spécifique dans un projet

projects/PROJECT_ID/iap_web/forwarding_rule/services/SERVICE

Configurer l'autorisation pour une règle de transfert spécifique dans un projet d'une région

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

Définir la règle d'autorisation

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"

Pour policy.json, vous pouvez créer le fichier JSON en exécutant la commande suivante. Modifiez les valeurs si nécessaire.

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

Remplacez les éléments suivants :

  • ORGANIZATION : ID de votre organisation.
  • FOLDER : dossier contenant votre application.
  • PROJECT_ID : ID du projet Google Cloud .
  • REGION : région dans laquelle se trouve la ressource.
  • SERVICE : ID ou nom de la règle de transfert.