Configurer l'accès à une source: Microsoft Azure Storage

Avant de transférer des données à partir d'un bucket Azure Storage, vous devez configurer l'accès à ce bucket afin que le service de transfert de stockage puisse récupérer ses objets.

Le service de transfert de stockage est compatible avec les méthodes d'authentification Azure suivantes:

  • Jetons signature d'accès partagé (SAP). Les jetons SAS peuvent être spécifiés directement lors de la création d'une tâche de transfert ou stockés dans Secret Manager.

  • Les clés partagées Azure peuvent être stockées dans Secret Manager et le secret transmis lors de la création d'une tâche de transfert.

  • Les identifiants fédérés sont transmis dans un objet federatedIdentityConfig lors de la création de la tâche de transfert.

Ce document contient également des informations sur l'ajout d'adresses IP de nœuds de calcul du service de transfert de stockage à votre pare-feu Azure Storage pour autoriser l'accès. Pour en savoir plus, consultez la section Restrictions d'adresses IP.

Régions où le service est disponible

Le service de transfert de stockage peut transférer des données depuis les régions Microsoft Azure Storage suivantes :
  • Amériques:USA Est, USA Est 2, USA Ouest, USA Ouest 2, USA Ouest 3, USA Centre, USA Centre Nord, USA Centre Sud, USA Centre Ouest, Canada Centre, Canada Est, Brésil Sud
  • Asie-Pacifique : Australia Central (Australie centre), Australia East (Australie est), Australia Southeast (Australie sud-est), Inde Centre, Inde Sud, Inde Ouest, Asie Sud-Est, Asie Est, Japon Est, Japon Ouest, Corée Sud, Corée Centre
  • Europe, Moyen-Orient, Afrique (EMEA) : Allemagne Centre Ouest, Afrique du Sud Nord, France Centre, Norvège Est, Suède Centre, Suisse Nord, Europe Nord, Europe Ouest, Royaume-Uni Sud, Royaume-Uni Ouest, Qatar Centre, Émirats arabes unis Nord

Option 1: S'authentifier à l'aide d'un jeton SAS

Pour configurer l'accès à un conteneur Microsoft Azure Storage à l'aide d'un jeton SAS, procédez comme suit : Vous pouvez également enregistrer votre jeton SAP dans Secret Manager. Pour ce faire, suivez les instructions de la section S'authentifier à l'aide d'une clé partagée Azure ou d'un jeton SAP dans Secret Manager.

  1. Créez un utilisateur Microsoft Azure Storage ou utilisez-en un existant pour accéder au compte de stockage de votre conteneur d'objets blob Microsoft Azure Storage.

  2. Créez un jeton SAP au niveau du conteneur. Pour savoir comment procéder, consultez la section Accorder un accès limité aux ressources Azure Storage à l'aide de signatures d'accès partagé.

    1. Blob doit figurer dans la liste des services autorisés.

    2. Pour Allowed resource types (Types de ressources autorisés), sélectionnez Container (Conteneur) et Object (Objet).

    3. Les autorisations accordées doivent inclure Read (Lecture) et List (Liste). Si le transfert est configuré pour supprimer des objets de la source, vous devez également inclure l'autorisation Supprimer.

    4. Le délai d'expiration par défaut pour les jetons SAP est de 8 heures. Définissez un délai d'expiration raisonnable vous permettant de finaliser votre transfert.

    5. Ne spécifiez aucune adresse IP dans le champ Allowed IP addresses (Adresses IP autorisées). Le service de transfert de stockage utilise différentes adresses IP et n'est pas compatible avec la restriction d'adresses IP.

    6. Le champ Allowed protocols (Protocoles autorisés) doit être défini sur HTTPS only (HTTPS uniquement).

  3. Une fois le jeton créé, notez la valeur du jeton SAS qui est renvoyée. Vous aurez besoin de cette valeur lorsque vous configurerez votre transfert avec le service de transfert de stockage.

Option 2: S'authentifier à l'aide d'une clé partagée Azure ou d'un jeton SAS dans Secret Manager

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

Le service de transfert de stockage accepte les noms de ressources Secret Manager qui font référence à vos identifiants Azure stockés de manière sécurisée.

Pour utiliser une clé partagée Azure, vous devez l'enregistrer dans Secret Manager. Les jetons SAS peuvent être enregistrés dans Secret Manager ou transmis directement.

Lorsque vous spécifiez une clé partagée, le service de transfert de stockage l'utilise pour générer un SAS de service dont la portée est limitée au conteneur Azure spécifié dans la tâche de transfert.

Activer l'API

Enable the Secret Manager API.

Enable the API

Configurer des autorisations supplémentaires

Autorisations d'utilisateur

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 nécessite le rôle IAM suivant:

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

Pour attribuer le rôle à votre agent de service:

Cloud Console

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

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

    Accéder à IAM

  3. Cliquez sur Accorder l'accès.

  4. Dans la zone de texte Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service.

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

  6. Cliquez sur Enregistrer.

gcloud

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'adresse 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:

Cloud Console

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

    Accéder à Secret Manager

  2. Cliquez sur Créer un secret.

  3. Saisissez un nom.

  4. Dans la zone de texte Valeur du secret, saisissez vos identifiants dans l'un des formats suivants.

    {
      "sas_token" : "SAS_TOKEN_VALUE"
    }
    

    ou

    {
      "access_key" : "ACCESS_KEY"
    }
    
  5. Cliquez sur Créer un secret.

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

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

    2. Copiez la valeur de Nom de la ressource. Il utilise le format suivant:

      projects/1234567890/secrets/SECRET_NAME

gcloud

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

printf '{
  "sas_token" : "SAS_TOKEN_VALUE"
}' | gcloud secrets create SECRET_NAME --data-file=-

ou

printf '{
  "access_key" : "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. Il 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 la ressource Secret Manager en tant que valeur du champ transferSpec.azureBlobStorageDataSource.credentialsSecret:

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

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "azureBlobStorageDataSource": {
      "storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
      "container": "AZURE_CONTAINER_NAME",
      "credentialsSecret": "SECRET_RESOURCE_ID",
    },
    "gcsDataSink": {
      "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
    }
  }
}

Pour en savoir plus sur la création d'un transfert, consultez la page Créer des transferts.

Option 3: S'authentifier à l'aide d'une identité fédérée

Le service de transfert de stockage est compatible avec la fédération d'identité de charge de travail Azure avec Google Cloud. Le service de transfert de stockage peut émettre des requêtes à Azure Storage via des applications Azure enregistrées, ce qui élimine la nécessité de transmettre directement des identifiants au service de transfert de stockage.

Pour configurer l'identité fédérée, suivez ces instructions.

Configurer des identifiants Google Cloud

Vous devez ajouter le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) à l'agent de service du service de transfert de stockage pour autoriser la création de jetons d'identification OpenID Connect (OIDC) pour le compte.

  1. Récupérez les accountEmail et subjectId de l'agent de service géré par Google créé automatiquement lorsque vous commencez à utiliser le service de transfert de stockage. Pour récupérer ces valeurs:

    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 de requête, 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. Les accountEmail et subjectId sont inclus dans la réponse. Enregistrez ces valeurs.

  2. Attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) à l'agent de service du service de transfert de stockage. Suivez les instructions de la section Gérer l'accès aux comptes de service.

Configurer des identifiants Microsoft

Commencez par enregistrer une application et ajouter des identifiants fédérés:

  1. Connectez-vous à https://portal.azure.com.
  2. Accédez à la page Enregistrements d'applications.
  3. Cliquez sur Nouvelle inscription.
  4. Saisissez un nom. Par exemple, azure-transfer-app.
  5. Sélectionnez Comptes de cet annuaire organisationnel uniquement.
  6. Cliquez sur S'inscrire. L'application est créée. Notez Application (client) ID et Directory (tenant) ID. Vous pouvez également les récupérer ultérieurement sur la page Vue d'ensemble de l'application.
  7. Cliquez sur Certificats et secrets, puis sélectionnez l'onglet Identifiants fédérés.
  8. Cliquez sur Ajouter un identifiant.
  9. Sélectionnez Autre émetteur comme scénario, puis saisissez les informations suivantes :
    • Émetteur: https://accounts.google.com
    • Identifiant d'objet: subjectId de votre agent de service, que vous avez récupéré dans Configurer des identifiants Google Cloud.
    • Nom unique de l'identifiant fédéré.
    • L'audience doit rester api://AzureADTokenExchange.
  10. Cliquez sur Ajouter.

Accordez ensuite à l'application l'accès à votre conteneur Azure Storage:

  1. Accédez à la page Comptes de stockage de votre compte Azure.
  2. Sélectionnez votre compte de stockage, puis Containers (Conteneurs) dans la section Data storage (Stockage de données).
  3. Cliquez sur le bucket auquel vous souhaitez accorder l'accès.
  4. Cliquez sur Contrôle d'accès (IAM) dans le menu de gauche, puis sélectionnez l'onglet Rôles.
  5. Cliquez sur le menu à développer (...) à côté d'un rôle, puis sélectionnez Cloner.
  6. Attribuez un nom à ce rôle personnalisé, puis sélectionnez Commencer à zéro. Cliquez sur Suivant.
  7. Cliquez sur Ajouter des autorisations, puis recherchez Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read.
  8. Cliquez sur la fiche Microsoft Storage qui s'affiche.
  9. Cochez la case d'option Actions sur les données.
  10. Sélectionnez Read : Read Blob (Lire : Lire un blob).
  11. Cliquez sur Ajouter.
  12. Si vous allez supprimer des objets à la source après le transfert, cliquez à nouveau sur Ajouter des autorisations et recherchez Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete.
  13. Cliquez sur la fiche Microsoft Storage qui s'affiche, sélectionnez Actions sur les données, puis Supprimer : supprimer le blob.
  14. Cliquez sur Ajouter.
  15. Cliquez sur Examiner et créer, puis sur Créer. Vous êtes redirigé vers la page Contrôle des accès (IAM) du bucket.
  16. Cliquez sur Ajouter, puis sélectionnez Ajouter une attribution de rôle.
  17. Dans la liste des rôles, sélectionnez votre rôle personnalisé, puis cliquez sur Suivant.
  18. Cliquez sur Select members (Sélectionner des membres).
  19. Dans le champ Sélectionner, saisissez le nom de l'application que vous avez précédemment enregistrée. Exemple :azure-transfer-app
  20. Cliquez sur la vignette de l'application, puis sur Sélectionner.
  21. Cliquez sur Examiner et attribuer.

Transmettre vos identifiants d'application à la commande de création de tâche

Les identifiants de votre application sont transmis à la commande de création de tâche à l'aide d'un objet federatedIdentityConfig. Copiez l'ID de l'application (client) et l'ID du répertoire (tenant) que vous avez enregistrés lors des étapes de configuration des identifiants Microsoft dans les champs client_id et tenant_id.

"federatedIdentifyConfig": {
  "client_id": "efghe9d8-4810-800b-8f964ed4057f",
  "tenant_id": "abcd1234-c8f0-4cb0-b0c5-ae4aded60078"
}

Voici un exemple de requête de création d'une tâche:

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

{
  "description": "Transfer with Azure Federated Identity",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "azureBlobStorageDataSource": {
      "storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
      "container": "AZURE_CONTAINER_NAME",
      "federatedIdentifyConfig": {
        "client_id": "AZURE_CLIENT_ID",
        "tenant_id": "AZURE_TENANT_ID"
      }
    },
    "gcsDataSink": {
      "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
    }
  }
}

Pour en savoir plus sur la création d'un transfert, consultez la page Créer des transferts.

Restrictions d'adresses IP

Si vous limitez l'accès à vos ressources Azure à l'aide d'un pare-feu Azure Storage, 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 au format 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 des données de ce document au moins une fois par semaine pour mettre à jour votre configuration de sécurité. Pour obtenir un exemple de script Python qui extrait des plages d'adresses IP à partir d'un fichier JSON, consultez cet article de la documentation sur le cloud privé virtuel.

Pour ajouter ces plages en tant qu'adresses IP autorisées, suivez les instructions de l'article Microsoft Azure Configurer les pare-feu et les réseaux virtuels Azure Storage.