Antes de crear una transferencia basada en agentes, debes configurar permisos para las siguientes entidades:
La cuenta de servicio administrada por el usuario o el usuario que se usa para crear la transferencia. Esta es la cuenta con la que accediste a la consola de Google Cloud o la cuenta que se especifica cuando se autentica 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 el 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 agente de transferencia usan las credenciales del usuario que las 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 funciones de IAM, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.
El método más simple 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 por el usuario y a la cuenta de servicio administrada por Google.
Con estos permisos, el usuario puede crear, editar y borrar trabajos de transferencia, y establecer o modificar los límites del 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, luego, mostrar las funciones que faltan, ejecuta el siguiente comando:
gcloud transfer authorize
Para aplicar esos roles de forma automática, 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 claves de la cuenta de servicio:
gcloud transfer authorize --add-missing --creds-file=path/to/key.json
Si quieres obtener instrucciones para crear una cuenta de servicio, consulta Cómo crear y administrar cuentas de servicio.
El comando otorga los siguientes permisos.
Para la cuenta de servicio administrada por el usuario o el usuario, haz lo siguiente:
roles/owner
roles/storagetransfer.admin
roles/storagetransfer.transferAgent
roles/storage.objectAdmin
roles/pubsub.editor
Para la cuenta de servicio administrada por Google, haz lo siguiente:
roles/storage.admin
roles/storagetransfer.serviceAgent
Consulta la guía de inicio rápido de gcloud
para obtener instrucciones sobre cómo instalar la CLI de gcloud
.
Permisos de la cuenta de servicio administrada por el usuario o el usuario
En esta sección, se describen las funciones necesarias para las cuentas que administran y ejecutan transferencias. Los requisitos de tu organización determinarán las funciones exactas 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 del ancho de banda y borran los 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 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 las funciones predefinidas 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 de 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 varía 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 al usuario crear, obtener, actualizar y enumerar transferencias. | Para obtener una lista detallada de los permisos otorgados, consulta las funciones predefinidas del Servicio de transferencia de almacenamiento. |
Permisos de cuenta de servicio administrada 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 Google Cloud Console.
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
googleServiceAccounts.get
.
Asigna roles automáticamente
Existen dos formas de asignar automáticamente las funciones correctas 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 artículo El método más simple para otorgar permisos.
Asigna roles de forma manual
A fin de permitir que la cuenta de servicio administrada por Google acceda a los recursos necesarios para completar las transferencias, asigna las siguientes funciones o permisos equivalentes a la cuenta de servicio.
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 Storage (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 Servicio de transferencia de almacenamiento
(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 esta función, 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.
Transferir permisos de la cuenta del agente
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.
Sistema de archivos, almacenamiento compatible con S3 o HDFS a Cloud Storage
Si tu destino de 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 de agente enumere los 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 de 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 de agente enumere los objetos en el bucket de Cloud Storage. |
storage.objects.delete |
Es obligatorio si tu transferencia está configurada para borrar objetos
del origen. 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 de agente enumere los 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
Si quieres habilitar las cargas multiparte para transferencias del sistema de archivos a Cloud Storage o transferencias entre sistemas de archivos, otorga, además, 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.