Pour les transferts sans agent, le service de transfert de stockage utilise par défaut un agent de service pour transférer vos données entre la source et la destination. Vous accordez à l'agent de service les autorisations nécessaires pour accéder à vos buckets Cloud Storage.
Étant donné que le même agent de service service de transfert de stockage est utilisé pour tous les transferts d'un projet, il dispose nécessairement d'autorisations sur tous les buckets impliqués dans chaque transfert.
Vous pouvez également attribuer des autorisations de bucket à plusieurs comptes de service gérés par l'utilisateur. Ces comptes de service gérés par l'utilisateur sont autorisés sur des buckets source et de destination spécifiques, et sont également limités à des comptes utilisateur spécifiques (les comptes qui créent ou déclenchent la tâche de transfert).
Exemples de cas de figure
Les scénarios suivants illustrent différentes options d'autorisation à l'aide de l'agent de service et des comptes de service gérés par l'utilisateur.
Développez chaque section pour afficher les détails.
Scénario 1: Agent de service uniquement
Dans ce scénario, toutes les autorisations sont accordées à l'agent de service.
- L'agent de service dispose d'autorisations en écriture sur les buckets A, B, C et D.
Tout utilisateur disposant des autorisations appropriées pour créer une tâche de transfert peut transférer des données vers ou depuis les buckets A, B, C et D.
Cette approche fonctionne bien lorsque l'utilisateur du service de transfert de stockage est un utilisateur de confiance pour les données de tous les buckets et peut configurer correctement les jobs de transfert pour éviter de déplacer des données vers ou depuis le mauvais bucket.
Scénario 2: Agents de service gérés par l'utilisateur uniquement
Dans ce scénario, toutes les autorisations sont accordées aux comptes de service gérés par l'utilisateur.
- Le compte de service 1 géré par l'utilisateur dispose d'autorisations sur les buckets A et B.
- Le compte de service géré par l'utilisateur 2 dispose d'autorisations sur les buckets C et D.
En outre:
- L'utilisateur Alpha est autorisé à accéder au compte de service 1.
- L'utilisateur Bravo est autorisé à accéder au compte de service 2.
- L'utilisateur Charlie est autorisé à accéder aux comptes de service 1 et 2.
Dans ce cas :
- Alpha ne peut effectuer de transferts qu'entre les buckets A et B.
- Bravo ne peut effectuer de transferts qu'entre les buckets C et D.
- Charlie ne peut effectuer de transferts qu'entre les buckets A et B, et entre les buckets C et D.
- Charlie ne peut pas transférer de données entre A et C, A et D, B et C, ou B et D.
Scénario 3: Autorisations mixtes
Dans ce scénario, votre projet contient un mélange d'autorisations d'agent de service et d'autorisations de compte de service géré par l'utilisateur.
- L'agent de service dispose d'autorisations en écriture sur les buckets A et B.
- Le compte de service 1 géré par l'utilisateur dispose d'autorisations en lecture seule sur le bucket C et d'autorisations en écriture sur le bucket D.
- L'utilisateur Alpha est autorisé à accéder au compte de service 1 géré par l'utilisateur.
Dans ce cas :
- Tout utilisateur disposant des autorisations appropriées pour créer une tâche de transfert peut effectuer des transferts vers ou depuis les buckets A et B. Ils ne peuvent pas être transférés vers ou depuis les buckets C ou D.
- L'utilisateur Alpha peut transférer des éléments vers ou depuis les buckets A et B.
- Alpha peut sortir du bucket C et le placer dans le bucket D.
- Alpha ne peut pas transférer de données du bucket C vers les buckets A ou B.
Présentation de l'implémentation
L'implémentation est la suivante:
- Vous créez un compte de service géré par l'utilisateur ou utilisez un compte existant.
- Vous accordez des autorisations :
- Pour qu'un utilisateur puisse accéder au compte de service géré par l'utilisateur.
- Pour que l'agent de service génère un jeton d'accès à partir du compte de service géré par l'utilisateur.
- Pour que le compte de service géré par l'utilisateur puisse accéder à vos buckets.
- L'utilisateur crée une tâche de transfert qui spécifie le compte de service géré par l'utilisateur.
- Le service de transfert de stockage vérifie que l'utilisateur dispose des autorisations appropriées sur le compte de service. Si les autorisations appropriées n'ont pas été accordées, la création de la tâche de transfert échoue.
- L'agent de service génère un jeton OAuth au nom du compte de service géré par l'utilisateur. Le jeton OAuth permet au service de transfert de stockage d'accéder aux buckets impliqués dans le transfert.
- La tâche de transfert s'exécute.
- Le jeton OAuth est éphémère et expire. Si la tâche de transfert est en cours lorsque le jeton expire, le service de transfert de stockage en génère un nouveau et poursuit le transfert.
Configurer la délégation d'autorisations
Suivez les instructions pour déléguer l'accès de l'agent de service à un compte de service géré par l'utilisateur.
Conditions requises
- Pour créer un compte de service géré par l'utilisateur, vous devez disposer du rôle "Créer des comptes de service" (
roles/iam.serviceAccountCreator
) sur le projet. - Pour accorder à l'utilisateur et à l'agent de service l'accès au compte de service géré par l'utilisateur, vous devez disposer du rôle "Administrateur de compte de service" (
roles/iam.serviceAccountAdmin
) sur le compte de service géré par l'utilisateur ou sur le projet.
Créer ou identifier un compte de service géré par l'utilisateur
Vous pouvez créer un compte de service géré par l'utilisateur ou utiliser un compte existant.
Pour créer un compte de service géré par l'utilisateur, suivez les instructions de la section Créer des comptes de service.
Pour utiliser un compte de service géré par l'utilisateur existant, vous avez besoin de son adresse e-mail, qui se présente sous le format suivant:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Si le compte de service se trouve dans un projet différent de la tâche de transfert, consultez la section Activer l'association des comptes de service à plusieurs projets.
Accorder l'accès à l'utilisateur
Accordez au compte utilisateur l'accès au nouveau compte de service géré par l'utilisateur, puis attribuez-lui le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser
). Le compte utilisateur est celui utilisé pour créer ou mettre à jour la tâche de transfert.
Console Google Cloud
Dans la console Google Cloud , accédez à la page Comptes de service.
Sélectionnez un projet.
Cliquez sur l'adresse e-mail du compte de service géré par l'utilisateur.
Sélectionnez l'onglet Autorisations.
Cliquez sur
Accorder l'accès.Saisissez l'adresse e-mail de l'utilisateur. Par exemple,
user1@example.com
.Dans la liste déroulante Rôle, sélectionnez Utilisateur du compte de service.
Cliquez sur Enregistrer. Le rôle est attribué au compte principal sur le compte de service.
gcloud
Pour accorder un rôle à un compte principal, exécutez la commande add-iam-policy-binding
:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=PRINCIPAL --role=roles/iam.serviceAccountUser
Remplacez les variables suivantes :
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: adresse e-mail du compte de service géré par l'utilisateur au format
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
. - PRINCIPAL: adresse e-mail de l'utilisateur exécutant la tâche de transfert, au format
user:name@example.com
.
Accorder l'accès à l'agent de service
Pour permettre à l'agent de service de générer un jeton d'accès à partir du compte de service géré par l'utilisateur, accordez-lui un accès à ce compte et attribuez-lui le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator
).
Vous avez besoin de l'adresse e-mail de l'agent de service pour accorder l'accès. Pour trouver l'adresse e-mail de l'agent de service:
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. Le projet que vous spécifiez ici doit être le projet que vous utilisez pour gérer le service de transfert de stockage.
Cliquez sur Exécuter.
L'adresse e-mail de votre agent de service est renvoyée en tant que valeur de
accountEmail
. Il utilise le formatproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
.
Pour accorder à l'agent de service l'accès au compte de service géré par l'utilisateur:
Console Google Cloud
Dans la console Google Cloud , accédez à la page Comptes de service.
Sélectionnez un projet.
Cliquez sur l'adresse e-mail du compte de service géré par l'utilisateur.
Sélectionnez l'onglet Autorisations.
Cliquez sur
Accorder l'accès.Saisissez l'adresse e-mail de l'agent de service.
Dans la liste déroulante Rôle, sélectionnez Créateur de jetons de compte de service.
Cliquez sur Enregistrer. Le rôle est attribué au compte principal sur le compte de service.
gcloud
Pour accorder un rôle à un compte principal, exécutez la commande add-iam-policy-binding
:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator
Remplacez les variables suivantes :
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: adresse e-mail du compte de service géré par l'utilisateur au format
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
. - SERVICE_AGENT_EMAIL: adresse e-mail de l'agent de service.
Accorder des autorisations de bucket au compte de service géré par l'utilisateur
Accordez les autorisations listées dans la section Autorisations de l'agent de service géré par Google au compte de service géré par l'utilisateur, et non à l'agent de service.
Créer une tâche de transfert à l'aide d'un compte de service géré par l'utilisateur
Une fois que vous avez accordé les autorisations appropriées, vous pouvez spécifier le compte de service géré par l'utilisateur lorsque vous créez une tâche de transfert.
Console Google Cloud
Suivez les instructions pour créer un transfert. Avant de finaliser la tâche de transfert:
- Sur la page Choisir les paramètres, recherchez la section Type de compte de service.
- Sélectionnez Compte de service géré par l'utilisateur.
- Saisissez l'adresse e-mail du compte de service géré par l'utilisateur, au format
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
. - Cliquez sur Créer pour créer la tâche de transfert.
API REST
Spécifiez le compte de service géré par l'utilisateur comme valeur du champ serviceAccount
dans la requête transferJobs.create
.
La valeur doit respecter le format projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID
.
L'adresse e-mail du compte de service (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
) ou l'ID unique (123456789012345678901
) sont acceptés dans la chaîne. Le caractère générique -
est obligatoire. Le remplacer par un ID de projet n'est pas valide.
Exemple :
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
...
}
}