Contrôle d'accès pour les organisations utilisant IAM

Google Cloud Platform offre Cloud Identity and Access Management (IAM), qui vous permet de définir de manière plus précise l'accès à des ressources spécifiques de Google Cloud Platform et d'empêcher tout accès indésirable à d'autres ressources. IAM vous permet d'adopter le principe de sécurité du moindre privilège afin de n'accorder que l'accès nécessaire à vos ressources.

Grâce à l'IAM, vous pouvez contrôler qui (utilisateurs) a accès (rôles) à quelles ressources en définissant des stratégies IAM. Ces stratégies permettent d'attribuer un ou plusieurs rôles spécifiques à un utilisateur afin de lui accorder certaines autorisations.

Cette page décrit les rôles IAM (Identity and Access Management) disponibles au niveau de l'organisation et explique comment créer et gérer des stratégies IAM applicables aux organisations à l'aide de l'API Resource Manager. Pour obtenir une description détaillée de Cloud Identity and Access Management, consultez la documentation IAM, en particulier la section Attribuer, modifier et révoquer les accès.

Autorisations et rôles

Avec Cloud Identity and Access Management, toutes les méthodes de Google Cloud Platform requièrent que le compte effectuant la requête API dispose des autorisations appropriées pour accéder à la ressource. Les autorisations permettent aux utilisateurs de réaliser des opérations spécifiques sur les ressources cloud. Par exemple, l'autorisation resourcemanager.organizations.list permet à un utilisateur de répertorier ses organisations, tandis que resourcemanager.organizations.update lui permet de mettre à jour les métadonnées d'une organisation.

Le tableau suivant répertorie les autorisations dont l'appelant doit disposer pour appeler chaque méthode d'organisation :

Méthode Autorisations requises
cloudresourcemanager.organizations.get() resourcemanager.organizations.get.
cloudresourcemanager.organizations.search() Affiche toutes les organisations pour lesquelles l'utilisateur dispose de l'autorisation resourcemanager.organizations.get.
cloudresourcemanager.organizations.getIamPolicy() resourcemanager.organizations.getIamPolicy
cloudresourcemanager.organizations.setIamPolicy() resourcemanager.organizations.setIamPolicy
cloudresourcemanager.organizations.testIamPermissions() Ne nécessite aucune autorisation.

Vous n'accordez pas directement des autorisations aux utilisateurs, mais vous leur attribuez des rôles auxquels sont associées une ou plusieurs autorisations.

Vous pouvez attribuer un ou plusieurs rôles sur la même ressource.

Utiliser des rôles prédéfinis

Le tableau suivant répertorie les rôles que vous pouvez attribuer pour accéder aux propriétés d'une organisation, la description de ces rôles et les autorisations qu'ils procurent.

Rôle Description Autorisations
roles/
resourcemanager.organizationAdmin
Accès pour administrer toutes les ressources appartenant à l'organisation Par défaut, ce rôle n'inclut pas de privilèges pour la facturation ou l'administration des rôles dans l'organisation.
  • orgpolicy.policy.get
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.organizations.get
  • resourcemanager.organizations.getIamPolicy
  • resourcemanager.organizations.setIamPolicy
  • resourcemanager.organizations.update
  • resourcemanager.projectInvites.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list
  • resourcemanager.projects.setIamPolicy
roles/
resourcemanager.organizationViewer
Accès pour consulter le nom à afficher de l'organisation. L'attribution de ce rôle à un utilisateur lui permettra de voir l'organisation dans Cloud Console sans avoir accès à toutes les ressources de l'organisation.
  • resourcemanager.organizations.get
roles/
browser
Accès pour parcourir les ressources dans une organisation.
  • resourcemanager.folders.get
  • resourcemanager.folders.list
  • resourcemanager.organizations.get
  • resourcemanager.projectInvites.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list

Créer des rôles personnalisés

En plus des rôles prédéfinis décrits dans cette rubrique, vous pouvez créer des rôles personnalisés regroupant des autorisations adaptées à vos besoins. Lorsque vous créez un rôle personnalisé à utiliser avec Cloud Resource Manager, vous devez tenir compte des points suivants :
  • Les autorisations de type obtenir/répertorier, telles que resourcemanager.projects.get/list, doivent toujours être accordées en tant que paire.
  • Lorsque le rôle personnalisé inclut les autorisations folders.list et folders.get, il doit également inclure projects.list et projects.get.
  • Notez que l'autorisation setIamPolicy pour les organisations, les dossiers et les projets permet à l'utilisateur d'accorder toutes les autres autorisations, et doit donc être attribuée avec précaution.

Afficher les accès existants pour une organisation

Vous pouvez afficher les rôles attribués à un utilisateur pour une organisation donnée en obtenant la stratégie IAM au niveau de l'organisation. Vous pouvez consulter la stratégie d'une organisation à l'aide de la console Cloud Platform, de l'outil de ligne de commande gcloud ou de la méthode getIamPolicy().

Console

Pour afficher les rôles attribués au niveau de l'organisation à l'aide de la console Google Cloud Platform :

  1. Accédez à la page Gérer les ressources dans la console GCP :

    Ouvrir la page "Gérer les ressources"

  2. Dans la liste déroulante Organisation, sélectionnez votre organisation.

  3. Cochez la case correspondant à la ressource Organisation.

  4. Dans le Panneau d'informations situé à droite, sous Autorisations, cliquez pour développer un rôle et afficher tous les membres qui disposent de ce rôle.

gcloud

Obtenez la stratégie IAM de l'organisation à l'aide de la commande get-iam-policy :

gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]

La commande génère la stratégie, qui sera semblable à ce qui suit :

bindings:
- members:
  - user:testuser1@gcp-test.com
  role: roles/editor
- members:
  - user:admin@gcp-test.com
  role:roles/resourcemanager.organizationAdmin
- members:
  - user:testuser2@gcp-test.com
  role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="

API

L'extrait de code suivant renvoie la stratégie définie pour la ressource Organisation https://cloudresourcemanager.googleapis.com/v1/organizations/12345.

Requête :

POST
https://cloudresourcemanager.googleapis.com/v1/organizations/12345:getIamPolicy

Réponse :

 {
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
        "user:email1@gmail.com"
    ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:email2@gmail.com",
            "user:email3@gmail.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
}

Python

La méthode getIamPolicy() vous permet d'obtenir une stratégie précédemment définie.

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
    resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)

...

Accorder l'accès à une organisation

Les administrateurs d'organisation peuvent autoriser les membres de l'équipe à accéder aux ressources et aux API d'une organisation donnée en leur attribuant des rôles IAM. Vous pouvez attribuer un rôle à un membre de l'équipe à l'aide de la console Cloud Platform, de l'outil gcloud ou de la méthode setIamPolicy().

Console

Pour définir le contrôle d'accès au niveau de l'organisation à l'aide de la console Google Cloud Platform :

  1. Accédez à la page Gérer les ressources dans la console GCP :

    Ouvrir la page "Gérer les ressources"

  2. Dans la liste déroulante Organisation, sélectionnez votre organisation.

  3. Cochez la case correspondant à la ressource Organisation. Si vous n'avez pas de ressource Dossier, la ressource Organisation ne sera pas visible. Pour continuer, consultez les instructions pour l'attribution de rôles sur la page Cloud IAM.

  4. Si le panneau d'informations de droite est masqué, sélectionnez le bouton Afficher le panneau d'informations en haut à droite.

  5. Dans le Panneau d'informations situé à droite, sous Autorisations, saisissez les adresses e-mail des membres que vous souhaitez ajouter.

  6. Dans la liste déroulante Sélectionner un rôle, sélectionnez le rôle que vous souhaitez attribuer à cet utilisateur.

  7. Cliquez sur Ajouter. Une boîte de dialogue s'affiche pour confirmer l'ajout ou la mise à jour du nouveau rôle du membre.

gcloud

Pour définir la stratégie IAM d'une organisation à l'aide de la commande gcloud :

  1. Obtenez la stratégie IAM pour l'organisation à l'aide de la commande get-iam-policy et exportez-la dans un fichier JSON :

    gcloud alpha organizations get-iam-policy [ORGANIZATION_ID]
    --format json > [FILENAME.JSON]
    
  2. Le fichier JSON affiche un contenu similaire au texte ci-dessous :

    {
        "bindings": [
        {
            "members": [
                "user:testuser1@gcp-test.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
                "user:admin@gcp-test.com",
            ],
            "role": "roles/resourcemanager.organizationAdmin"
        },
        {
            "members": [
                "user:testuser2@gcp-test.com"
            ],
            "role": "roles/resourcemanager.projectCreator"
        },
        ],
        "etag": "BwU1aRxWk30="
    }
    
  3. À l'aide d'un éditeur de texte, ouvrez le fichier JSON et ajoutez une nouvelle entrée au tableau de liaisons définissant l'administrateur de l'organisation. Par exemple, pour attribuer le rôle d'administrateur d'organisation à l'adresse anotheradmin@gcp-test.com, vous devez modifier l'exemple ci-dessus comme suit :

    {
        "bindings": [
        {
            "members": [
                "user:testuser1@gcp-test.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
                "user:admin@gcp-test.com",
                "user:anotheradmin@gcp-test.com"
            ],
            "role": "roles/resourcemanager.organizationAdmin"
        },
        {
            "members": [
                "user:testuser20@gcp-test.com"
            ],
            "role": "roles/resourcemanager.projectCreator"
        },
        ],
        "etag": "BwU1aRxWk30="
    }
    
  4. Mettez à jour la stratégie de l'organisation en exécutant la commande suivante :

    gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
    

API

Requête :

POST https://cloudresourcemanager.googleapis.com/v1/organizations/12345:setIamPolicy
{
    "policy": {
    "version": "0",
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:email1@gmail.com"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
        "user:email2@gmail.com",
        "user:email3@gmail.com",
        "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
    }
}

Réponse :

{
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:email1@gmail.com"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:email2@gmail.com",
            "user:email3@gmail.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKJUiQ="
}

La méthode setIamPolicy() vous permet d'attribuer des rôles aux utilisateurs en associant une stratégie Cloud IAM à l'organisation. La stratégie Cloud IAM est un ensemble d’énoncés qui définissent qui a accès à quoi.

Lecture-modification-écriture : un modèle courant de mise à jour des métadonnées d'une ressource, comme une stratégie, consiste à lire son état actuel, à mettre à jour les données localement, puis à envoyer les données modifiées en écriture. Ce modèle peut provoquer un conflit si deux processus indépendants ou plus tentent de réaliser la séquence simultanément. Prenons l'exemple de deux propriétaires d'un projet qui tentent d'apporter des modifications conflictuelles à une stratégie en même temps. Dans certains cas, les modifications apportées par l’un des propriétaires du projet pourraient ne pas être appliquées. Cloud Identity and Access Management résout ce problème en utilisant une propriété ETag dans les stratégies Cloud IAM. Cette propriété est utilisée pour vérifier si la stratégie a changé depuis la dernière demande. Quand vous envoyez une requête à Cloud IAM avec une valeur ETag, Cloud IAM compare la valeur ETag de la requête à la valeur ETag existante associée à la stratégie. Il écrit la stratégie uniquement si les valeurs ETag correspondent.

Lorsque vous mettez à jour une stratégie, commencez par obtenir la stratégie à l'aide de getIamPolicy(). Mettez-la à jour, puis écrivez la stratégie mise à jour à l'aide de setIamPolicy(). Utilisez la valeur ETag lorsque vous définissez la stratégie uniquement si la stratégie correspondante dans GetPolicyResponse contient une valeur ETag.

Python

La méthode setIamPolicy() vous permet d'associer une stratégie à une ressource. La méthode setIamPolicy accepte en entrée une requête SetIamPolicyRequest, qui contient une stratégie à définir et la ressource à laquelle cette stratégie doit être associée. Elle renvoie la stratégie qui en résulte. Il est recommandé de suivre le modèle lecture-modification-écriture lors de la mise à jour d'une stratégie à l'aide de setIamPolicy().

Voici un exemple de code permettant de définir une stratégie pour une organisation :

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
    resource=flags.organizationId, body={}).execute()

admin_binding = next(
    (binding
        for binding in policy['bindings']
        if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
        None)

# Add an empty Organization Admin binding if not present.
if not admin_binding:
    admin_binding = {
        'role': 'roles/resourcemanager.organizationAdmin',
        'members': []
    }
policy['bindings'].append(admin_binding)

# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
    admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'policy': policy
    }).execute()

print json.dumps(policy, indent=2)

...

Tester les autorisations

Vous pouvez tester les autorisations Cloud IAM sur un utilisateur pour une organisation avec la méthode testIamPermissions(). Cette méthode utilise l'URL de la ressource et l'ensemble des autorisations que vous souhaitez tester en tant que paramètres d'entrée. Elle renvoie le sous-ensemble de ces autorisations auquel l'utilisateur a accès.

Il n'est généralement pas nécessaire d'invoquer testIamPermission() si la console Cloud Platform est directement utilisée pour gérer les autorisations. testIamPermissions() est destinée à être intégrée à votre logiciel propriétaire, tel qu'une interface utilisateur graphique personnalisée. Par exemple, la console Cloud Platform utilise testIamPermissions() en interne afin de déterminer quelle UI doit être disponible pour l'utilisateur connecté.

API

Vous pouvez utiliser la méthode testIamPermissions() afin de vérifier les autorisations accordées à un appelant pour une ressource donnée. Cette méthode reçoit comme paramètres un nom de ressource et un ensemble d'autorisations, puis renvoie le sous-ensemble d'autorisations dont dispose l'appelant.

Voici un exemple de code permettant de tester les autorisations pour une organisation :

Request:

POST https://cloudresourcemanager.googleapis.com/v1/organization/12345:testIamPermissions

{
    "permissions":  [
        "resourcemanager.organizations.get",
        "resourcemanager.organizations.update"
    ]
}

Response:

{
    "permissions": [
        "resourcemanager.organizations.get"
    ]
}

Python

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', http=creds.authorize(httplib2.Http()))

response = crm.organizations().testIamPermissions(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'permissions': [
            'resourcemanager.organizations.setIamPolicy',
            'resourcemanager.projects.update'
        ]
    }).execute()

print json.dumps(response, indent=2)

...
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation relative à Resource Manager