Configurer l'accès à une source: Amazon S3

Vous pouvez configurer l'accès à un bucket Amazon S3 à l'aide de l'une des deux méthodes suivantes :

Régions où le service est disponible

Le service de transfert de stockage est compatible avec les régions Amazon S3 suivantes :
af-south-1
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
us-gov-east-1
us-gov-west-1
Les transferts utilisant le réseau privé géré sont compatibles avec les régions AWS suivantes :
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

Autorisations requises

Pour utiliser le service de transfert de stockage afin de déplacer des données à partir d'un bucket Amazon S3, votre compte utilisateur ou votre rôle d'identité fédérée doit disposer des autorisations appropriées pour le bucket :

Autorisation Description Utilisation
s3:ListBucket Permet au service de transfert de stockage de lister les objets présents dans le bucket. Toujours obligatoire
s3:GetObject Permet au service de transfert de stockage de lire des objets dans le bucket. Obligatoire si vous transférez la version actuelle de tous les objets. Si votre fichier manifeste spécifie une version d'objet, utilisez plutôt s3:GetObjectVersion.
s3:GetObjectVersion Permet au service de transfert de stockage de lire des versions spécifiques d'objets dans le bucket. Obligatoire si votre fichier manifeste spécifie une version d'objet. Sinon, utilisez s3:GetObject.
s3:DeleteObject Permet au service de transfert de stockage de supprimer des objets du bucket. Obligatoire si vous définissez deleteObjectsFromSourceAfterTransfer sur true.

S'authentifier à l'aide d'identifiants d'accès

Pour vous authentifier auprès d'AWS à l'aide d'un ID de clé d'accès et d'une clé secrète :

  1. Créez un utilisateur AWS IAM (AWS Identity and Access Management) avec un nom facilement reconnaissable, tel que transfer-user.

  2. Pour le type d'accès AWS, sélectionnez Clé d'accès – Accès programmatique.

  3. Attribuez l'un des rôles suivants à l'utilisateur :

    • AmazonS3ReadOnlyAccess pour fournir un accès en lecture seule à la source. Cela permet les transferts, mais pas la suppression des objets à la source une fois le transfert terminé.
    • AmazonS3FullAccess si votre transfert est configuré pour supprimer des objets à la source.
    • Un rôle personnalisé avec les autorisations appropriées du tableau Autorisations requises. Le JSON pour les autorisations minimales se présente comme dans l'exemple suivant :

      Régions AWS standards

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*",
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }

      Régions AWS GovCloud

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*",
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }
  4. Notez l'ID de clé d'accès et la clé d'accès secrète lorsque l'utilisateur est créé.

La façon dont vous transmettez l'ID de clé d'accès et la clé d'accès secrète au service de transfert de stockage dépend de l'interface que vous utilisez pour lancer le transfert.

Google Cloud Console

Saisissez les valeurs directement dans le formulaire de création de la tâche de transfert.

Pour commencer, consultez la section Créer des transferts pour vous lancer.

gcloud CLI

Créez un fichier JSON au format suivant :

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

Transmettez l'emplacement du fichier à la commande gcloud transfer jobs create à l'aide du flag source-creds-file :

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

API REST

Votre objet transferSpec doit contenir les informations de clé dans l'objet awsS3DataSource :

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "S3_BUCKET_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_BUCKET_NAME"
  }
}

Bibliothèques clientes

Consultez les exemples de la page Créer des transferts.

Enregistrer vos identifiants d'accès dans Secret Manager

Secret Manager est un service sécurisé qui stocke et gère les données sensibles telles que les mots de passe. Il utilise un chiffrement puissant, un contrôle des accès basé sur les rôles et une journalisation d'audit pour protéger vos secrets.

Le service de transfert de stockage peut utiliser Secret Manager pour protéger vos identifiants d'accès AWS. Vous chargez vos identifiants dans Secret Manager, puis transmettez le nom de ressource secret au service de transfert de stockage.

Activer l'API

Activer l'API Secret Manager

Rôles requis pour activer les API

Pour activer les API, vous avez besoin de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

Activer l'API

Configurer des autorisations supplémentaires

Autorisations des utilisateurs

L'utilisateur qui crée le secret doit disposer du rôle suivant :

  • Administrateur Secret Manager (roles/secretmanager.admin)

Découvrez comment attribuer un rôle .

Autorisations de l'agent de service

L'agent de service du service de transfert de stockage service agent doit disposer du rôle IAM suivant :

  • Accesseur de secrets Secret Manager (roles/secretmanager.secretAccessor)

Attribuez le rôle à votre agent de service :

Google Cloud Console

  1. Suivez les instructions pour récupérer l'e-mail de votre agent de service.

  2. Accédez à la page IAM dans la Google Cloud console.

    Accéder à IAM

  3. Cliquez sur Accorder l'accès.

  4. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service.

  5. Dans la liste déroulante Sélectionner un rôle, recherchez et sélectionnez Accesseur de secrets Secret Manager.

  6. Cliquez sur Enregistrer.

gcloud CLI

Utilisez la commande gcloud projects add-iam-policy-binding pour ajouter le rôle IAM à votre agent de service.

  1. Suivez les instructions pour récupérer l'e-mail de votre agent de service.

  2. Dans la ligne de commande, saisissez la commande suivante :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

Créer un secret

Créez un secret avec Secret Manager :

Google Cloud Console

  1. Accédez à la page Secret Manager dans la Google Cloud console.

    Accéder à Secret Manager

  2. Cliquez sur Créer un secret.

  3. Saisissez un nom.

  4. Dans le champ Valeur du secret, saisissez vos identifiants au format suivant :

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. Cliquez sur Créer un secret.

  6. Une fois le secret créé, notez le nom de ressource complet du secret :

    1. Sélectionnez l'onglet Overview (Présentation).

    2. Copiez la valeur de ID de ressource. Elle utilise le format suivant :

      projects/1234567890/secrets/SECRET_NAME

gcloud CLI

Pour créer un secret à l'aide de gcloud CLI, transmettez les identifiants au format JSON à la commande gcloud secrets create :

printf '{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

Récupérez le nom de ressource complet du secret :

gcloud secrets describe SECRET_NAME

Notez la valeur de name dans la réponse. Elle utilise le format suivant :

projects/1234567890/secrets/SECRET_NAME

Pour en savoir plus sur la création et la gestion des secrets, consultez la documentation de Secret Manager.

Transmettre votre secret à la commande de création de tâche

Pour utiliser Secret Manager avec le service de transfert de stockage, vous devez utiliser l'API REST pour créer une tâche de transfert.

Transmettez le nom de ressource Secret Manager en tant que valeur du champ transferSpec.awsS3DataSource.credentialsSecret :

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "awsS3DataSource": {
      "bucketName": "S3_BUCKET_NAME",
      "credentialsSecret": "SECRET_RESOURCE_ID",
    },
    "gcsDataSink": {
      "bucketName": "GCS_BUCKET_NAME"
    }
  }
}

S'authentifier à l'aide de l'identité fédérée

Pour vous authentifier auprès d'AWS à l'aide de l'identité fédérée :

  1. Créez un rôle IAM dans AWS.

  2. Sélectionnez Stratégie d'approbation personnalisée comme type d'entité de confiance.

  3. Copiez et collez la stratégie d'approbation suivante :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. Remplacez SUBJECT_ID par le subjectID de l'agent de service créé automatiquement lorsque vous commencez à utiliser le service de transfert de stockage. Pour récupérer le subjectID :

    1. Accédez à la googleServiceAccounts.get page de référence.

      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. Le projet que vous spécifiez ici doit être le projet que vous utilisez pour gérer le service de transfert de stockage.

    3. Cliquez sur Exécuter. Le subjectId est inclus dans la réponse.

  5. Attribuez l'une des stratégies d'autorisations suivantes au rôle :

    • AmazonS3ReadOnlyAccess fournit un accès en lecture seule à la source. Cela permet les transferts, mais pas la suppression des objets à la source une fois le transfert terminé.
    • AmazonS3FullAccess si votre transfert est configuré pour supprimer des objets à la source.
    • Un rôle personnalisé avec les autorisations appropriées du tableau Autorisations requises. Le JSON pour les autorisations minimales se présente comme dans l'exemple suivant :

      Régions AWS standards

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*",
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }

      Régions AWS GovCloud

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*",
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }
  6. Attribuez un nom au rôle et créez-le.

Une fois créé, affichez les détails du rôle pour récupérer son nom de ressource Amazon (ARN). Notez cette valeur. Elle présente l'un des formats suivants :

  • Pour les régions AWS standards : arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
  • Pour les régions AWS GovCloud : arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME

La façon dont vous transmettez l'ARN du rôle au service de transfert de stockage dépend de l'interface que vous utilisez pour lancer le transfert.

Google Cloud Console

Saisissez l'ARN du rôle directement dans le formulaire de création de la tâche de transfert.

Pour commencer, consultez la section Créer des transferts pour vous lancer.

gcloud CLI

Créez un fichier JSON au format suivant :

{
  "roleArn": "AWS_ROLE_ARN"
}

Transmettez l'emplacement du fichier à la commande gcloud transfer jobs create à l'aide du flag source-creds-file :

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

API REST

Votre objet transferSpec doit contenir les informations de l'ARN du rôle dans l'objet awsS3DataSource :

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "AWS_ROLE_ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_BUCKET_NAME"
  }
}

Bibliothèques clientes

Consultez les exemples de la page Créer des transferts.

Restrictions liées aux adresses IP

Si votre projet AWS utilise des restrictions d'adresse IP pour accéder au stockage, vous devez ajouter les plages d'adresses IP utilisées par les nœuds de calcul du service de transfert de stockage à votre liste d'adresses IP autorisées.

Étant donné que ces plages d'adresses IP peuvent changer, nous publions les valeurs actuelles dans un fichier JSON à une adresse permanente :

https://www.gstatic.com/storage-transfer-service/ipranges.json

Lorsqu'une nouvelle plage est ajoutée au fichier, nous attendons au moins sept jours avant de l'utiliser pour les requêtes du service de transfert de stockage.

Nous vous recommandons d'extraire les données de ce document au moins une fois par semaine pour maintenir votre configuration de sécurité à jour. Pour obtenir un exemple de script Python qui récupère des plages d'adresses IP à partir d'un fichier JSON, consultez cet article de la documentation cloud privé virtuel documentation.

Pour ajouter ces plages en tant qu'adresses IP autorisées, utilisez le champ Condition dans une stratégie de bucket, comme décrit dans la documentation AWS S3 : Managing access based on specific IP addresses (Gérer l'accès en fonction d'adresses IP spécifiques).