Permisos de transferencia basada en agentes

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 legacy de Cloud Storage solo se pueden otorgar a nivel de bucket.

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:

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:

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:

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:

O bien, crea un rol personalizado con los permisos específicos y otórgalo.