Configura el acceso a una fuente: Cloud Storage

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:

  1. Ve a la página de referencia de googleServiceAccounts.get. Se abrirá un panel interactivo con el título Prueba este método.
  2. En el panel, en Parámetros de solicitud, ingresa el ID del proyecto.
  3. 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.

Agrega el agente de servicio a la política de IAM del bucket de origen:

Console

  1. En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. Haz clic en el menú Ampliado del bucket () del bucket de origen.
  3. Elige Editar acceso.
  4. Haz clic en + Agregar principal.
  5. En Principales nuevas, ingresa el correo electrónico de tu agente de servicio.
  6. Selecciona Storage Legacy Bucket Reader en el menú desplegable Selecciona un rol.
  7. Haz clic en Agregar otro rol y selecciona una de las siguientes opciones:
    • Storage Object Viewer
    • Storage Object User
    • Storage Object Admin
  8. 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

  1. Genera un token de acceso para autenticar tu solicitud. Si usas la CLI de gcloud, ejecuta lo siguiente:

    gcloud auth print-access-token
  2. 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 array bindings y guarda la política combinada como source_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 objectViewer si quieres conservar los objetos de origen, objectUser si quieres borrarlos o objectAdmin si quieres conservar las LCA de los objetos.
  3. Envía una solicitud PUT con curl:

    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

  1. En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. Haz clic en el menú Menú ampliado del bucket () del bucket de origen y selecciona Editar acceso.
  3. Haz clic en + Agregar principal.
  4. En Principales nuevas, ingresa el correo electrónico de tu agente de servicio.
  5. Selecciona Storage Legacy Bucket Reader y Storage Object Creator en los menús desplegables Selecciona un rol.
  6. Vuelve a hacer clic en + Agregar principal.
  7. 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. o user@example.com.
  8. Selecciona Storage Object Viewer si quieres conservar los objetos de origen o Storage Object User si quieres borrarlos después de la transferencia.
  9. Haz clic en Guardar.

gcloud

  1. 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.legacyBucketReader
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
  2. Otorga 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_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.
    • serviceAccount_OR_user: Especifica serviceAccount si tu cuenta de agente de transferencia es una cuenta de servicio o user si 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. o user@example.com.
    • OBJECT_ROLE: Especifica objectViewer si se conservan los objetos de origen o objectUser si se borran después de la transferencia.

API de REST

  1. Genera un token de acceso para autenticar tu solicitud. Si usas la CLI de gcloud, ejecuta lo siguiente:

    gcloud auth print-access-token
  2. 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 array bindings y guarda la política combinada como agent_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 serviceAccount si tu cuenta de agente de transferencia es una cuenta de servicio o user si 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. o user@example.com.
    • OBJECT_ROLE: Especifica objectViewer si se conservan los objetos de origen o objectUser si se borran después de la transferencia.
  3. 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:

  1. 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.
  2. 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.
  3. 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).

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.list
storage.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.list
storage.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: