El Servicio de transferencia de almacenamiento puede usar un bucket de origen de Cloud Storage en dos tipos de transferencia:
Transferencias sin agentes: Transferencias de nube a nube, como de Cloud Storage a Cloud Storage, de Cloud Storage a AWS S3 o de Cloud Storage a Azure Blob Storage. Los permisos se otorgan al agente de servicio del Servicio de transferencia de almacenamiento.
Transferencias controladas por agentes: Son transferencias que involucran sistemas de archivos o almacenamiento local que usan agentes y grupos de agentes de transferencia. Los permisos se deben otorgar tanto al agente de servicio como a la cuenta del agente de transferencia.
Otorga permisos automáticamente en la consola de Google Cloud
Si usas la consola de Google Cloud para crear una transferencia sin agentes y tienes los permisos de usuarionecesarios, el agente de servicio recibirá automáticamente los permisos necesarios en tu bucket de origen.
Puedes omitir los pasos en esta página. Si es necesario, configura el acceso a tu destino y, luego, crea una transferencia.
Requisitos previos
Permisos de la cuenta de usuario: Para otorgar los roles de IAM necesarios que se indican en esta página, tu cuenta de usuario (o cuenta de servicio administrada por el usuario) debe tener permisos para modificar las políticas de IAM en el bucket de origen y el proyecto del grupo de agentes. Para obtener detalles sobre los requisitos de la cuenta de usuario, consulta Permisos de la cuenta de usuario.
Permisos del proyecto de transferencia basada en agentes: En el caso de las transferencias basadas en agentes, asegúrate de haber configurado los roles necesarios a nivel del proyecto para tu agente de servicio y tu cuenta de agente de transferencia. Consulta Permisos a nivel del proyecto basados en agentes.
Busca el correo electrónico del agente de servicio
El agente de servicio se crea
automáticamente cuando creas un trabajo de transferencia por primera vez, ejecutas comandos de configuración de
gcloud transfer, visitas la página Storage Transfer en la
consola deGoogle Cloud o llamas a
googleServiceAccounts.get.
Para obtener el correo electrónico del agente de servicio, que se usa para identificarlo en los comandos del Servicio de transferencia de almacenamiento, haz lo siguiente:
- Ve a la página de referencia de
googleServiceAccounts.get. Se abrirá un panel interactivo con el título Prueba este método. - En el panel, en Parámetros de solicitud, ingresa el ID del proyecto.
- Haz clic en Ejecutar.
Copia el valor de accountEmail. Usa el siguiente formato:
project-PROJECT_NUMBER@storage-transfer-service..
Otorga los permisos necesarios.
Selecciona tu tipo de transferencia para ver los pasos que debes seguir para otorgar acceso.
Transferencia sin agentes
Los siguientes roles predefinidos otorgan los permisos necesarios en el bucket de origen al agente de servicio:
- Lector de buckets heredados de almacenamiento (
roles/storage.legacyBucketReader) - Además, se debe cumplir una de las siguientes condiciones:
- Visualizador de objetos de Storage (
roles/storage.objectViewer) si se conservan los objetos de origen - Usuario de objetos de almacenamiento (
roles/storage.objectUser) si se borran los objetos de origen después de la transferencia (deleteObjectsFromSourceAfterTransfer). - Administrador de objetos de almacenamiento (
roles/storage.objectAdmin) si se conservan las LCA de objetos (ACL_PRESERVE). También admite la eliminación de objetos de origen después de la transferencia.
- Visualizador de objetos de Storage (
Agrega el agente de servicio a la política de IAM del bucket de origen:
Console
- En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.
- Haz clic en el menú Ampliado del bucket () del bucket de origen.
- Elige Editar acceso.
- Haz clic en + Agregar principal.
- En Principales nuevas, ingresa el correo electrónico de tu agente de servicio.
- Selecciona
Storage Legacy Bucket Readeren el menú desplegable Selecciona un rol. - Haz clic en Agregar otro rol y selecciona una de las siguientes opciones:
Storage Object ViewerStorage Object UserStorage Object Admin
- Haz clic en Guardar.
gcloud
Ejecuta los siguientes comandos de gcloud storage:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
Reemplaza lo siguiente:
- BUCKET_NAME: Es el nombre de tu bucket de origen.
- SERVICE_AGENT_EMAIL: Es el correo electrónico del agente de servicio.
- OBJECT_ROLE: Elige una de las siguientes opciones según tus opciones de transferencia:
objectViewer: Si se conservan los objetos de origen.objectUser: Si se borran los objetos de origen después de la transferencia.objectAdminSi se conservan las ACL de los objetos. También admite borrar objetos de origen después de la transferencia.
API de REST
Genera un token de acceso para autenticar tu solicitud. Si usas la CLI de
gcloud, ejecuta lo siguiente:gcloud auth print-access-token
Recupera la política de IAM del bucket existente (
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), agrega las siguientes vinculaciones a su arraybindingsy guarda la política combinada comosource_policy.json:{ "bindings": [ { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
Reemplaza lo siguiente:
- SERVICE_AGENT_EMAIL: Es el correo electrónico del agente de servicio.
- OBJECT_ROLE: Elige
objectViewersi quieres conservar los objetos de origen,objectUsersi quieres borrarlos oobjectAdminsi quieres conservar las LCA de los objetos.
Envía una solicitud
PUTconcurl:curl -X PUT --data-binary @source_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/BUCKET_NAME/iam"
Reemplaza lo siguiente:
- OAUTH2_TOKEN: Es el token de acceso de OAuth 2.0 generado en el paso 1.
- BUCKET_NAME: Es el nombre de tu bucket de origen.
Transferencia controlada por agentes
Los siguientes roles predefinidos otorgan al agente de servicio el acceso necesario al bucket de origen:
- Lector de buckets heredados de almacenamiento (
roles/storage.legacyBucketReader) - Creador de objetos de Storage (
roles/storage.objectCreator)
El siguiente rol otorga el acceso necesario en el bucket de origen a la cuenta del agente de transferencia:
- Visualizador de objetos de almacenamiento (
roles/storage.objectViewer) si se conservan los objetos de origen o Usuario de objetos de almacenamiento (roles/storage.objectUser) si se borran los objetos de origen después de la transferencia.
Otorga estos roles en el bucket de origen.
Console
- En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.
- Haz clic en el menú Menú ampliado del bucket () del bucket de origen y selecciona Editar acceso.
- Haz clic en + Agregar principal.
- En Principales nuevas, ingresa el correo electrónico de tu agente de servicio.
- Selecciona
Storage Legacy Bucket ReaderyStorage Object Creatoren los menús desplegables Selecciona un rol. - Vuelve a hacer clic en + Agregar principal.
- Ingresa el correo electrónico de tu cuenta de agente de transferencia. Esta es la cuenta de usuario o de servicio que se usa cuando se instalan agentes de transferencia. Por ejemplo,
my-agent-sa@PROJECT_ID.ouser@example.com. - Selecciona
Storage Object Viewersi quieres conservar los objetos de origen oStorage Object Usersi quieres borrarlos después de la transferencia. - Haz clic en Guardar.
gcloud
Otorga roles de lectura de metadatos de bucket y de escritura de registros de transferencia al agente de servicio:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReadergcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreatorOtorga roles de acceso a objetos a la cuenta del agente de transferencia:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.OBJECT_ROLEReemplaza lo siguiente:
- BUCKET_NAME: Es el nombre de tu bucket de origen.
- SERVICE_AGENT_EMAIL: Es el correo electrónico del agente de servicio.
- serviceAccount_OR_user: Especifica
serviceAccountsi tu cuenta de agente de transferencia es una cuenta de servicio ousersi tus agentes se instalaron con una cuenta de usuario. - TRANSFER_AGENT_ACCOUNT: Es el correo electrónico de la cuenta que
instaló tus agentes de transferencia. Por ejemplo,
my-agent-sa@PROJECT_ID.ouser@example.com. - OBJECT_ROLE: Especifica
objectViewersi se conservan los objetos de origen oobjectUsersi se borran después de la transferencia.
API de REST
Genera un token de acceso para autenticar tu solicitud. Si usas la CLI de
gcloud, ejecuta lo siguiente:gcloud auth print-access-token
Recupera la política de IAM del bucket existente (
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), agrega las siguientes vinculaciones a su arraybindingsy guarda la política combinada comoagent_source_policy.json:{ "bindings": [ { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"] } ] }
Reemplaza lo siguiente:
- SERVICE_AGENT_EMAIL: Es el correo electrónico del agente de servicio.
- serviceAccount_OR_user: Especifica
serviceAccountsi tu cuenta de agente de transferencia es una cuenta de servicio ousersi tus agentes se instalaron con una cuenta de usuario. - TRANSFER_AGENT_ACCOUNT: Es el correo electrónico de la cuenta que
instaló tus agentes de transferencia. Por ejemplo,
my-agent-sa@PROJECT_ID.ouser@example.com. - OBJECT_ROLE: Especifica
objectViewersi se conservan los objetos de origen oobjectUsersi se borran después de la transferencia.
Actualiza la política del bucket con
curl:curl -X PUT --data-binary @agent_source_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/BUCKET_NAME/iam"Reemplaza lo siguiente:
- OAUTH2_TOKEN: Es el token de acceso de OAuth 2.0 generado en el paso 1.
- BUCKET_NAME: Es el nombre de tu bucket de origen.
Transferencias de Cloud Storage entre proyectos
Para transferir objetos entre buckets de Cloud Storage en diferentes proyectos de Google Cloud, debes otorgar permisos al agente de servicio del proyecto que crea la transferencia tanto en el bucket de origen como en el de destino.
La cuenta de usuario o la cuenta de servicio administrada por el usuario que crea la transferencia solo necesita permisos en el proyecto desde el que se crea el trabajo de transferencia.
Para otorgar roles para transferencias entre proyectos, haz lo siguiente:
- Obtén el correo electrónico del agente de servicio del proyecto que ejecutará la transferencia. Consulta Busca el correo electrónico del agente de servicio.
- En el bucket de origen, otorga los siguientes roles a ese agente de servicio:
- Lector de buckets heredados de almacenamiento (
roles/storage.legacyBucketReader) - Además de uno de los siguientes roles de objeto:
- Visualizador de objetos de Storage (
roles/storage.objectViewer) si se conservan los objetos de origen - Usuario de objetos de almacenamiento (
roles/storage.objectUser) si se borran los objetos de origen después de la transferencia (deleteObjectsFromSourceAfterTransfer). - Administrador de objetos de almacenamiento (
roles/storage.objectAdmin) si se conservan las LCA de objetos (ACL_PRESERVE). También admite la eliminación de objetos de origen después de la transferencia.
- Visualizador de objetos de Storage (
- Lector de buckets heredados de almacenamiento (
- En el bucket de destino, otorga los siguientes roles al mismo agente de servicio:
- Lector de buckets heredados de almacenamiento (
roles/storage.legacyBucketReader) - Usuario de objetos de almacenamiento (
roles/storage.objectUser) o Administrador de objetos de almacenamiento (roles/storage.objectAdmin) si se conservan las LCA de los objetos (ACL_PRESERVE).
- Lector de buckets heredados de almacenamiento (
Para obtener instrucciones paso a paso sobre cómo otorgar acceso al bucket de destino, consulta Configura el acceso a un receptor: Cloud Storage.
Restricciones de la organización
Si tu organización aplicó restricciones de la política de la organización, asegúrate de que permitan el acceso de agente de servicio entre proyectos:
- Uso compartido restringido por dominio (
constraints/iam.allowedPolicyMemberDomains): La política del proyecto que aloja el bucket debe permitir los dominios de miembros que contienen el agente de servicio. Consulta Restringe dominios. - Inhabilitar el uso de cuentas de servicio entre proyectos (
constraints/iam.disableCrossProjectServiceAccountUsage): Asegúrate de que esta restricción no bloquee el acceso a las cuentas de servicio entre proyectos. Consulta Restringe las cuentas de servicio. - Controles del servicio de VPC: Si los buckets pertenecen a diferentes perímetros de servicio, configura reglas de entrada y salida para permitir la comunicación de transferencia. Consulta Configura los Controles del servicio de VPC para las transferencias de almacenamiento de objetos en la nube.
Referencia de permisos detallados
Selecciona tu tipo de transferencia para ver los roles y permisos requeridos.
Transferencia sin agentes
En el caso de las transferencias sin agentes, se deben otorgar permisos al agente de servicio del Servicio de transferencia de almacenamiento:
| Permiso | Descripción |
|---|---|
storage.buckets.get |
Permite que el agente de servicio obtenga la ubicación del bucket. |
storage.objects.list |
Permite que el agente de servicio enumere los objetos en el bucket. |
storage.objects.get |
Permite que la cuenta de servicio lea los objetos en el bucket. |
storage.objects.delete |
Permite que el agente de servicio borre objetos en el bucket. Obligatorio si deleteObjectsFromSourceAfterTransfer es true. |
storage.objects.getIamPolicy |
Permite leer las LCA en los objetos de origen. Es obligatorio si está habilitada la preservación de LCA de objetos (ACL_PRESERVE). |
storage.folders.liststorage.folders.get |
Permite enumerar y leer carpetas. Es obligatorio cuando se transfiere desde un bucket con el espacio de nombres jerárquico habilitado. |
Transferencia controlada por agentes
En el caso de las transferencias controladas por agentes desde una fuente de Cloud Storage, los permisos se dividen entre dos principales:
Agente de servicio: Requiere acceso de lectura a nivel del bucket para resolver los metadatos y la ubicación del bucket, además de acceso para crear objetos y escribir registros de transferencia del agente.
Cuenta de agente de transferencia: Es la cuenta de servicio o de usuario que se usa para crear los agentes de transferencia.
Permisos del agente de servicio
| Permiso | Descripción |
|---|---|
storage.buckets.get |
Permite que el agente de servicio inspeccione los metadatos y la ubicación del bucket. |
storage.objects.create |
Permite que el agente de servicio escriba registros de transferencia del agente en el bucket de origen cuando se transfiere de Cloud Storage a un sistema de archivos. |
Permisos de la cuenta del agente de transferencia
| Permiso | Descripción |
|---|---|
storage.objects.list |
Permite que los agentes enumeren objetos en el bucket de origen. |
storage.objects.get |
Permite que los agentes lean objetos del bucket de origen. |
storage.objects.delete |
Permite que los agentes borren objetos de origen si
deleteObjectsFromSourceAfterTransfer está habilitado. |
storage.folders.liststorage.folders.get |
Permite que los agentes enumeren y lean carpetas cuando se transfieren desde un bucket con el espacio de nombres jerárquico habilitado. |
¿Qué sigue?
Debes configurar el acceso a tu destino: