Utiliser l'IAM précise de Dataproc

L'IAM précise de Dataproc est une fonctionnalité qui vous permet d'accorder des autorisations au niveau du cluster, des tâches, des opérations, du modèle de workflow ou de la stratégie d'autoscaling.

Exemple : vous pouvez attribuer à un utilisateur un rôle de lecteur de cluster, ce qui lui permet d'afficher un cluster au sein d'un projet. Vous pouvez aussi attribuer à un autre utilisateur un rôle d'éditeur de tâches, ce qui lui permet de mettre à jour, d'annuler, ainsi que de visualiser une tâche. Consultez Commandes SDK activées par IAM précise pour comprendre les commandes Google Cloud CLI spécifiques activées par chaque rôle IAM précis de Dataproc.

Rôles et autorisations de l'IAM précise de Dataproc

L'IAM précise de Dataproc peut définir les rôles et autorisations sur les ressources Dataproc, tels qu'ils sont répertoriés ci-dessous :

Rôles de cluster

Rôle Autorisations
Lecteur dataproc.clusters.get
Éditeur dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
dataproc.clusters.start
dataproc.clusters.stop
Propriétaire dataproc.clusters.get
dataproc.clusters.list
dataproc.clusters.delete
dataproc.clusters.update
dataproc.clusters.use
dataproc.clusters.start
dataproc.clusters.stop
dataproc.clusters.setIamPolicy
dataproc.clusters.getIamPolicy

Rôles de tâche

Rôle Autorisations
Lecteur dataproc.jobs.get
Éditeur dataproc.jobs.get
dataproc.jobs.cancel
dataproc.jobs.delete
dataproc.jobs.update
Propriétaire dataproc.jobs.get
dataproc.jobs.cancel
dataproc.jobs.delete
dataproc.jobs.update
dataproc.jobs.setIamPolicy
dataproc.jobs.getIamPolicy

Rôles d'opération

Rôle Autorisations
Lecteur dataproc.operations.get
Éditeur dataproc.jobs.get
dataproc.operations.cancel
dataproc.operations.delete
Propriétaire dataproc.jobs.get
dataproc.operations.cancel
dataproc.operations.delete
dataproc.operations.setIamPolicy
dataproc.operations.getIamPolicy

Rôles de modèles de flux de travail

Rôle Autorisations
Lecteur dataproc.workflowTemplates.get
Éditeur dataproc.workflowTemplates.get
dataproc.workflowTemplates.delete
dataproc.workflowTemplates.update
Propriétaire dataproc.workflowTemplates.get
dataproc.workflowTemplates.delete
dataproc.workflowTemplates.update
dataproc.workflowTemplates.setIamPolicy
dataproc.workflowTemplates.getIamPolicy

Rôles de stratégie d'autoscaling

Rôle Autorisations
Lecteur dataproc.autoscalingPolicies.get
Éditeur dataproc.autoscalingPolicies.get
dataproc.autoscalingPolicies.use
dataproc.autoscalingPolicies.delete
dataproc.autoscalingPolicies.update
Propriétaire dataproc.autoscalingPolicies.get
dataproc.autoscalingPolicies.use
dataproc.autoscalingPolicies.delete
dataproc.autoscalingPolicies.update
dataproc.autoscalingPolicies.setIamPolicy
dataproc.autoscalingPolicies.getIamPolicy

Utiliser l'IAM précise de Dataproc

Cette section explique comment utiliser l'IAM précise de Dataproc pour attribuer des rôles aux utilisateurs sur une ressource Dataproc existante. Pour en savoir plus sur la mise à jour et la suppression des rôles IAM (Identity and Access Management), consultez la page Accorder, modifier et révoquer les accès.

Commande gcloud

  1. Récupérez la stratégie IAM de la ressource, puis écrivez-la dans un fichier JSON (le champ resource-type peut correspondre à "clusters" ou "tâches" ou "opérations", "workflow-modèles" ou "autoscaling-policies"):
    gcloud dataproc resource-type get-iam-policy  resource-id \
        --region=region \
        --format=json > iam.json
    
  2. Le fichier JSON affiche un contenu identique au texte ci-dessous :
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        }
      ],
      "etag": "string"
    }
    
  3. À l'aide d'un éditeur de texte, ajoutez un nouvel Objet de liaison au tableau de liaisons qui définit les utilisateurs et le rôle d'accès aux ressources de ces derniers. Par exemple, pour accorder le rôle de lecteur (roles/viewer) à l'utilisateur sean@example.com, vous devez modifier l'exemple ci-dessus pour ajouter un objet de liaison (en gras), ci-dessous. Remarque : Assurez-vous de renvoyer la valeur etag que vous avez reçue de gcloud dataproc resource-type get-iam-policy (consultez la documentation etag).
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/viewer",
          "members": [
            "user:sean@example.com"
          ]
        }
      ],
      "etag": "value-from-get-iam-policy"
    }
    
  4. Mettez à jour la stratégie du cluster avec le nouveau tableau de liaisons en exécutant la commande suivante (resource-type peut être "clusters", "tâches" ou "opérations", "workflow-modèles" ou "autoscaling-policies"):
    gcloud dataproc resource-type set-iam-policy resource-name \
        --region=region \
        --format=json iam.json
    
  5. La commande génère la règle mise à jour :
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/viewer",
          "members": [
            "user:sean@example.com"
          ]
        }
      ],
      "etag": "string"
    }
    

API REST

  1. Émettez une requête getIamPolicy resource-type ("clusters" or "jobs" or "operations" or "workflowTemplates" or "autoscalingPolicies") pour obtenir la stratégie IAM de la ressource.

    Exemple de cluster getIamPolicy :

    GET https://dataproc.googleapis.com/v1/projects/projectName/regions/region/clusters/clusterName:getIamPolicy
    
  2. Le fichier JSON affiche un contenu identique au texte ci-dessous :
    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        }
      ],
      "etag": "string"
    }
    
  3. A l'aide d'un éditeur de texte, créez l'objet de stratégie JSON suivant pour inclure le tableau de liaisons que vous venez de recevoir du service Dataproc. Assurez-vous d'indiquer la valeur "etag" que vous avez reçue dans la réponse getIamPolicy (consultez la Documentation sur etag). Ajoutez maintenant un nouvel objet de liaison au tableau de liaisons qui définit les utilisateurs et le rôle d'accès au cluster pour ces derniers. Par exemple, pour accorder le rôle de lecteur (roles/viewer) à l'utilisateur sean@example.com, vous devez modifier l'exemple ci-dessus pour ajouter un objet de liaison (en gras), ci-dessous.
    {
      "policy": {
        "version": "",
        "bindings": [
          {
            "role": "roles/editor",
            "members": [
              "user:mike@example.com",
              "group:admins@example.com",
              "domain:google.com",
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
          },
          {
            "role": "roles/viewer",
            "members": [
              "user:sean@example.com"
            ]
          }
        ],
        "etag": "value-from-getIamPolicy"
      }
    }
    
  4. Définissez la stratégie mise à jour sur la ressource en émettant une requête setIamPolicy.

    Exemple de cluster setIamPolicy :

    POST https://dataproc.googleapis.com/v1/projects/projectName/regions/region/clusters/clusterName:setIamPolicy
    
    Request body
    {
      "policy": {
        "version": "",
        "bindings": [
          {
            "role": "roles/editor",
            "members": [
              "user:mike@example.com",
              "group:admins@example.com",
              "domain:google.com",
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
          },
          {
            "role": "roles/viewer",
            "members": [
              "user:sean@example.com"
            ]
          }
        ],
        "etag": "value-from-getIamPolicy"
      }
    }
    
  5. La réponse JSON affiche un contenu identique au texte ci-dessous :

    Response (Réponse)

    {
      "bindings": [
        {
          "role": "roles/editor",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/viewer",
          "members": [
            "user:sean@example.com"
          ]
        }
      ],
      "etag": "string"
    }
    

Console

Accédez à la page Clusters Dataproc dans la console Google Cloud, puis cochez la case située à gauche du nom du cluster pour ouvrir le panneau Autorisations/Étiquettes (si ce panneau ne s'affiche pas, cliquez sur AFFICHER LE PANNEAU D'INFORMATIONS en haut à droite de la page). Sous l'onglet "Autorisations", sélectionnez le rôle Dataproc, ajoutez une ou plusieurs adresses de compte dans le champ Ajouter des comptes principaux, puis cliquez sur Ajouter.

Commandes SDK activées par l'IAM précise

Les tableaux ci-dessous présentent les commandes gcloud dataproc activées sur les ressources Dataproc pour chaque rôle IAM précise.

Clusters

Rôle IAM Commande
Lecteur gcloud dataproc clusters describe cluster-name
Éditeur gcloud dataproc clusters describe cluster-name
gcloud dataproc clusters list
gcloud dataproc clusters delete cluster-name
gcloud dataproc clusters diagnose cluster-name
gcloud dataproc clusters update cluster-name
gcloud beta dataproc clusters start cluster-name
gcloud beta dataproc clusters stop cluster-name
Propriétaire gcloud dataproc clusters describe cluster-name
gcloud dataproc clusters list
gcloud dataproc clusters delete cluster-name
gcloud dataproc clusters diagnose cluster-name
gcloud dataproc clusters update cluster-name
gcloud beta dataproc clusters start cluster-name
gcloud beta dataproc clusters stop cluster-name
gcloud dataproc clusters get-iam-policy cluster-name
gcloud dataproc clusters set-iam-policy cluster-name

Tâches

Rôle IAM Commande
Lecteur gcloud dataproc jobs describe job-id
Éditeur gcloud dataproc jobs delete job-id
gcloud dataproc jobs describe job-id
gcloud dataproc jobs kill job-id
gcloud dataproc jobs update job-id
gcloud dataproc jobs wait job-id
Propriétaire gcloud dataproc jobs delete job-id
gcloud dataproc jobs describe job-id
gcloud dataproc jobs kill job-id
gcloud dataproc jobs update job-id
gcloud dataproc jobs wait job-id
gcloud dataproc jobs get-iam-policy job-id
gcloud dataproc jobs set-iam-policy job-id

Opérations

Rôle IAM Commande
Lecteur gcloud dataproc operations describe operation-id
Éditeur gcloud dataproc operations delete operation-id
gcloud dataproc operations describe operation-id
gcloud dataproc operations cancel operation-id
Propriétaire gcloud dataproc operations delete operation-id
gcloud dataproc operations describe operation-id
gcloud dataproc operations cancel operation-id
gcloud dataproc operations get-iam-policy operation-id
gcloud dataproc operations set-iam-policy operation-id

Modèles de processus

Rôle IAM Commande
Lecteur gcloud dataproc workflow-templates describe template-id
Éditeur gcloud dataproc workflow-templates delete template-id
gcloud dataproc workflow-templates describe template-id
gcloud dataproc workflow-templates remove-job template-id
gcloud dataproc workflow-templates run template-id
Propriétaire gcloud dataproc workflow-templates delete template-id
gcloud dataproc workflow-templates describe template-id
gcloud dataproc workflow-templates remove-job template-id
gcloud dataproc workflow-templates run template-id
gcloud dataproc workflow-templates get-iam-policy template-id
gcloud dataproc workflow-templates set-iam-policy template-id

Stratégies d'autoscaling

Rôle IAM Commande
Lecteur gcloud dataproc autoscaling-policies describe policy-id
Éditeur gcloud dataproc autoscaling-policies delete policy-id
gcloud dataproc autoscaling-policies describe policy-id
gcloud dataproc autoscaling-policies update policy-id
gcloud dataproc clusters create cluster-name --autoscaling-policy policy-id
Propriétaire gcloud dataproc autoscaling-policies delete policy-id
gcloud dataproc autoscaling-policies describe policy-id
gcloud dataproc autoscaling-policies update policy-id
gcloud dataproc clusters create cluster-name --autoscaling-policy policy-id
gcloud dataproc autoscaling-policies get-iam-policy policy-id
gcloud dataproc autoscaling-policies set-iam-policy policy-id

Soumettre des tâches avec l'IAM précise

Pour permettre à un compte principal (utilisateur, groupe ou compte de service) d'envoyer des tâches à un cluster donné à l'aide de l'IAM précise de Dataproc, il est non seulement nécessaire d'accorder à l'utilisateur le rôle d'éditeur sur le cluster, mais aussi de définir des autorisations supplémentaires au niveau du projet. Voici les étapes à suivre pour permettre à un compte principal d'envoyer des tâches sur un cluster Dataproc donné :

  1. Créez un bucket Cloud Storage que votre cluster peut utiliser pour se connecter à Cloud Storage.
  2. Ajoutez le compte principal à la stratégie au niveau du bucket, en sélectionnant le rôle Lecteur des objets Storage (voir roles/storage.objectViewer), qui inclut les autorisations suivantes :
    1. storage.objects.get
    2. storage.objects.list
  3. Lorsque vous créez le cluster, transmettez le nom du bucket que vous venez de créer à l'aide du paramètre --bucket (consultez la section gcloud dataproc clusters create --bucket).
  4. Une fois le cluster créé, définissez une stratégie qui attribue au compte principal un rôle d'éditeur ou de propriétaire (consultez la section Utiliser l'IAM précise de Dataproc).
  5. Créez un rôle personnalisé IAM avec les autorisations suivantes :
    1. dataproc.jobs.create
    2. dataproc.jobs.get
  6. Sélectionnez ou ajoutez le compte principal sur la page IAM de la console Google Cloud, puis sélectionnez le rôle personnalisé à appliquer au compte principal.