Antes de crear una transferencia basada en agentes, debes configurar los permisos para las siguientes entidades:
La cuenta de usuario o de servicio administrada por el usuario que se usa para crear la transferencia. Esta es la cuenta con la que se accedió a la consola de Google Cloud o la cuenta que se especificó cuando se realizó la autenticación en la CLI de
gcloud. La cuenta de usuario puede ser una cuenta de usuario normal o una cuenta de servicio administrada por el usuario.La cuenta de servicio administrada por Google, también conocida como agente de servicio, que usa el Servicio de transferencia de almacenamiento. Por lo general, esta cuenta se identifica por su dirección de correo electrónico, que usa el formato
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.La cuenta del agente de transferencia que proporciona permisos de Google Cloud para los agentes de transferencia. Las cuentas de los agentes de transferencia usan las credenciales del usuario que los instala o las credenciales de una cuenta de servicio administrada por el usuario para autenticarse.
Para obtener más información sobre cómo otorgar roles de IAM, consulta Otorga, cambia y revoca el acceso a los recursos.
El método más sencillo para otorgar permisos
La CLI de gcloud se puede usar para otorgar los permisos necesarios a la cuenta de servicio administrada por el usuario o el usuario, y a la cuenta de servicio administrada por Google.
Estos permisos permiten al usuario crear, editar y borrar trabajos de transferencia, y establecer o modificar límites de ancho de banda.
Si estos permisos son demasiado amplios para las políticas de tu organización, consulta las secciones posteriores de este documento para conocer los permisos mínimos que requiere el Servicio de transferencia de almacenamiento.
Para inspeccionar los permisos existentes y mostrar los roles faltantes, ejecuta el siguiente comando:
gcloud transfer authorize
Para aplicar esos roles automáticamente, usa la marca --add-missing:
gcloud transfer authorize --add-missing
Para otorgar permisos a una cuenta de servicio administrada por el usuario, pasa el archivo de clave de la cuenta de servicio:
gcloud transfer authorize --add-missing --creds-file=path/to/key.json
Para obtener instrucciones sobre cómo crear una cuenta de servicio, consulta Crea y administra cuentas de servicio.
El comando otorga los siguientes permisos.
Para el usuario o la cuenta de servicio administrada por el usuario:
roles/ownerroles/storagetransfer.adminroles/storagetransfer.transferAgentroles/storage.objectAdminroles/pubsub.editor
Para la cuenta de servicio administrada por Google, haz lo siguiente:
roles/storage.adminroles/storagetransfer.serviceAgent
Para obtener instrucciones sobre cómo instalar la CLI de gcloud, consulta la guía de inicio rápido de gcloud.
Permisos de la cuenta de usuario o de la cuenta de servicio administrada por el usuario
En esta sección, se abordan los roles necesarios para las cuentas que administran y ejecutan transferencias. Los requisitos de tu organización determinarán los roles exactos para cada arquetipo. En esta sección, se supone que crearás un administrador y un usuario.
Cuentas de administrador
Las cuentas de administrador del Servicio de transferencia de almacenamiento administran los agentes de transferencia, establecen límites de uso de ancho de banda y borran trabajos de transferencia.
Para configurar una cuenta de administrador, asigna los siguientes permisos y roles de IAM:
| Función / Permiso | Qué hace | Notas |
|---|---|---|
resourcemanager.projects.getIamPolicy |
Este permiso se usa a fin de confirmar que la cuenta de servicio administrada por Google tenga los permisos necesarios para una transferencia. | Para otorgar este permiso, otorga el rol predefinido Role Viewer (roles/iam.roleViewer) o crea un rol personalizado con este único permiso y otórgalo. |
Administrador de transferencia de almacenamiento (roles/storagetransfer.admin) |
Habilita las acciones administrativas en el proyecto de transferencia, como la configuración del proyecto y la supervisión de agentes. | Para obtener una lista detallada de los permisos otorgados, consulta Roles predefinidos del Servicio de transferencia de almacenamiento. |
Cuentas de usuario
Las cuentas de usuario del Servicio de transferencia de almacenamiento se usan para crear y ejecutar transferencias. Por lo general, estas cuentas no tienen acceso para borrar trabajos de transferencia.
Una cuenta de usuario puede ser un usuario de la consola Google Cloud o una cuenta de servicio. Si usas una cuenta de servicio, el método que uses para pasar las credenciales al Servicio de transferencia de almacenamiento variará según la interfaz que uses.
Para configurar una cuenta de usuario, asigna los siguientes permisos y roles a la cuenta:
| Función / Permiso | Qué hace | Notas |
|---|---|---|
resourcemanager.projects.getIamPolicy |
Se usa con el fin de confirmar que la cuenta de servicio administrada por Google tenga los permisos de Pub/Sub necesarios para una transferencia. | Para otorgar este permiso, otorga el rol predefinido Role Viewer (roles/iam.roleViewer) o crea un rol personalizado con este único permiso y otórgalo. |
Usuario de transferencia de almacenamiento (roles/storagetransfer.user) |
Permite que el usuario cree, obtenga, actualice y enumere las transferencias. | Para obtener una lista detallada de los permisos otorgados, consulta Roles predefinidos del Servicio de transferencia de almacenamiento. |
Permisos de cuentas de servicio administradas por Google
El Servicio de transferencia de almacenamiento usa una cuenta de servicio administrada por Google para mover tus datos. Esta cuenta de servicio se crea de forma automática la primera vez que creas un trabajo de transferencia, llamas a googleServiceAccounts.get o visitas la página de creación de trabajos en la consola deGoogle Cloud .
El formato de la cuenta de servicio suele ser project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
Para recuperar el identificador de tu cuenta de servicio, usa la llamada a la API de
googleServiceAccounts.get.
Asignación automática de roles
Existen dos formas de asignar automáticamente los roles correctos a la cuenta de servicio administrada por Google:
Crea tu transferencia con la consola de Google Cloud . La consola aplica automáticamente los permisos necesarios.
Usa
gcloud transfer authorize --add-missing. Consulta El método más sencillo para otorgar permisos.
Asignación manual de roles
Asigna los siguientes roles, o los permisos equivalentes, a la cuenta de servicio administrada por Google para permitir que acceda a los recursos necesarios para completar las transferencias.
| Función / Permiso | Qué hace | Notas |
|---|---|---|
Creador de objetos de almacenamiento (roles/storage.objectCreator) |
Habilita el Servicio de transferencia de almacenamiento para crear registros de transferencia en el bucket de Cloud Storage conectado a esta transferencia. |
Otorga acceso a todos los depósitos de Cloud Storage que se usaron en una transferencia. Si es adecuado para tu situación, puedes otorgar el rol a nivel de proyecto al proyecto desde el que se ejecuta el Servicio de transferencia de almacenamiento.
Para obtener una lista detallada de los permisos que otorgan estos roles, consulta Roles predefinidos de Cloud Storage. |
Visualizador de objetos de almacenamiento (roles/storage.objectViewer) |
Habilita el Servicio de transferencia de almacenamiento para determinar si ya se transfirió un archivo desde o hacia Cloud Storage. | |
Agente de Storage Transfer Service
(roles/storagetransfer.serviceAgent)
|
Permite que el Servicio de transferencia de almacenamiento cree y modifique automáticamente temas de Pub/Sub para comunicarse desde Google Cloud a los agentes de transferencia. |
Aplica el rol a nivel de proyecto al proyecto desde el que se ejecuta el Servicio de transferencia de almacenamiento.
Para obtener una lista detallada de los permisos que otorga este rol, consulta Permisos y roles. |
Lector de buckets heredados de almacenamiento (roles/storage.legacyBucketReader) |
Permite que el Servicio de transferencia de almacenamiento lea los metadatos del bucket de Cloud Storage. |
Se otorga a cada bucket de Cloud Storage que se usa en una transferencia. Los roles |
Consulta Otorga los permisos necesarios para obtener instrucciones.
Permisos de la cuenta del agente de transferencia
Los agentes de transferencia del Servicio de transferencia de almacenamiento se pueden ejecutar con la cuenta del usuario o con una cuenta de servicio.
Para configurar una cuenta de servicio del agente de transferencia o una cuenta de usuario que ejecute los agentes de transferencia, asigna el siguiente rol:
| Función / Permiso | Qué hace | Notas |
|---|---|---|
Agente de transferencia de almacenamiento (roles/storagetransfer.transferAgent) |
Otorga a los agentes de transferencia el permiso de Servicio de transferencia de almacenamiento y Pub/Sub necesarios para completar una transferencia. |
Otorga este rol al usuario o la cuenta de servicio que usan los agentes.
Para obtener una lista detallada de los permisos que otorga este rol, consulta Control de acceso con IAM. |
Permisos de origen y destino
También debes asegurarte de que la cuenta del agente tenga los permisos correctos para acceder a los datos de origen y escribir en el destino.
Del sistema de archivos, el almacenamiento compatible con S3 o HDFS a Cloud Storage
Si el destino de tu transferencia es un bucket de Cloud Storage, el agente de transferencia necesita los siguientes permisos en el bucket de destino. Consulta Agrega una principal a una política de nivel de bucket para obtener instrucciones.
| Permiso | Descripción |
|---|---|
storage.objects.create |
Permite que la cuenta del agente escriba objetos de Cloud Storage durante la transferencia. |
storage.objects.get |
Permite que la cuenta del agente lea los datos y metadatos de los objetos. |
storage.objects.list |
Permite que la cuenta del agente enumere objetos en el bucket de Cloud Storage. |
storage.objects.delete |
Es obligatorio si tu transferencia está configurada para reemplazar o borrar objetos en el receptor. Por ejemplo, si overwriteObjectsAlreadyExistingInSink o deleteObjectsUniqueInSink se establecen en la configuración de transferOptions de tu transferencia. |
Para otorgar estos permisos, otorga el siguiente rol:
- Storage Object Admin (
roles/storage.objectAdmin)
O bien, crea un rol personalizado con los permisos específicos y otórgalo.
Se requieren permisos adicionales para habilitar las cargas multiparte.
De Cloud Storage al sistema de archivos
Si la fuente de tu transferencia es un bucket de Cloud Storage, el agente de transferencia necesita el siguiente permiso en el bucket de origen.
| Permiso | Descripción |
|---|---|
storage.objects.create |
Permite que la cuenta del agente escriba registros de transferencia y metadatos relacionados con la transferencia en el bucket de origen de Cloud Storage. |
storage.objects.get |
Permite que la cuenta del agente lea los datos y metadatos de los objetos. |
storage.objects.list |
Permite que la cuenta del agente enumere objetos en el bucket de Cloud Storage. |
storage.objects.delete |
Es obligatorio si tu transferencia está configurada para borrar objetos de la fuente. Consulta
deleteObjectsFromSourceAfterTransfer. |
Para otorgar este permiso, otorga el siguiente rol:
- Storage Object Viewer (
roles/storage.objectViewer)
O bien, crea un rol personalizado con ese único permiso y otórgalo.
De un sistema de archivos a otro
Si tu transferencia está entre dos sistemas de archivos, el agente de transferencia necesita los siguientes permisos en el bucket intermedio.
| Permiso | Descripción |
|---|---|
storage.objects.create |
Permite que la cuenta del agente escriba objetos de Cloud Storage durante la transferencia. |
storage.objects.get |
Permite que la cuenta del agente lea los datos y metadatos de los objetos. |
storage.objects.list |
Permite que la cuenta del agente enumere objetos en el bucket de Cloud Storage. |
storage.objects.delete |
Es obligatorio si tu transferencia está configurada para borrar objetos en el bucket intermedio después de que se complete la transferencia. |
Para otorgar estos permisos, otorga el siguiente rol:
- Storage Object Admin (
roles/storage.objectAdmin)
O bien, crea un rol personalizado con los permisos específicos y otórgalo.
Se requieren permisos adicionales para habilitar las cargas multiparte.
Cargas multiparte
Para habilitar las cargas de varias partes para las transferencias de sistema de archivos a Cloud Storage o entre sistemas de archivos, otorga también los siguientes permisos al agente.
- Para las transferencias a Cloud Storage, asigna los permisos al bucket de destino.
- Para las transferencias entre sistemas de archivos, asigna los permisos al bucket intermedio.
| Nombre del permiso de carga multiparte | Descripción |
|---|---|
storage.multipartUploads.create |
Sube objetos en varias partes. |
storage.multipartUploads.abort |
Anula las sesiones de carga multiparte. |
storage.multipartUploads.listParts |
Enumera las partes de objeto subidas en una sesión de carga multiparte. |
storage.multipartUploads.list |
Enumera las sesiones de carga multiparte en un bucket. |
Para otorgar estos permisos, otorga el siguiente rol:
- Storage Object Admin (
roles/storage.objectAdmin)
O bien, crea un rol personalizado con los permisos específicos y otórgalo.