Gérer les liaisons de rôles conditionnelles

Cet article explique comment ajouter, modifier et supprimer des liaisons de rôle conditionnelles dans vos stratégies d'autorisation Cloud IAM (Cloud Identity and Access Management).

Avant de commencer

Rôles requis

Pour gérer les liaisons de rôle conditionnelles dans la stratégie d'autorisation d'une ressource, vous devez disposer d'autorisations pour obtenir la ressource, ainsi que pour obtenir et définir la stratégie d'autorisation de la ressource. Ces autorisations présentent le format suivant, où SERVICE est le nom du service propriétaire de la ressource et RESOURCE_TYPE est le nom du type de ressource dont vous souhaitez gérer l'accès :

  • SERVICE.RESOURCE_TYPE.get
  • SERVICE.RESOURCE_TYPE.getIamPolicy
  • SERVICE.RESOURCE_TYPE.setIamPolicy

Par exemple, pour gérer les liaisons de rôle conditionnelles dans la stratégie d'autorisation d'un projet, vous devez disposer des autorisations suivantes :

  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

Pour obtenir les autorisations requises, demandez à votre administrateur de vous attribuer un rôle prédéfini ou personnalisé qui inclut ces autorisations. Par exemple, votre administrateur peut vous accorder le rôle "Administrateur de sécurité" (roles/iam.securityAdmin), qui inclut des autorisations permettant d'obtenir presque toutes les ressources Google Cloud et de gérer leurs stratégies d'autorisation.

Ajouter une liaison de rôle conditionnelle à une règle

Les liaisons de rôle conditionnelles peuvent être ajoutées à des stratégies d'autorisation nouvelles ou existantes pour contrôler davantage l'accès aux ressources Google Cloud. Cette section vous explique comment ajouter une condition temporelle simple à une stratégie d'autorisation existante à l'aide de Cloud Console, de Google Cloud CLI et de l'API REST.

Pour ajouter une liaison de rôle conditionnelle à une stratégie d'autorisation existante, procédez comme suit :

Console

  1. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des comptes principaux, localisez le compte principal souhaité, puis cliquez sur le bouton .

  3. Dans le panneau Modifier les autorisations, localisez le rôle pour lequel vous souhaitez configurer une condition. Sous Condition, cliquez sur Ajouter une condition.

  4. Dans le panneau Modifier la condition, saisissez un titre et une description facultative pour la condition.

  5. Vous pouvez ajouter une expression de condition à l'aide du Créateur de conditions ou de l'Éditeur de conditions. L'outil Créateur de conditions fournit une interface interactive permettant de sélectionner le type de condition, l'opérateur et d'autres informations applicables concernant l'expression. L'outil Éditeur de conditions fournit une interface textuelle permettant de saisir manuellement une expression à l'aide de la syntaxe CEL.

    Créateur de conditions :

    1. Dans la liste déroulante Type de condition, sélectionnez Expiration de l'accès.
    2. Dans le menu déroulant Opérateur, sélectionnez par.
    3. À partir du menu déroulant Heure cliquez sur le bouton pour sélectionner une date et une période.
    4. Cliquez sur Enregistrer pour appliquer la condition.
    5. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

    Éditeur de conditions :

    1. Cliquez sur l'onglet Éditeur de condition, puis saisissez l'expression suivante (en remplaçant l'horodatage par le vôtre) :

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. Après avoir saisi votre expression, vous pouvez choisir de valider la syntaxe CEL en cliquant sur Exécuter l'outil lint au-dessus de la zone de texte en haut à droite.

    3. Cliquez sur Enregistrer pour appliquer la condition.

    4. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

gcloud

Les stratégies d'autorisation sont définies à l'aide du modèle lecture-modification-écriture.

Exécutez la commande gcloud projects get-iam-policy pour obtenir la stratégie d'autorisation actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie d'autorisation est téléchargée dans un chemin sur le disque.

Commande :

gcloud projects get-iam-policy project-id --format json > file-path

Le format JSON de la stratégie d'autorisation est téléchargé :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Notez la stratégie d'autorisation version actuelle de la stratégie, qui est 1. Pour configurer la stratégie d'autorisation avec un accès exploitable, ajoutez l'expression de condition en surbrillance suivante (en remplaçant l'horodatage par le vôtre). La CLI gcloud met automatiquement à jour la version :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
          "title": "Expires_2019",
          "description": "Expires at noon on 2019-12-31",
          "expression":
            "request.time < timestamp('2019-12-31T12:00:00Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Ensuite, définissez la nouvelle stratégie d'autorisation en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id file-path

La nouvelle stratégie d'autorisation est appliquée et la liaison de rôle de travis@example.com expire au moment spécifié.

REST

Utilisez le modèle lecture-modification-écriture pour autoriser l'accès jusqu'à une heure spécifique.

Tout d'abord, lisez la stratégie d'autorisation du projet :

La méthode projects.getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation d'un projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
  • POLICY_VERSION : version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corps JSON de la requête :

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Notez la stratégie d'autorisation version actuelle de la stratégie, qui est 1.

Ensuite, modifiez la stratégie d'autorisation afin qu'elle autorise l'accès jusqu'à une heure spécifique. Veillez à remplacer la valeur du champ version par la valeur 3 :

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_2019",
        "description": "Expires at noon on 2019-12-31",
        "expression": "request.time < timestamp('2019-12-31T12:00:00Z')"
      },
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Enfin, écrivez la stratégie d'autorisation mise à jour :

La méthode projects.setIamPolicy de l'API Resource Manager définit la stratégie d'autorisation de la requête en tant que nouvelle stratégie d'autorisation du projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la stratégie d'autorisation mise à jour.


Modifier une liaison de rôle conditionnelle existante

Après avoir créé une liaison de rôle conditionnelle, vous pouvez modifier l'expression de condition à tout moment. Cette section vous explique comment mettre à jour une condition temporelle dans une stratégie d'autorisation existante à l'aide de Cloud Console, de Google Cloud CLI et de l'API REST.

Pour modifier une liaison de rôle conditionnelle dans une stratégie d'autorisation existante, procédez comme suit :

Console

  1. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des comptes principaux, localisez le compte principal souhaité, puis cliquez sur le bouton .

  3. Dans le panneau Modifier les autorisations, localisez le rôle pour lequel vous souhaitez configurer une condition. Sous Condition, cliquez sur le nom de la condition existante pour la modifier.

  4. Dans le panneau Modifier la condition, vous pouvez conserver ou mettre à jour le titre et la description de la condition.

  5. Vous pouvez modifier l'expression de condition existante ou en ajouter une à l'aide du Créateur de conditions ou de l'Éditeur de conditions. L'outil Créateur de conditions fournit une interface interactive permettant de sélectionner le type de condition, l'opérateur et d'autres informations applicables concernant l'expression. L'outil Éditeur de conditions fournit une interface textuelle permettant de saisir manuellement une expression à l'aide de la syntaxe CEL.

    Créateur de conditions :

    1. Ajoutez une nouvelle expression de condition ou modifiez l'expression de condition existante.
    2. Cliquez sur Enregistrer pour appliquer la condition.
    3. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

    Éditeur de conditions :

    1. Cliquez sur l'onglet Éditeur de conditions, puis ajoutez une nouvelle expression de condition ou modifiez l'expression de condition existante.
    2. Après avoir saisi votre expression, vous pouvez choisir de valider la syntaxe CEL en cliquant sur Exécuter l'outil lint au-dessus de la zone de texte en haut à droite.
    3. Cliquez sur Enregistrer pour appliquer la condition.
    4. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

gcloud

Les stratégies d'autorisation sont définies à l'aide du modèle lecture-modification-écriture.

Exécutez la commande gcloud projects get-iam-policy pour obtenir la stratégie d'autorisation actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie d'autorisation est téléchargée dans un chemin sur le disque.

Commande :

gcloud projects get-iam-policy project-id --format json > file-path

Le format JSON de la stratégie d'autorisation est téléchargé :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Dans cet exemple, nous allons mettre à jour les valeurs title et description, ainsi que les valeurs d'horodatage dans l'expression pour modifier la durée de la condition d'accès planifié. Mettez à jour la partie en surbrillance suivante de la condition (en remplaçant les valeurs par les vôtres) :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Ensuite, définissez la nouvelle stratégie d'autorisation en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id file-path

La stratégie d'autorisation mise à jour est appliquée et la liaison de rôle de fatima@example.com expire à la nouvelle heure.

REST

Utilisez le modèle lecture-modification-écriture pour modifier la liaison de rôle conditionnelle.

Tout d'abord, lisez la stratégie d'autorisation du projet :

La méthode projects.getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation d'un projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corps JSON de la requête :

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Ensuite, modifiez la liaison de rôle conditionnelle dans la stratégie d'autorisation. Dans cet exemple, nous allons mettre à jour les valeurs d'horodatage afin de modifier la durée de la condition d'accès planifié. Mettez à jour la partie en surbrillance suivante de l'expression de condition (en remplaçant l'horodatage par la vôtre) :

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Enfin, écrivez la stratégie d'autorisation mise à jour :

La méthode projects.setIamPolicy de l'API Resource Manager définit la stratégie d'autorisation de la requête en tant que nouvelle stratégie d'autorisation du projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "condition": {
          "title": "Duration_5_months",
          "description": "Expires in 5 months on 2020-01-12",
          "expression":
            "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
        },
        "members": [
          "user:fatima@example.com"
        ],
      }
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la stratégie d'autorisation mise à jour.


Supprimer une liaison de rôle conditionnelle

Lorsque vous supprimez la liaison de rôle conditionnelle dans une stratégie d'autorisation, l'accès à la ressource est limité à la liaison de rôle uniquement. Cette section vous explique comment supprimer une condition temporelle dans une stratégie d'autorisation à l'aide de Cloud Console, de Google Cloud CLI et de l'API REST.

Pour supprimer une condition d'une liaison de rôle dans une stratégie d'autorisation, procédez comme suit :

Console

  1. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des comptes principaux, localisez le compte principal souhaité, puis cliquez sur le bouton .

  3. Dans le panneau Modifier les autorisations, recherchez la liaison de rôle souhaitée. Sous Condition, cliquez sur le nom d'une condition existante.

  4. Dans le panneau Modifier la condition, cliquez sur le bouton pour supprimer la condition. Vous êtes alors invité à confirmer la suppression de la condition.

  5. Une fois le panneau Modifier la condition fermé, cliquez à nouveau sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie d'autorisation.

gcloud

Les stratégies d'autorisation sont définies à l'aide du modèle lecture-modification-écriture.

Exécutez la commande gcloud projects get-iam-policy pour obtenir la stratégie d'autorisation actuelle du projet. Dans l'exemple suivant, la version JSON de la stratégie d'autorisation est téléchargée dans un chemin sur le disque.

Commande :

gcloud projects get-iam-policy project-id --format json > file-path

Le format JSON de la stratégie d'autorisation est téléchargé :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Pour supprimer la liaison de rôle conditionnelle de la stratégie d'autorisation, supprimez le bloc condition comme indiqué ci-dessous :

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Notez que le champ version est toujours défini sur 3, même si les liaisons de rôles inconditionnelles ne requièrent que la version de stratégie 1. Nous vous recommandons de toujours utiliser le numéro de version le plus élevé lors de la définition d'une stratégie d'autorisation, à la fois pour les liaisons de rôles conditionnelles et inconditionnelles. Pour plus d'informations, consultez la section Exigences concernant la version. gcloud CLI met automatiquement à jour le numéro de version de la stratégie d'autorisation.

Définissez ensuite la stratégie d'autorisation mise à jour en exécutant la commande gcloud projects set-iam-policy :

gcloud projects set-iam-policy project-id file-path

La stratégie d'autorisation mise à jour est appliquée et supprime la liaison de rôle conditionnelle pour fatima@example.com. La liaison de rôle n'expire plus.

REST

Utilisez le modèle lecture-modification-écriture pour supprimer la liaison de rôle conditionnelle.

Tout d'abord, lisez la stratégie d'autorisation du projet :

La méthode projects.getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation d'un projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corps JSON de la requête :

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Ensuite, modifiez la stratégie d'autorisation en supprimant la liaison de rôle conditionnelle :

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Notez que le champ version est toujours défini sur 3, même si les liaisons de rôles inconditionnelles ne requièrent que la version de stratégie 1. Nous vous recommandons de toujours utiliser le numéro de version le plus élevé lors de la définition d'une stratégie d'autorisation, à la fois pour les liaisons de rôles conditionnelles et inconditionnelles. Pour plus d'informations, consultez la section Exigences concernant la version.

Enfin, écrivez la stratégie d'autorisation mise à jour :

La méthode projects.setIamPolicy de l'API Resource Manager définit la stratégie d'autorisation de la requête en tant que nouvelle stratégie d'autorisation du projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:fatima@example.com"
        ]
      }
    ]
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la stratégie d'autorisation mise à jour.