Configurer l'accès à une source : Cloud Storage

Le service de transfert de stockage peut utiliser un bucket source Cloud Storage dans deux types de transferts :

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

  • Transferts basés sur des agents : transferts impliquant des systèmes de fichiers ou un stockage sur site qui utilisent des agents de transfert et des 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 source.

Vous pouvez ignorer les étapes décrites sur cette page. Si nécessaire, configurez l'accès à votre destination, 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 source 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 les autorisations requises sur le bucket source à l'agent de service :

  • Lecteur des anciens buckets Storage (roles/storage.legacyBucketReader)
  • Plus l'un des éléments suivants :
    • Lecteur des objets Storage (roles/storage.objectViewer) si les objets sources sont conservés.
    • Utilisateur d'objets Storage (roles/storage.objectUser) si vous supprimez les objets sources après le transfert (deleteObjectsFromSourceAfterTransfer).
    • Administrateur des objets Storage (roles/storage.objectAdmin) si vous conservez les LCA des objets (ACL_PRESERVE). Permet également de supprimer les objets sources après le transfert.

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

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 source.
  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 l'une des options suivantes :
    • Storage Object Viewer
    • Storage Object User
    • Storage Object Admin
  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.legacyBucketReader
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE

Remplacez :

  • BUCKET_NAME : nom de votre bucket source.
  • SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
  • OBJECT_ROLE : choisissez l'une des options suivantes en fonction de vos options de transfert :
  • objectViewer : si vous conservez les objets sources.
  • objectUser : si vous supprimez des objets sources après le transfert.
  • objectAdmin : si vous conservez les LCA des objets. Permet également de supprimer les objets sources après le transfert.

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 source_policy.json :

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

    Remplacez :

    • SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
    • OBJECT_ROLE : choisissez objectViewer si vous conservez les objets sources, objectUser si vous les supprimez ou objectAdmin si vous conservez les LCA des objets.
  3. Envoyez une requête PUT à l'aide de curl :

    curl -X PUT --data-binary @source_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 source.

Transfert basé sur un agent

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

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

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

  • Lecteur des objets Storage (roles/storage.objectViewer) si vous conservez les objets sources, ou Utilisateur d'objets Storage (roles/storage.objectUser) si vous supprimez les objets sources après le transfert.

Attribuez ces rôles sur le bucket source.

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 Bucket () du bucket source, 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 Legacy Bucket Reader et Storage Object Creator dans les menus déroulants 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 Viewer si vous conservez les objets sources ou Storage Object User si vous les supprimez après le transfert.
  9. Cliquez sur Enregistrer.

gcloud

  1. Attribuez à l'agent de service les rôles de lecture des métadonnées du bucket et d'écriture des journaux de transfert :

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
  2. Attribuez des rôles d'accès aux objets 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.OBJECT_ROLE

    Remplacez :

    • BUCKET_NAME : nom de votre bucket source.
    • 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.
    • OBJECT_ROLE : spécifiez objectViewer si vous conservez les objets sources ou objectUser si vous les supprimez après le transfert.

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_source_policy.json :

    {
      "bindings": [
        {
          "role": "roles/storage.legacyBucketReader",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectCreator",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.OBJECT_ROLE",
          "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.
    • OBJECT_ROLE : spécifiez objectViewer si vous conservez les objets sources ou objectUser si vous les supprimez après le transfert.
  3. Mettez à jour la stratégie du bucket via curl :

    curl -X PUT --data-binary @agent_source_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 source.

Transferts Cloud Storage multiprojets

Pour transférer des objets entre des buckets Cloud Storage situés dans différents projets Google Cloud, vous devez accorder des autorisations à l'agent de service du projet qui crée le transfert sur le bucket source et le bucket de destination.

Le compte utilisateur ou le compte de service géré par l'utilisateur qui crée le transfert n'a besoin que d'autorisations sur le projet à partir duquel le job de transfert est créé.

Pour accorder des rôles pour les transferts multiprojets :

  1. Obtenez l'adresse e-mail de l'agent de service pour le projet qui exécutera le transfert. Consultez Rechercher l'adresse e-mail de l'agent de service.
  2. Sur le bucket source, attribuez les rôles suivants à cet agent de service :
    • Lecteur des anciens buckets Storage (roles/storage.legacyBucketReader)
    • Plus l'un des rôles d'objet suivants :
      • Lecteur des objets Storage (roles/storage.objectViewer) si vous conservez les objets sources.
      • Utilisateur d'objets Storage (roles/storage.objectUser) si vous supprimez les objets sources après le transfert (deleteObjectsFromSourceAfterTransfer).
      • Administrateur des objets Storage (roles/storage.objectAdmin) si vous conservez les LCA des objets (ACL_PRESERVE). Permet également de supprimer les objets sources après le transfert.
  3. Sur le bucket de destination, attribuez les rôles suivants au même 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).

Pour obtenir des instructions détaillées sur l'octroi de l'accès au bucket de destination, consultez Configurer l'accès à un récepteur : Cloud Storage.

Restrictions sur les organisations

Si votre organisation a appliqué des contraintes de règle d'administration, assurez-vous qu'elles autorisent l'accès de l'agent de service multiprojet :

  • Partage restreint par domaine (constraints/iam.allowedPolicyMemberDomains) : la règle du projet hébergeant le bucket doit autoriser les domaines membres contenant l'agent de service. Consultez Restreindre les domaines.
  • Désactiver l'utilisation des comptes de service multiprojets (constraints/iam.disableCrossProjectServiceAccountUsage) : assurez-vous que cette contrainte ne bloque pas l'accès aux comptes de service multiprojets. Consultez Restreindre les comptes de service.
  • VPC Service Controls : si les buckets appartiennent à des périmètres de service différents, configurez des règles d'entrée et de sortie pour autoriser la communication de transfert. Consultez Configurer VPC Service Controls pour les transferts de stockage d'objets cloud.

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'obtenir l'emplacement du bucket.
storage.objects.list Permet à l'agent de service de répertorier les objets présents dans le bucket.
storage.objects.get Permet à l'agent de service de lire les objets dans le bucket.
storage.objects.delete Permet à l'agent de service de supprimer des objets du bucket. Obligatoire si la valeur de deleteObjectsFromSourceAfterTransfer est true.
storage.objects.getIamPolicy Permet de lire les LCA sur les objets sources. Obligatoire si la conservation des LCA d'objets (ACL_PRESERVE) est activée.
storage.folders.list
storage.folders.get
Permet de lister et de lire les dossiers. Obligatoire lors du transfert depuis un bucket avec l'espace de noms hiérarchique activé.

Transfert basé sur un agent

Pour les transferts basés sur un agent à partir d'une source Cloud Storage, les autorisations sont réparties entre deux comptes principaux :

  • Agent de service : nécessite un accès en lecture au niveau du bucket pour résoudre les métadonnées et l'emplacement du bucket, ainsi qu'un accès en création d'objets pour écrire les journaux de transfert de l'agent.

  • Compte d'agent de transfert : compte de service ou compte utilisateur utilisé pour créer les agents de transfert.

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 à l'agent de service d'écrire les journaux de transfert de l'agent dans le bucket source lors du transfert de Cloud Storage vers un système de fichiers.

Autorisations du compte d'agent de transfert

Autorisation Description
storage.objects.list Permet aux agents de lister les objets du bucket source.
storage.objects.get Permet aux agents de lire les objets du bucket source.
storage.objects.delete Permet aux agents de supprimer des objets sources si deleteObjectsFromSourceAfterTransfer est activé.
storage.folders.list
storage.folders.get
Permet aux agents de lister et de lire les dossiers lors du transfert depuis un bucket avec l'espace de noms hiérarchique activé.

Étapes suivantes

Vous devez configurer l'accès à votre destination :