Configura el acceso a una fuente: Microsoft Azure Storage

Antes de transferir datos desde un bucket de Azure Storage, debes configurar el acceso a ese bucket para que el Servicio de transferencia de almacenamiento pueda recuperar sus objetos.

El Servicio de transferencia de almacenamiento admite los siguientes métodos de autenticación de Azure:

  • Tokens de firma de acceso compartido (SAS). Los tokens de SAS se pueden especificar directamente cuando se crea un trabajo de transferencia o se pueden almacenar en Secret Manager.

  • Las llaves compartidas de Azure se pueden almacenar en Secret Manager y el secreto se pasa cuando se crea un trabajo de transferencia.

  • Las credenciales federadas se pasan en un objeto federatedIdentityConfig durante la creación del trabajo de transferencia.

Este documento también incluye información para agregar direcciones IP de los trabajadores del Servicio de transferencia de almacenamiento a tu firewall de Azure Storage para permitir el acceso. Consulta las restricciones de IP para obtener más detalles.

Regiones admitidas

El Servicio de transferencia de almacenamiento puede transferir datos desde las siguientes regiones de Microsoft Azure Storage:
  • América: Este de EE.UU., Este de EE.UU. 2, Oeste de EE.UU., Oeste de EE.UU. 2, Oeste de EE.UU. 3, Central de EE.UU., Norte Central de EE.UU., Sur Central de EE.UU., Oeste Central de EE.UU., Canadá Central, Canadá Este, Brasil Sur
  • Asia-Pacífico: Australia Central, Australia Este, Australia Sudeste, India Central, India Meridional, India Occidental, Sudeste Asiático, Asia Oriental, Japón Este, Japón Oeste, Corea del Sur, Corea Central
  • Europa, Oriente Medio y África (EMEA): Francia Central, Alemania Oeste Central, Noruega Este, Suecia Central, Suiza Norte, Norte de Europa, Europa Occidental, Reino Unido Sur, Reino Unido Oeste, Catar Central, Emiratos Árabes Unidos Norte, Sudáfrica Norte

Opción 1: Autentica con un token de SAS

Sigue estos pasos para configurar el acceso a un contenedor de Microsoft Azure Storage con un token SAS. Como alternativa, puedes guardar tu token SAS en Secret Manager. Para ello, sigue las instrucciones que se indican en Cómo autenticarse con una clave compartida de Azure o un token SAS en Secret Manager.

  1. Crea un usuario de Microsoft Azure Storage o usa uno existente para acceder a la cuenta de almacenamiento de tu contenedor de Microsoft Azure Storage Blob.

  2. Cree un token SAS a nivel de contenedor. Consulta Concede acceso limitado a los recursos de Azure Storage mediante firmas de acceso compartido para obtener instrucciones.

    1. Los Servicios permitidos deben incluir Blob.

    2. En Tipos de recursos permitidos, selecciona Contenedor y Objeto.

    3. Los Permisos permitidos deben incluir Leer y Lista. Si la transferencia está configurada para borrar objetos de la fuente, también debes incluir el permiso Borrar.

    4. El tiempo de vencimiento predeterminado para los tokens SAS es de 8 horas. Establece un tiempo de vencimiento razonable que te permita completar correctamente tu transferencia.

    5. No especifiques ninguna dirección IP en el campo Direcciones IP permitidas. El servicio de transferencia de almacenamiento utiliza varias direcciones IP y no admite la restricción de direcciones IP.

    6. En Protocolos permitidos, debe aparecer Solo HTTPS.

  3. Una vez que se cree el token, ten en cuenta el valor del token SAS que se muestra. Necesitas este valor cuando configuras la transferencia con el Servicio de transferencia de almacenamiento.

Opción 2: Autentícate con una clave compartida de Azure o un token SAS en Secret Manager

Secret Manager es un servicio seguro que almacena y administra datos sensibles, como contraseñas. Usa encriptación sólida, control de acceso basado en roles y registro de auditoría para proteger tus secretos.

El Servicio de transferencia de almacenamiento admite nombres de recursos de Secret Manager que hacen referencia a tus credenciales de Azure almacenadas de forma segura.

Para usar una clave compartida de Azure, debes guardarla en Secret Manager. Los tokens de SAS se pueden guardar en Secret Manager o pasar directamente.

Cuando especificas una clave compartida, el Servicio de transferencia de almacenamiento usa esa clave para generar un SAS de servicio que se restringe en el alcance al contenedor de Azure especificado en la tarea de transferencia.

Habilita la API

Enable the Secret Manager API.

Enable the API

Configura permisos adicionales

Permisos de usuario

El usuario que crea el secreto requiere el siguiente rol:

  • Administrador de Secret Manager (roles/secretmanager.admin)

Obtén más información para otorgar un rol.

Permisos del agente de servicio

El agente de servicio del Servicio de transferencia de almacenamiento requiere el siguiente rol de IAM:

  • Usuario con acceso a secretos de Secret Manager (roles/secretmanager.secretAccessor)

Para otorgar el rol a tu agente de servicio, haz lo siguiente:

Consola de Cloud

  1. Sigue las instrucciones para recuperar el correo electrónico de tu agente de servicio.

  2. Ve a la página de IAM en la consola de Google Cloud.

    Ir a IAM

  3. Haz clic en Otorgar acceso.

  4. En el cuadro de texto Principales nuevas, ingresa el correo electrónico del agente de servicio.

  5. En el menú desplegable Selecciona una función, busca y selecciona Descriptor de acceso a secretos de Secret Manager.

  6. Haz clic en Guardar.

gcloud

Usa el comando gcloud projects add-iam-policy-binding para agregar el rol de IAM a tu agente de servicio.

  1. Sigue las instrucciones para recuperar el correo electrónico de tu agente de servicio.

  2. En la línea de comandos, ingresa el siguiente comando:

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

Crea un secreto

Crea un Secret con Secret Manager:

Consola de Cloud

  1. Ve a la página de Secret Manager en la consola de Google Cloud.

    Ir a Secret Manager

  2. Haz clic en Crear secreto.

  3. Ingresa un nombre.

  4. En el cuadro de texto Valor secreto, ingresa tus credenciales en uno de los siguientes formatos.

    {
      "sas_token" : "SAS_TOKEN_VALUE"
    }
    

    Como alternativa, puedes hacer lo siguiente:

    {
      "access_key" : "ACCESS_KEY"
    }
    
  5. Haz clic en Crear secreto.

  6. Una vez creado el secreto, anota el nombre completo del recurso:

    1. Selecciona la pestaña Descripción general.

    2. Copia el valor de Nombre del recurso. Usa el siguiente formato:

      projects/1234567890/secrets/SECRET_NAME

gcloud

Para crear un secreto nuevo con la herramienta de línea de comandos de gcloud, pasa las credenciales en formato JSON al comando gcloud secrets create:

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

Como alternativa, puedes hacer lo siguiente:

printf '{
  "access_key" : "ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

Recupera el nombre completo del recurso del Secret:

gcloud secrets describe SECRET_NAME

Ten en cuenta el valor de name en la respuesta. Usa el siguiente formato:

projects/1234567890/secrets/SECRET_NAME

Para obtener más detalles sobre cómo crear y administrar secretos, consulta la documentación de Secret Manager.

Pasa el secreto al comando de creación de trabajos

Para usar Secret Manager con el Servicio de transferencia de almacenamiento, debes usar la API de REST para crear una tarea de transferencia.

Pasa el nombre del recurso de Secret Manager como el valor del campo 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"
    }
  }
}

Consulta Crea transferencias para obtener detalles completos sobre cómo crear una transferencia.

Opción 3: Autentica con identidad federada

El servicio de transferencia de almacenamiento admite la federación de identidades para cargas de trabajo de Azure con Google Cloud. El Servicio de transferencia de almacenamiento puede emitir solicitudes a Azure Storage mediante aplicaciones de Azure registradas, lo que elimina la necesidad de pasar credenciales al Servicio de transferencia de almacenamiento directamente.

Para configurar la identidad federada, sigue estas instrucciones.

Configura las credenciales de Google Cloud

Debes agregar el rol de Creador de tokens de cuentas de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio del servicio de transferencia de almacenamiento para permitir la creación de tokens de ID de OpenID Connect (OIDC) para la cuenta.

  1. Recupera el accountEmail y el subjectId del agente de servicio administrado por Google que se crea automáticamente cuando comienzas a usar el Servicio de transferencia de almacenamiento. Para recuperar estos valores, haz lo siguiente:

    1. Ve a la página de referencia de googleServiceAccounts.get.

      Se abrirá un panel interactivo con el título Prueba este método.

    2. En el panel, en Parámetros de solicitud, ingresa el ID de tu proyecto. El proyecto que especifiques aquí debe ser el proyecto que usas para administrar el Servicio de transferencia de almacenamiento.

    3. Haz clic en Ejecutar. accountEmail y subjectId se incluyen en la respuesta. Guarda estos valores.

  2. Otorga el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio del Servicio de transferencia de almacenamiento. Sigue las instrucciones que se indican en Administra el acceso a las cuentas de servicio.

Configura las credenciales de Microsoft

Primero, registra una aplicación y agrega una credencial federada:

  1. Accede a https://portal.azure.com.
  2. Ve a la página Registros de apps.
  3. Haz clic en Registro nuevo.
  4. Ingresa un nombre. Por ejemplo, azure-transfer-app.
  5. Selecciona Cuentas solo en este directorio de la organización.
  6. Haz clic en Register. Se crea la aplicación. Ten en cuenta Application (client) ID y Directory (tenant) ID. También puedes recuperarlos más adelante desde la página Descripción general de la aplicación.
  7. Haz clic en Certificados y secretos y selecciona la pestaña Credenciales federadas.
  8. Haz clic en Agregar credencial.
  9. Selecciona Otro emisor como la situación y, luego, ingresa la siguiente información:
    • Emisor: https://accounts.google.com
    • Identificador de asunto: El subjectId de tu agente de servicio, que recuperaste en Configura credenciales de Google Cloud.
    • Es un nombre único para la credencial federada.
    • El público debe permanecer como api://AzureADTokenExchange.
  10. Haz clic en Agregar.

A continuación, otorga acceso a la aplicación a tu contenedor de Azure Storage:

  1. Ve a la página Cuentas de almacenamiento en tu cuenta de Azure.
  2. Selecciona tu cuenta de almacenamiento y elige Contenedores en la sección Almacenamiento de datos.
  3. Haz clic en el bucket al que deseas otorgar acceso.
  4. Haz clic en Control de acceso (IAM) en el menú de la izquierda y selecciona la pestaña Roles.
  5. Haz clic en el menú ampliado (...) junto a cualquier rol y selecciona Clonar.
  6. Ingresa un nombre para este rol personalizado y selecciona Comenzar desde cero. Haz clic en Siguiente.
  7. Haz clic en Agregar permisos y busca Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read.
  8. Haz clic en la tarjeta Almacenamiento de Microsoft que aparece.
  9. Selecciona el botón de selección Acciones de datos.
  10. Selecciona Leer : Leer blob.
  11. Haz clic en Agregar.
  12. Si borrarás objetos de la fuente después de la transferencia, vuelve a hacer clic en Agregar permisos y busca Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete.
  13. Haz clic en la tarjeta Microsoft Storage que aparece, selecciona Acciones de datos y, luego, Borrar : Borrar blob.
  14. Haz clic en Agregar.
  15. Haz clic en Revisar + crear y, luego, en Crear. Volverás a la página Control de acceso (IAM) del bucket.
  16. Haz clic en Agregar y selecciona Agregar asignación de roles.
  17. En la lista de roles, selecciona tu rol personalizado y haz clic en Siguiente.
  18. Haz clic en Seleccionar miembros.
  19. En el campo Seleccionar, ingresa el nombre de la aplicación que registraste anteriormente. Por ejemplo, azure-transfer-app
  20. Haz clic en la tarjeta de la aplicación y, luego, en Seleccionar.
  21. Haz clic en Revisar y asignar.

Pasa los identificadores de tu aplicación al comando de creación de trabajos

Los identificadores de tu aplicación se pasan al comando de creación de trabajos con un objeto federatedIdentityConfig. Copia el ID de aplicación (cliente) y el ID de directorio (arrendatario) que guardaste durante los pasos de Configurar credenciales de Microsoft en los campos client_id y tenant_id.

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

Un ejemplo de solicitud de creación de trabajo se ve de la siguiente manera:

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"
    }
  }
}

Consulta Crea transferencias para obtener detalles completos sobre cómo crear una transferencia.

Restricciones de IP

Si restringes el acceso a tus recursos de Azure mediante un firewall de Azure Storage, debes agregar los rangos de IP que usan los trabajadores del Servicio de transferencia de almacenamiento a tu lista de IPs permitidas.

Debido a que estos rangos de IP pueden cambiar, publicamos los valores actuales como un archivo JSON en una dirección permanente:

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

Cuando se agregue un rango nuevo al archivo, esperaremos al menos 7 días antes de usar ese rango para las solicitudes del servicio de transferencia de almacenamiento.

Te recomendamos que extraigas datos de este documento al menos semanalmente para mantener tu configuración de seguridad actualizada. Para obtener una muestra de una secuencia de comandos de Python que recupera rangos de IP de un archivo JSON, consulta este artículo de la documentación de la nube privada virtual.

Para agregar estos rangos como IPs permitidas, sigue las instrucciones del artículo de Microsoft Azure Cómo configurar firewalls y redes virtuales de Azure Storage.