Configura el acceso a un receptor: Cloud Storage

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:

  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 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

  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 destino.
  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 Storage Object User o Storage Object Admin si se conservan las LCA de los objetos.
  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.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 objectUser de forma predeterminada o objectAdmin si se conservan las LCA de los objetos (ACL_PRESERVE).

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 sink_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:

  3. Envía una solicitud PUT con curl:

    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

  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 destino 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 Object Creator, Storage Object Viewer y Storage Legacy Bucket Reader en el menú desplegable 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 User en el menú desplegable Selecciona un rol.
  9. Haz clic en Guardar.

gcloud

  1. 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.objectCreator
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewer
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
  2. Otorga 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.objectUser

    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.
    • 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.

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_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 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.
  3. 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.create
storage.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.create
storage.multipartUploads.abort
storage.multipartUploads.listParts
storage.multipartUploads.list
Permite que los agentes realicen cargas de varias partes para archivos grandes. Se incluye automáticamente en roles/storage.objectUser.
storage.folders.create
storage.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?