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 :
- Accédez à la page de référence
googleServiceAccounts.get. Un panneau interactif s'affiche, intitulé Essayer cette méthode. - Dans le panneau, sous Paramètres des requêtes, saisissez votre ID de projet.
- 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
- Dans la console Google Cloud , accédez à la page Buckets de Cloud Storage.
- Cliquez sur le menu à développer () du bucket de destination.
- Sélectionnez Modifier les autorisations.
- Cliquez sur + Ajouter un compte principal.
- Dans Nouveaux comptes principaux, saisissez l'adresse e-mail de votre agent de service.
- Sélectionnez
Storage Legacy Bucket Readerdans le menu déroulant Sélectionner un rôle. - Cliquez sur Ajouter un autre rôle, puis sélectionnez
Storage Object UserouStorage Object Adminsi vous conservez les LCA des objets. - 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
objectUserpar défaut ouobjectAdminsi vous conservez les LCA des objets (ACL_PRESERVE).
API REST
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
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 tableaubindingset enregistrez la stratégie fusionnée sous le nomsink_policy.json:{ "bindings": [ { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
Remplacez :
- SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
- OBJECT_ROLE : spécifiez
objectUserpar défaut ouobjectAdminsi vous conservez les LCA des objets (ACL_PRESERVE).
Envoyez une requête
PUTà l'aide decurl: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
- Dans la console Google Cloud , accédez à la page Buckets de Cloud Storage.
- Cliquez sur le menu déroulant Bucket () du bucket de destination, puis sélectionnez Modifier l'accès.
- Cliquez sur + Ajouter un compte principal.
- Dans Nouveaux comptes principaux, saisissez l'adresse e-mail de votre agent de service.
- Sélectionnez
Storage Object Creator,Storage Object VieweretStorage Legacy Bucket Readerdans le menu déroulant Sélectionner un rôle. - Cliquez à nouveau sur + Ajouter un compte principal.
- 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.ouuser@example.com. - Sélectionnez
Storage Object Userdans le menu déroulant Sélectionner un rôle. - Cliquez sur Enregistrer.
gcloud
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.objectCreatorgcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewergcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReaderAttribuez 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.objectUserRemplacez :
- BUCKET_NAME : nom de votre bucket de destination.
- SERVICE_AGENT_EMAIL : adresse e-mail de l'agent de service.
- serviceAccount_OR_user : spécifiez
serviceAccountsi votre compte d'agent de transfert est un compte de service, ouusersi 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.ouuser@example.com.
API REST
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
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 tableaubindingset enregistrez la stratégie fusionnée sous le nomagent_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
serviceAccountsi votre compte d'agent de transfert est un compte de service, ouusersi 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.ouuser@example.com.
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.createstorage.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.createstorage.multipartUploads.abortstorage.multipartUploads.listPartsstorage.multipartUploads.list |
Permet aux agents d'effectuer des importations fractionnées pour les fichiers volumineux. Inclus automatiquement dans roles/storage.objectUser. |
storage.folders.createstorage.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
- Découvrez comment configurer l'accès à une source.
- Découvrez comment créer des transferts.
- Consultez la documentation de référence sur les rôles et les autorisations.