Dans les grandes organisations, il peut être utile de permettre aux équipes de gérer indépendamment les stratégies de gestion de l'authentification et des accès (IAM) pour leurs ressources. Toutefois, permettre à un membre d'accorder ou de révoquer tous les rôles IAM peut considérablement augmenter les risques liés à la sécurité.
Vous pouvez définir des limites sur les rôles qu'un membre peut accorder et révoquer avec les conditions IAM et l'attribut d'API iam.googleapis.com/modifiedGrantsByRole
. Ces limites vous permettent de créer des administrateurs IAM limités pouvant gérer les stratégies IAM de leur propre équipe, mais uniquement dans les limites que vous avez définies.
Avant de commencer
- Familiarisez-vous avec la structure des stratégies IAM.
- Consultez la documentation relative aux conditions IAM.
Autorisations requises
Pour définir des limites sur les rôles qu'un membre peut accorder ou révoquer, vous devez disposer d'un rôle qui inclut les autorisations suivantes :
resourcemanager.resource-type.getIamPolicy
resourcemanager.resource-type.setIamPolicy
Remplacez resource-type
par l'un des éléments suivants :
-
Si vous souhaitez créer un administrateur IAM limité pour une organisation, utilisez
organizations
. -
Si vous souhaitez créer un administrateur IAM limité pour un dossier, utilisez
folders
. -
Si vous souhaitez créer un administrateur IAM limité pour un projet, utilisez
projects
.
Pour obtenir ces autorisations tout en suivant le principe du moindre privilège, demandez à votre administrateur de vous attribuer le rôle d'Administrateur de sécurité IAM (roles/iam.securityAdmin
).
Votre administrateur peut également vous attribuer un autre rôle qui inclut les autorisations requises, par exemple un rôle personnalisé ou un rôle prédéfini moins restrictif.
Cas d'utilisation courants
Dans les sections suivantes, nous allons voir comment vous pouvez utiliser l'attribution de rôles limités pour permettre la gestion de stratégies en libre-service.
Créer des administrateurs IAM limités
Imaginons un scénario dans lequel vous souhaitez autoriser un utilisateur, Finn (finn@example.com
), à agir en tant qu'administrateur IAM limité pour votre projet. Vous souhaitez que Finn ne puisse accorder et révoquer que les rôles d'administrateur de compte de facturation (roles/billing.admin
) et d'utilisateur de compte de facturation (roles/billing.user
) pour votre projet.
Pour accorder cette fonctionnalité limitée, vous accordez de manière conditionnelle à Finn le rôle d'administrateur de projet IAM (roles/resourcemanager.projectIamAdmin
). Le rôle d'administrateur de projet IAM permet à Finn d'accorder et de révoquer des rôles IAM, et la condition limite les rôles que Finn peut accorder et révoquer :
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "finn@example.com" ], "role": "roles/resourcemanager.projectIamAdmin", "condition": { "title": "only_billing_roles", "description": "Only allows changes to role bindings for billing accounts", "expression": "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/billing.admin', 'roles/billing.user'])" } } ] }
Cette liaison de rôle conditionnelle permet à Finn d'effectuer les opérations suivantes :
- Attribuer les rôles Administrateur de compte de facturation et d'Utilisateur de compte de facturation pour le projet
- Révoquer les rôles d'administrateur de compte de facturation et d'utilisateur de compte de facturation pour le projet
- Ajouter, supprimer ou modifier des conditions pour les liaisons de rôles au niveau du projet qui accordent les rôles d'administrateur de compte de facturation et d'utilisateur de compte de facturation
- Effectuer d'autres actions autorisées par le rôle d'administrateur IAM du projet qui ne modifie pas la stratégie IAM du projet. Par exemple, Finn peut utiliser la méthode
projects.getIamPolicy
pour obtenir la stratégie du projet.
Cette liaison de rôle conditionnelle ne permet pas à Finn d'effectuer les opérations suivantes :
- Modifier les stratégies IAM pour des ressources autres que le projet
- Accorder des rôles autres que les rôles d'administrateur de compte de facturation ou d'utilisateur de compte de facturation
- Révoquer des rôles autres que les rôles d'administrateur de compte de facturation ou d'utilisateur de compte de facturation
- Ajouter, supprimer ou modifier des conditions pour les liaisons de rôles qui n'accordent pas les rôles d'administrateur de compte de facturation ou d'utilisateur de compte de facturation
Autoriser les utilisateurs à gérer des administrateurs IAM limités
Imaginons, par exemple, que vous souhaitiez qu'un utilisateur, Lila, soit un administrateur IAM limité pour son équipe. Vous souhaitez que Lila puisse uniquement accorder et révoquer le rôle d'administrateur Compute (roles/compute.admin
) pour son projet.
Vous souhaitez également que Lila sélectionne d'autres utilisateurs pour agir en tant qu'administrateurs IAM limités. En d'autres termes, vous souhaitez permettre à d'autres utilisateurs d'accorder et de révoquer uniquement le rôle d'administrateur de Compute.
Vous pensez peut-être que la solution consiste à attribuer à Lila le rôle d'administrateur de projet IAM (roles/resourcemanager.projectIamAdmin
), puis à lui permettre d'accorder ou de révoquer ce rôle pour d'autres personnes. Toutefois, si vous accordez à Lila le rôle d'administrateur de projet IAM, elle peut supprimer la condition de son propre rôle et s'autoriser à accorder ou à révoquer n'importe quel rôle IAM.
Pour éviter cette transmission de privilèges, créez un groupe Google, iam-compute-admins@example.com
, pour les administrateurs IAM limités du projet. Ensuite, ajoutez Lila au groupe et rendez-la gestionnaire de groupe.
Après avoir créé le groupe, vous lui accordez de manière conditionnelle le rôle d'administrateur de projet IAM (roles/resourcemanager.projectIamAdmin
). Le rôle d'administrateur de projet IAM permet aux membres du groupe d'accorder et de révoquer des rôles IAM, et la condition limite les rôles qu'ils peuvent accorder et révoquer :
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "iam-compute-admins@example.com" ], "role": "roles/resourcemanager.projectIamAdmin", "condition": { "title": "only_compute_admin_role", "description": "Only allows changes to role bindings for the Compute Admin role", "expression": "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/compute.admin'])" } } ] }
En tant que membre du groupe iam-compute-admins@example.com
, Lila peut effectuer les opérations suivantes :
- Accorder le rôle d'administrateur Compute du projet en ajoutant une nouvelle liaison pour le rôle, ou en ajoutant un membre à une liaison existante pour le rôle
- Révoquer le rôle d'administrateur Compute en supprimant une liaison existante pour le rôle ou en supprimant un membre d'une liaison existante pour le rôle
- Modifier les autorisations pour le rôle d'administrateur Compute en ajoutant, supprimant ou modifiant des conditions associées aux liaisons du rôle
- Effectuer d'autres actions autorisées par le rôle d'administrateur IAM du projet qui ne modifie pas la stratégie IAM du projet. Par exemple, elle peut utiliser la méthode
projects.getIamPolicy
pour obtenir la stratégie du projet.
En tant qu'administrateur du groupe iam-compute-admins@example.com
, Lila peut autoriser d'autres utilisateurs à accorder ou à révoquer le rôle d'administrateur Compute en les ajoutant au groupe iam-compute-admins@example.com
.
Lila ne peut pas effectuer les opérations suivantes :
- S'autoriser à accorder ou à révoquer d'autres rôles
- Modifier les stratégies IAM pour des ressources autres que le projet
- Accorder des rôles autres que le rôle d'administrateur Compute
- Révoquer les rôles autres que celui d'administrateur Compute
- Ajouter, supprimer ou modifier des conditions pour les liaisons de rôles qui n'incluent pas le rôle d'administrateur Compute
Limiter l'attribution de rôles
Les sections suivantes expliquent comment autoriser des membres à accorder ou à révoquer uniquement certains rôles.
Écrire une expression de condition pour limiter l'attribution de rôles
Pour limiter la capacité d'un membre à attribuer des rôles, écrivez une expression de condition qui spécifie les rôles qu'un membre peut accorder ou révoquer.
Utilisez le format suivant pour votre expression de condition :
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(roles)
Cette expression effectue les opérations suivantes :
Récupérer l'attribut de l'API
iam.googleapis.com/modifiedGrantsByRole
à l'aide de la fonctionapi.getAttribute()
Pour une requête permettant de définir la stratégie IAM d'une ressource, cet attribut contient les noms de rôle des liaisons modifiées par la requête. Pour les autres types de requêtes, l'attribut n'est pas défini. Dans ces cas, la fonction renvoie la valeur par défaut (
[]
).Utilise la fonction
hasOnly()
Common Expression Language pour définir et appliquer les rôles que le membre est autorisé à accorder ou à révoquer.L'entrée de la fonction
hasOnly()
est une liste des rôles que le membre est autorisé à accorder ou à révoquer. Si les rôles de l'attributiam.googleapis.com/modifiedGrantsByRole
sont inclus dans cette liste, la fonction renvoietrue
. S'ils ne le sont pas, la fonction renvoiefalse
.Si l'attribut
iam.googleapis.com/modifiedGrantsByRole
contient la valeur par défaut ([]
), la fonction renvoietrue
, car[]
ne contient aucun rôle non inclus dans la liste.
Pour personnaliser cette expression, remplacez roles
par la liste des rôles que le membre peut accorder ou révoquer. Par exemple, pour permettre au membre d'accorder ou de révoquer uniquement le rôle d'Editor Pub/Sub (roles/pubsub.editor
) et de Publisher Pub/Sub (roles/pubsub.publisher
), utilisez la valeur ['roles/pubsub.editor', 'roles/pubsub.publisher']
.
Vous pouvez inclure jusqu'à 10 valeurs dans la liste des rôles autorisés. Toutes ces valeurs doivent être des constantes de chaîne.
Limiter l'attribution de rôles à l'aide de liaisons de rôles conditionnelles
Pour permettre à un membre de n'accorder ou de révoquer que certains rôles, utilisez l'expression de condition de la section précédente pour créer une liaison de rôle conditionnelle. Ajoutez ensuite la liaison de rôle conditionnelle à la stratégie IAM d'une ressource.
Sélectionnez une ressource qui représente le champ d'application pour lequel un membre peut attribuer et révoquer des rôles :
- Si vous souhaitez autoriser un membre à accorder et révoquer certains rôles pour toutes les ressources d'une organisation, sélectionnez une organisation.
- Si vous souhaitez autoriser un membre à accorder et révoquer certains rôles pour toutes les ressources d'un dossier, sélectionnez un dossier.
- Si vous souhaitez autoriser un membre à accorder et révoquer certains rôles pour toutes les ressources d'un projet, sélectionnez un projet.
Sélectionnez un rôle permettant à un membre de définir la stratégie IAM pour le type de ressource que vous avez sélectionné (projet, dossier ou organisation). Pour suivre le principe du moindre privilège, choisissez l'un des rôles prédéfinis suivants :
- Projets : administrateur IAM de projets (
roles/resourcemanager.projectIamAdmin
) - Dossiers : administrateur IAM de dossiers (
roles/resourcemanager.folderIamAdmin
) Organisations : administrateur de l'organisation (
roles/resourcemanager.organizationAdmin
)
Vous pouvez également choisir un rôle personnalisé qui inclut les autorisations
resourcemanager.resource-type.setIamPolicy
etresourcemanager.resource-type.getIamPolicy
, où resource-type correspond àproject
,folder
ouorganization
.- Projets : administrateur IAM de projets (
Accordez de manière conditionnelle à un membre le rôle que vous avez choisi pour le projet, le dossier ou l'organisation que vous avez sélectionné.
La nouvelle stratégie est appliquée et votre membre ne peut modifier les liaisons que pour les rôles que vous avez autorisés.
Console
Dans Cloud Console, accédez à la page IAM.
Assurez-vous que le nom de votre projet, dossier ou organisation apparaît dans le sélecteur de ressources en haut de la page. Le sélecteur de ressources indique le projet, le dossier ou l'organisation dans lequel vous travaillez actuellement.
Si vous ne voyez pas le nom de votre ressource, cliquez sur le sélecteur de ressource, puis sélectionnez votre ressource.
Dans la liste des membres, localisez le membre qui accorde et révoque les rôles, puis cliquez sur le bouton
.Dans le panneau Modifier les autorisations, sélectionnez le rôle que vous avez choisi précédemment. Sous Condition, cliquez sur Ajouter une condition.
Dans le panneau Modifier la condition, saisissez un titre et une description facultative pour la condition.
Cliquez sur l'onglet Éditeur de conditions, puis saisissez l'expression que vous avez écrite dans Écrire une expression de condition pour limiter l'attribution de rôles. Cette expression limite les rôles que le membre peut accorder ou révoquer.
Par exemple, l'expression de condition suivante limite le membre à accorder et à révoquer les rôles d'Editor Pub/Sub (
roles/pubsub.editor
) et de Publisher Pub/Sub (roles/pubsub.publisher
) :api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])
Avertissement : N'incluez pas les types de rôles suivants dans la liste des rôles autorisés :
-
Rôles disposant d'autorisations pour accorder et révoquer les rôles IAM (c'est-à-dire, les rôles avec des noms d'autorisation se terminant par
setIamPolicy
) -
Rôles personnalisés que l'administrateur IAM limité peut modifier. Par exemple, si l'administrateur IAM limité dispose également du rôle d'administrateur de rôle (
roles/iam.roleAdmin
) sur un projet, ne l'autorisez pas à accorder ou à révoquer les rôles personnalisés au niveau du projet.
Les administrateurs IAM limités qui peuvent accorder et révoquer ces types de rôles peuvent s'autoriser à accorder et à révoquer tous les rôles IAM. Pour en savoir plus, consultez la section Écrire une expression de condition pour limiter l'attribution de rôles.
-
Rôles disposant d'autorisations pour accorder et révoquer les rôles IAM (c'est-à-dire, les rôles avec des noms d'autorisation se terminant par
Cliquez sur Enregistrer pour appliquer la condition.
Une fois le panneau Modifier la condition fermé, cliquez sur Enregistrer dans le panneau Modifier les autorisations pour mettre à jour votre stratégie IAM.
gcloud
Les stratégies Cloud IAM sont définies à l'aide du modèle lecture-modification-écriture.
Consultez la stratégie Cloud IAM associée à la ressource :
Exécutez la commande
get-iam-policy
. Cette commande obtient la stratégie IAM actuelle de la ressource.Commande :
gcloud resource-type get-iam-policy resource-id --format=json > path
Remplacez les valeurs suivantes :
resource-type
: type de ressource pour lequel un membre peut accorder ou révoquer des rôles. Utilisez l'un des éléments suivants :projects
,folders
ouorganizations
.resource-id
: votre projet, dossier ou ID Google Cloudpath
: chemin d'accès au fichier vers lequel télécharger la stratégie IAM
La stratégie IAM est enregistrée au format JSON, par exemple :
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" } ], "etag": "BwWKmjvelug=", "version": 1 }
Modifiez ensuite la stratégie.
Pour permettre à un membre de ne modifier que les liaisons de certains rôles, ajoutez la liaison de rôle conditionnelle en surbrillance :
{ "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "member" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ], "etag": "BwWKmjvelug=", "version": 3 }
Remplacez les valeurs suivantes :
member
: membre qui permet d'accorder ou de révoquer certains rôles. Exemple :user:my-user@example.com
Pour connaître les formats de chaque type de membre, consultez la documentation de référence surBinding
.role
: rôle que vous avez choisi lors des étapes précédentes. Ce rôle doit inclure l'autorisationsetIamPolicy
pour le type de ressource que vous avez choisi.title
: chaîne décrivant brièvement la condition. Exemple :only_pubsub_roles
description
: facultatif. Une description supplémentaire de la condition. Exemple :Only allows granting/revoking the Pub/Sub editor and publisher roles
expression
: expression que vous avez écrite dans la section Écrire une expression de condition pour limiter l'attribution de rôles. Cette expression limite les rôles que le membre peut accorder ou révoquer.Par exemple, l'expression de condition suivante limite le membre à accorder et à révoquer les rôles d'Editor Pub/Sub (
roles/pubsub.editor
) et de Publisher Pub/Sub (roles/pubsub.publisher
) :api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])
Avertissement : N'incluez pas les types de rôles suivants dans la liste des rôles autorisés :
-
Rôles disposant d'autorisations pour accorder et révoquer les rôles IAM (c'est-à-dire, les rôles avec des noms d'autorisation se terminant par
setIamPolicy
) -
Rôles personnalisés que l'administrateur IAM limité peut modifier. Par exemple, si l'administrateur IAM limité dispose également du rôle d'administrateur de rôle (
roles/iam.roleAdmin
) sur un projet, ne l'autorisez pas à accorder ou à révoquer les rôles personnalisés au niveau du projet.
Les administrateurs IAM limités qui peuvent accorder et révoquer ces types de rôles peuvent s'autoriser à accorder et à révoquer tous les rôles IAM. Pour en savoir plus, consultez la section Écrire une expression de condition pour limiter l'attribution de rôles.
-
Rôles disposant d'autorisations pour accorder et révoquer les rôles IAM (c'est-à-dire, les rôles avec des noms d'autorisation se terminant par
Enfin, écrivez la stratégie mise à jour :
Définissez la nouvelle règle en exécutant la commande
set-iam-policy
pour la ressource :gcloud resource-type set-iam-policy resource-id path
Remplacez les valeurs suivantes :
resource-type
: type de ressource pour lequel un membre peut accorder ou révoquer des rôles. Utilisez l'un des éléments suivants :projects
,folders
ouorganizations
.resource-id
: votre projet, dossier ou ID Google Cloudpath
: chemin d'accès au fichier contenant la stratégie mise à jour
La nouvelle stratégie est appliquée et le membre ne peut modifier les liaisons que pour les rôles que vous avez autorisés.
REST
Les stratégies Cloud IAM sont définies à l'aide du modèle lecture-modification-écriture.
Consultez la stratégie Cloud IAM associée à la ressource :
La méthode
getIamPolicy
de l'API Resource Manager permet d'obtenir la stratégie IAM d'un projet, d'un dossier ou d'une organisation.Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
api-version
: version de l'API à utiliser. Pour les projets et les organisations, utilisezv1
. Pour les dossiers, utilisezv2
.resource-type
: type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeurprojects
,folders
ouorganizations
.resource-id
: ID du projet, de l'organisation ou du dossier Google Cloud.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/api-version/resource-type/resource-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:owner@example.com" ] } ] }
Modifiez ensuite la stratégie.
Ajoutez une liaison de rôle conditionnelle permettant à un membre d'accorder et de révoquer uniquement certains rôles. Veillez à remplacer la valeur du champ
version
par la valeur3
:{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "member" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ] }
member
: membre qui permet d'accorder ou de révoquer certains rôles. Exemple :user:my-user@example.com
Pour connaître les formats de chaque type de membre, consultez la documentation de référence surBinding
.role
: rôle que vous avez choisi lors des étapes précédentes. Ce rôle doit inclure l'autorisationsetIamPolicy
pour le type de ressource que vous avez choisi.title
: chaîne décrivant brièvement la condition. Exemple :only_pubsub_roles
description
: facultatif. Une description supplémentaire de la condition. Exemple :Only allows granting/revoking the Pub/Sub editor and publisher roles
expression
: expression que vous avez écrite dans la section Écrire une expression de condition pour limiter l'attribution de rôles. Cette expression limite les rôles que le membre peut accorder ou révoquer.Par exemple, l'expression de condition suivante limite le membre à accorder et à révoquer les rôles d'Editor Pub/Sub (
roles/pubsub.editor
) et de Publisher Pub/Sub (roles/pubsub.publisher
) :api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])
Avertissement : N'incluez pas les types de rôles suivants dans la liste des rôles autorisés :
-
Rôles disposant d'autorisations pour accorder et révoquer les rôles IAM (c'est-à-dire, les rôles avec des noms d'autorisation se terminant par
setIamPolicy
) -
Rôles personnalisés que l'administrateur IAM limité peut modifier. Par exemple, si l'administrateur IAM limité dispose également du rôle d'administrateur de rôle (
roles/iam.roleAdmin
) sur un projet, ne l'autorisez pas à accorder ou à révoquer les rôles personnalisés au niveau du projet.
Les administrateurs IAM limités qui peuvent accorder et révoquer ces types de rôles peuvent s'autoriser à accorder et à révoquer tous les rôles IAM. Pour en savoir plus, consultez la section Écrire une expression de condition pour limiter l'attribution de rôles.
-
Rôles disposant d'autorisations pour accorder et révoquer les rôles IAM (c'est-à-dire, les rôles avec des noms d'autorisation se terminant par
Enfin, écrivez la stratégie mise à jour :
La méthode
setIamPolicy
de l'API Resource Manager définit la stratégie de la requête comme nouvelle stratégie IAM pour le projet, le dossier ou l'organisation.Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
api-version
: version de l'API à utiliser. Pour les projets et les organisations, utilisezv1
. Pour les dossiers, utilisezv2
.resource-type
: type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeurprojects
,folders
ouorganizations
.resource-id
: ID du projet, de l'organisation ou du dossier Google Cloud.-
policy
: représentation JSON de la stratégie que vous souhaitez définir. Pour en savoir plus sur le format d'une stratégie, consultez la documentation de référence sur les stratégies.Par exemple, pour définir la stratégie présentée à l'étape précédente, remplacez
policy
par ce qui suit :{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "member" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ] }
Méthode HTTP et URL :
POST https://iam.googleapis.com/api-version/resource-type/resource-id:setIamPolicy
Corps JSON de la requête :
{ "policy": policy }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse contient la stratégie mise à jour.
Étape suivante
- Appliquez le principe du moindre privilège avec l'outil de recommandation IAM.
- Découvrez comment utiliser les conditions IAM pour configurer l'accès temporaire et configurer un accès basé sur les ressources.