El Servicio de transferencia de almacenamiento puede usar un bucket de destino (receptor) de Cloud Storage en dos tipos de transferencia:
Transferencias sin agentes: Transferencias de nube a nube, como AWS S3, Azure Blob Storage o Cloud Storage a Cloud Storage. Los permisos se otorgan al agente de servicio del Servicio de transferencia de almacenamiento.
Transferencias controladas por agentes: Son transferencias de sistemas de archivos, HDFS o almacenamiento compatible con S3 a Cloud Storage que usan agentes de transferencia y grupos de agentes. 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 usuario necesarios, se le otorgarán automáticamente al agente de servicio los permisos necesarios en tu bucket de destino.
Puedes omitir los pasos en esta página. Si es necesario, configura el acceso a tu fuente 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 destino 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 destino al 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).
Agrega el agente de servicio a la política de IAM del bucket de destino:
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 destino.
- 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
Storage Object UseroStorage Object Adminsi se conservan las LCA de los objetos. - 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.OBJECT_ROLE
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
Reemplaza lo siguiente:
- BUCKET_NAME: Es el nombre de tu bucket de destino.
- SERVICE_AGENT_EMAIL: Es el correo electrónico del agente de servicio.
- OBJECT_ROLE: Especifica
objectUserde forma predeterminada oobjectAdminsi se conservan las LCA de los objetos (ACL_PRESERVE).
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 comosink_policy.json:{ "bindings": [ { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
Reemplaza lo siguiente:
- SERVICE_AGENT_EMAIL: Es el correo electrónico del agente de servicio.
- OBJECT_ROLE: Especifica
objectUserde forma predeterminada oobjectAdminsi se conservan las LCA de los objetos (ACL_PRESERVE).
Envía una solicitud
PUTconcurl:curl -X PUT --data-binary @sink_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 destino.
Transferencia controlada por agentes
Los siguientes roles predefinidos otorgan al agente de servicio el acceso necesario al bucket de destino:
- Creador de objetos de Storage (
roles/storage.objectCreator) - Storage Object Viewer (
roles/storage.objectViewer) - Lector de buckets heredados de almacenamiento (
roles/storage.legacyBucketReader)
El siguiente rol otorga el acceso necesario en el bucket de destino a la cuenta del agente de transferencia:
- Usuario de objetos de almacenamiento (
roles/storage.objectUser)
Otorga estos roles en el bucket de destino.
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 destino y selecciona Editar acceso.
- Haz clic en + Agregar principal.
- En Principales nuevas, ingresa el correo electrónico de tu agente de servicio.
- Selecciona
Storage Object Creator,Storage Object VieweryStorage Legacy Bucket Readeren el menú desplegable 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 Useren el menú desplegable Selecciona un rol. - Haz clic en Guardar.
gcloud
Otorga roles de registro y visualizador al agente de servicio:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreatorgcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewergcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReaderOtorga roles de escritura y administración 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.objectUserReemplaza lo siguiente:
- BUCKET_NAME: Es el nombre de tu bucket de destino.
- 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.
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_sink_policy.json:{ "bindings": [ { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectViewer", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectUser", "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.
Actualiza la política del bucket con
curl:curl -X PUT --data-binary @agent_sink_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 destino.
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 inspeccione los metadatos y la ubicación del bucket. |
storage.objects.create |
Permite que el agente de servicio escriba objetos transferidos en el bucket de destino. |
storage.objects.get |
Permite ver los objetos y metadatos existentes. Es obligatorio si tu transferencia está configurada para reemplazar objetos en el receptor cuando son diferentes o nunca. |
storage.objects.list |
Permite enumerar objetos en el bucket de destino. Es obligatorio si se verifica si los objetos ya existen en el receptor. |
storage.objects.delete |
Permite borrar objetos en el bucket de destino. Es obligatorio si están habilitadas las opciones de reemplazo o eliminación de objetos únicos. |
storage.objects.setIamPolicy |
Permite configurar las LCA de objetos en el bucket de destino. Es obligatorio si está habilitada la preservación de LCA de objetos (ACL_PRESERVE). |
storage.folders.createstorage.folders.get |
Permite crear y leer carpetas. Es obligatorio cuando se transfiere a un bucket de destino con el espacio de nombres jerárquico habilitado. |
Transferencia controlada por agentes
Para las transferencias controladas por agentes a un destino de Cloud Storage, los permisos se dividen entre dos principales:
Agente de servicio: Requiere permisos para escribir registros de transferencia y verificar la existencia de objetos en el bucket de destino.
Cuenta de agente de transferencia: Es la cuenta de servicio o de usuario que ejecuta los agentes de transferencia que escriben archivos en Cloud Storage.
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 crear registros de transferencia en el bucket. |
storage.objects.get |
Permite verificar si los objetos ya se transfirieron. |
Permisos de la cuenta del agente de transferencia
| Permiso | Descripción |
|---|---|
storage.objects.create |
Permite que los agentes escriban objetos en el bucket de destino durante la transferencia. |
storage.objects.get |
Permite que los agentes lean los datos y metadatos de los objetos en el bucket de destino. |
storage.objects.list |
Permite que los agentes enumeren los objetos existentes en el bucket de destino. |
storage.objects.delete |
Es obligatorio si tu transferencia está configurada para reemplazar o borrar objetos en el receptor. |
storage.multipartUploads.createstorage.multipartUploads.abortstorage.multipartUploads.listPartsstorage.multipartUploads.list |
Permite que los agentes realicen cargas de varias partes para archivos grandes. Se incluye automáticamente en roles/storage.objectUser. |
storage.folders.createstorage.folders.get |
Permite que los agentes creen y lean carpetas cuando se transfieren a un bucket de destino con el espacio de nombres jerárquico habilitado. |
¿Qué sigue?
- Obtén más información para configurar el acceso a una fuente.
- Obtén información para crear transferencias.
- Revisa la referencia de roles y permisos.