Configurer l'accès à un récepteur: Cloud Storage

Le service de transfert de stockage peut utiliser un bucket de destination (récepteur) Cloud Storage dans deux types de transferts :

  • Transferts sans agent : transferts de cloud à cloud, par exemple d'AWS S3, d'Azure Blob Storage ou de Cloud Storage vers Cloud Storage. Les autorisations sont accordées à l'agent de service du service de transfert de stockage.

  • Transferts basés sur un agent : transferts depuis des systèmes de fichiers, HDFS ou un stockage compatible S3 vers Cloud Storage à l'aide d'agents de transfert et de pools d'agents. Les autorisations doivent être accordées à la fois à l'agent de service et au compte de l'agent de transfert.

Accorder automatiquement des autorisations dans la console Google Cloud

Si vous utilisez la console Google Cloud pour créer un transfert sans agent et que vous disposez des autorisations utilisateur requises, l'agent de service se voit automatiquement attribuer les autorisations requises sur votre bucket de destination.

Vous pouvez ignorer les étapes décrites sur cette page. Si nécessaire, configurez l'accès à votre source, puis créez un transfert.

Prérequis

  • Autorisations du compte utilisateur : pour accorder les rôles IAM requis listés sur cette page, votre compte utilisateur (ou compte de service géré par l'utilisateur) doit disposer des autorisations nécessaires pour modifier les stratégies IAM sur votre bucket de destination et votre projet de pool d'agents. Pour en savoir plus sur les exigences liées aux comptes utilisateur, consultez Autorisations des comptes utilisateur.

  • Autorisations de projet pour les transferts basés sur un agent : pour les transferts basés sur un agent, assurez-vous d'avoir configuré les rôles requis au niveau du projet pour votre agent de service et votre compte d'agent de transfert. Consultez Autorisations au niveau du projet basées sur l'agent.

Rechercher l'adresse e-mail de l'agent de service

L'agent de service est créé automatiquement la première fois que vous créez un job de transfert, que vous exécutez des commandes de configuration gcloud transfer, que vous accédez à la page Transfert de stockage dans la consoleGoogle Cloud ou que vous appelez googleServiceAccounts.get.

Pour obtenir l'adresse e-mail de l'agent de service, qui permet de l'identifier dans les commandes du service de transfert de stockage :

  1. Accédez à la page de référence googleServiceAccounts.get. Un panneau interactif s'affiche, intitulé Essayer cette méthode.
  2. Dans le panneau, sous Paramètres des requêtes, saisissez votre ID de projet.
  3. Cliquez sur Exécuter.

Copiez la valeur de accountEmail. Il utilise le format suivant : project-PROJECT_NUMBER@storage-transfer-service..

Accorder les autorisations requises

Sélectionnez votre type de transfert pour afficher la procédure d'octroi d'accès.

Transfert sans agent

Les rôles prédéfinis suivants accordent ensemble les autorisations requises sur le bucket de destination à l'agent de service :

  • Lecteur des anciens buckets Storage (roles/storage.legacyBucketReader)
  • Utilisateur d'objets Storage (roles/storage.objectUser) ou Administrateur des objets Storage (roles/storage.objectAdmin) si vous conservez les LCA d'objets (ACL_PRESERVE).

Ajoutez l'agent de service à la stratégie IAM du bucket de destination :

Console

  1. Dans la console Google Cloud , accédez à la page Buckets de Cloud Storage.

    Accéder à la page "Buckets"

  2. Cliquez sur le menu à développer () du bucket de destination.
  3. Sélectionnez Modifier les autorisations.
  4. Cliquez sur + Ajouter un compte principal.
  5. Dans Nouveaux comptes principaux, saisissez l'adresse e-mail de votre agent de service.
  6. Sélectionnez Storage Legacy Bucket Reader dans le menu déroulant Sélectionner un rôle.
  7. Cliquez sur Ajouter un autre rôle, puis sélectionnez Storage Object User ou Storage Object Admin si vous conservez les LCA des objets.
  8. Cliquez sur Enregistrer.

gcloud

Exécutez les commandes gcloud storage suivantes :

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader

Remplacez :

  • BUCKET_NAME : nom de votre bucket de destination.
  • SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
  • OBJECT_ROLE : spécifiez objectUser par défaut ou objectAdmin si vous conservez les LCA des objets (ACL_PRESERVE).

API REST

  1. Générez un jeton d'accès pour authentifier votre requête. Si vous utilisez la CLI gcloud, exécutez la commande suivante :

    gcloud auth print-access-token
  2. Récupérez la stratégie IAM du bucket existant (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), ajoutez les liaisons suivantes à son tableau bindings et enregistrez la stratégie fusionnée sous le nom sink_policy.json :

    {
    "bindings": [
      {
        "role": "roles/storage.OBJECT_ROLE",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      },
      {
        "role": "roles/storage.legacyBucketReader",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      }
    ]
    }

    Remplacez :

  3. Envoyez une requête PUT à l'aide de curl :

    curl -X PUT --data-binary @sink_policy.json \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Type: application/json" \
      "https://storage./storage/v1/b/BUCKET_NAME/iam"

    Remplacez :

    • OAUTH2_TOKEN : jeton d'accès OAuth 2.0 généré à l'étape 1.
    • BUCKET_NAME : nom de votre bucket de destination.

Transfert basé sur un agent

Les rôles prédéfinis suivants accordent à l'agent de service l'accès requis au bucket de destination :

  • Créateur d'objets Storage (roles/storage.objectCreator)
  • Lecteur d'objets de l'espace de stockage (roles/storage.objectViewer)
  • Lecteur des anciens buckets Storage (roles/storage.legacyBucketReader)

Le rôle suivant accorde l'accès requis au bucket de destination au compte de l'agent de transfert :

  • Utilisateur d'objets Storage (roles/storage.objectUser)

Attribuez ces rôles sur le bucket de destination.

Console

  1. Dans la console Google Cloud , accédez à la page Buckets de Cloud Storage.

    Accéder à la page "Buckets"

  2. Cliquez sur le menu déroulant Bucket () du bucket de destination, puis sélectionnez Modifier l'accès.
  3. Cliquez sur + Ajouter un compte principal.
  4. Dans Nouveaux comptes principaux, saisissez l'adresse e-mail de votre agent de service.
  5. Sélectionnez Storage Object Creator, Storage Object Viewer et Storage Legacy Bucket Reader dans le menu déroulant Sélectionner un rôle.
  6. Cliquez à nouveau sur + Ajouter un compte principal.
  7. Saisissez l'adresse e-mail de votre compte d'agent de transfert. Il s'agit de l'utilisateur ou du compte de service utilisé lors de l'installation des agents de transfert. Par exemple, my-agent-sa@PROJECT_ID. ou user@example.com.
  8. Sélectionnez Storage Object User dans le menu déroulant Sélectionner un rôle.
  9. Cliquez sur Enregistrer.

gcloud

  1. Attribuez les rôles de journalisation et de lecteur à l'agent de service :

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewer
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
  2. Attribuez des rôles d'écriture et de gestion au compte de l'agent de transfert :

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.objectUser

    Remplacez :

    • BUCKET_NAME : nom de votre bucket de destination.
    • SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
    • serviceAccount_OR_user : spécifiez serviceAccount si votre compte d'agent de transfert est un compte de service, ou user si vos agents ont été installés avec un compte utilisateur.
    • TRANSFER_AGENT_ACCOUNT : adresse e-mail du compte qui a installé vos agents de transfert. Par exemple, my-agent-sa@PROJECT_ID. ou user@example.com.

API REST

  1. Générez un jeton d'accès pour authentifier votre requête. Si vous utilisez la CLI gcloud, exécutez la commande suivante :

    gcloud auth print-access-token
  2. Récupérez la stratégie IAM du bucket existant (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), ajoutez les liaisons suivantes à son tableau bindings et enregistrez la stratégie fusionnée sous le nom agent_sink_policy.json :

    {
      "bindings": [
        {
          "role": "roles/storage.objectCreator",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectViewer",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.legacyBucketReader",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectUser",
          "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"]
        }
      ]
    }

    Remplacez :

    • SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
    • serviceAccount_OR_user : spécifiez serviceAccount si votre compte d'agent de transfert est un compte de service, ou user si vos agents ont été installés avec un compte utilisateur.
    • TRANSFER_AGENT_ACCOUNT : adresse e-mail du compte qui a installé vos agents de transfert. Par exemple, my-agent-sa@PROJECT_ID. ou user@example.com.
  3. Mettez à jour la stratégie du bucket via curl :

    curl -X PUT --data-binary @agent_sink_policy.json \
        -H "Authorization: Bearer OAUTH2_TOKEN" \
        -H "Content-Type: application/json" \
        "https://storage./storage/v1/b/BUCKET_NAME/iam"

    Remplacez :

    • OAUTH2_TOKEN : jeton d'accès OAuth 2.0 généré à l'étape 1.
    • BUCKET_NAME : nom de votre bucket de destination.

Documentation de référence sur les autorisations précises

Sélectionnez votre type de transfert pour afficher les rôles et autorisations requis.

Transfert sans agent

Pour les transferts sans agent, les autorisations doivent être accordées à l'agent de service du service de transfert de stockage :

Autorisation Description
storage.buckets.get Permet à l'agent de service d'inspecter les métadonnées et l'emplacement du bucket.
storage.objects.create Permet à l'agent de service d'écrire les objets transférés dans le bucket de destination.
storage.objects.get Permet d'afficher les objets et les métadonnées existants. Obligatoire si votre transfert est configuré pour écraser les objets dans le récepteur s'ils sont différents ou jamais.
storage.objects.list Permet de lister les objets dans le bucket de destination. Obligatoire si vous vérifiez si des objets existent déjà dans le récepteur.
storage.objects.delete Permet de supprimer des objets dans le bucket de destination. Obligatoire si les options d'écrasement ou de suppression d'objets uniques sont activées.
storage.objects.setIamPolicy Permet de définir des LCA d'objet dans le bucket de destination. Obligatoire si la conservation des LCA d'objets (ACL_PRESERVE) est activée.
storage.folders.create
storage.folders.get
Permet de créer et de lire des dossiers. Obligatoire lors du transfert vers un bucket de destination avec l'espace de noms hiérarchique activé.

Transfert basé sur un agent

Pour les transferts basés sur un agent vers une destination Cloud Storage, les autorisations sont réparties entre deux comptes principaux :

  • Agent de service : nécessite des autorisations pour écrire des journaux de transfert et vérifier l'existence d'objets dans le bucket de destination.

  • Compte d'agent de transfert : compte de service ou compte utilisateur exécutant les agents de transfert qui écrivent des fichiers dans Cloud Storage.

Autorisations de l'agent de service

Autorisation Description
storage.buckets.get Permet à l'agent de service d'inspecter les métadonnées et l'emplacement du bucket.
storage.objects.create Permet de créer des journaux de transfert dans le bucket.
storage.objects.get Permet de vérifier si des objets ont déjà été transférés.

Autorisations du compte d'agent de transfert

Autorisation Description
storage.objects.create Permet aux agents d'écrire des objets dans le bucket de destination pendant le transfert.
storage.objects.get Permet aux agents de lire les données et les métadonnées d'objets dans le bucket de destination.
storage.objects.list Permet aux agents de lister les objets existants dans le bucket de destination.
storage.objects.delete Obligatoire si le transfert est configuré pour écraser ou supprimer des objets dans le récepteur.
storage.multipartUploads.create
storage.multipartUploads.abort
storage.multipartUploads.listParts
storage.multipartUploads.list
Permet aux agents d'effectuer des importations fractionnées pour les fichiers volumineux. Inclus automatiquement dans roles/storage.objectUser.
storage.folders.create
storage.folders.get
Permet aux agents de créer et de lire des dossiers lors du transfert vers un bucket de destination avec l'espace de noms hiérarchique activé.

Étapes suivantes