El Servicio de transferencia de Storage usa una cuenta de servicio gestionada por Google, conocida como agente de servicio, para transferir datos desde un segmento de origen de Cloud Storage. Este agente de servicio se crea la primera vez que llamas al googleServiceAccounts.get
.
El segmento de origen no tiene por qué pertenecer al mismo proyecto que el agente de servicio. Los pasos son los mismos independientemente del proyecto en el que se encuentre el segmento.
Permisos de usuario
Para conceder los permisos necesarios al agente de servicio, debes tener los permisos pertinentes en el bucket de origen:
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
El rol Propietario de segmentos heredados de Storage (roles/storage.legacyBucketOwner
) o el rol Administrador de Storage (roles/storage.admin
) proporcionan los permisos necesarios.
Conceder permisos automáticamente en la consola Google Cloud
Si usas la consola de Google Cloud para crear la transferencia y tienes los permisos que se indican en Permisos de usuario, se concederán automáticamente al agente de servicio los permisos necesarios en tu segmento de origen.
Puedes saltarte los pasos de esta página e ir directamente a crear una transferencia.
Permisos obligatorios
El agente de servicio debe tener los siguientes permisos en el bucket de origen:
Permiso | Descripción |
---|---|
storage.buckets.get |
Permite que el agente de servicio obtenga la ubicación del segmento. |
storage.objects.list |
Permite que el agente de servicio muestre los objetos del segmento. |
storage.objects.get |
Permite que el agente de servicio lea objetos del segmento. |
storage.objects.create |
Permite que el agente de servicio cree objetos en el segmento. Obligatorio si la transferencia es a un sistema de archivos. Servicio de transferencia de Storage crea y rellena dos carpetas en el contenedor de origen: |
storage.objects.delete |
Permite que el agente de servicio elimine objetos del segmento. Obligatorio si asignas el valor true a deleteObjectsFromSourceAfterTransfer .
|
Los siguientes roles predefinidos conceden los permisos necesarios:
- Una de las siguientes:
- Lector de objetos de Storage (
roles/storage.objectViewer
) si la transferencia es a otro segmento de Cloud Storage. - Creador de objetos de Storage (
roles/storage.objectCreator
) si la transferencia es a un sistema de archivos.
- Lector de objetos de Storage (
- Además de una de las siguientes opciones:
- Editor de segmentos heredados de Storage (
roles/storage.legacyBucketWriter
) si se necesita permiso para eliminar objetos. - Lector de segmentos heredados de Storage (
roles/storage.legacyBucketReader
) si no se necesita permiso para eliminar objetos.
- Editor de segmentos heredados de Storage (
Los roles de Cloud Storage marcados como legacy
solo se pueden conceder a nivel de segmento.
Para ver una lista completa de los roles de Cloud Storage y los permisos que contienen, consulta Roles de gestión de identidades y accesos.
En el caso de las LCA de objetos, cuando se define ACL_PRESERVE, también se necesita el rol Propietario de objetos antiguos de Storage (roles/storage.legacyObjectOwner
) para el objeto de origen. En ACL_PRESERVE, añade manualmente la cuenta de servicio para que tenga el rol Propietario de objeto antiguo de Storage y, así, conceder el permiso storage.objects.getIamPolicy
al objeto de origen.
Concede los permisos necesarios
Para conceder los permisos necesarios al agente de servicio, sigue estos pasos.
Buscar el correo del agente de servicio
Ve a la página de referencia de
googleServiceAccounts.get
.Se abrirá un panel interactivo titulado Prueba este método.
En el panel, en Parámetros de solicitud, introduce tu ID de proyecto. El proyecto que especifiques aquí debe ser el que utilices para gestionar el Servicio de transferencia de Storage, que puede ser diferente del proyecto del segmento de origen.
Haz clic en la opción para ejecutar.
La dirección de correo de tu agente de asistencia se devuelve como el valor de
accountEmail
. Copia este valor.El correo del agente de servicio utiliza el formato
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
.
Añade el agente de servicio a una política a nivel de contenedor
Consola
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
Haz clic en el menú Desbordamiento de contenedor (
) asociado al contenedor al que quieras asignar un rol a un principal.Selecciona Editar acceso.
Haz clic en el botón + Añadir principal.
En el campo Nuevos principales, introduce la dirección de correo de la cuenta de tu agente de servicio.
Selecciona
Storage Object Viewer
oStorage Object Creator
en el menú desplegable Seleccionar un rol.Haz clic en Añadir otro rol.
Selecciona
Storage Legacy Bucket Writer
oStorage Legacy Bucket Reader
.Haz clic en Guardar.
gcloud
Usa el comando gcloud storage buckets add-iam-policy-binding
:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.legacyBucketReader
Donde:
BUCKET_NAME
es el nombre del segmento al que le estás dando acceso al principal. Por ejemplo,my-bucket
.YOUR_AGENT_EMAIL
es la dirección de correo de la cuenta del agente que has copiado en Buscar el correo del agente de servicio.
Códigos de ejemplo
C++
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API C++ de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
C#
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API C# de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Go
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API Go de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Java
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API Java de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API Node.js de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
PHP
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API PHP de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Python
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API Python de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Ruby
Para saber cómo instalar y usar la biblioteca de cliente de Cloud Storage, consulta las bibliotecas de cliente de Cloud Storage. Para obtener más información, consulta la documentación de referencia de la API Ruby de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
JSON
Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado
Authorization
.Crea un archivo JSON que contenga la siguiente información:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":[ "YOUR_AGENT_EMAIL" ] }, { "role": "roles/storage.legacyBucketReader", "members":[ "YOUR_AGENT_EMAIL" ] } ] }
Donde:
Usa
cURL
para llamar a la API JSON con una solicitudPUT setIamPolicy
:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
Donde:
JSON_FILE_NAME
es la ruta del archivo que has creado en el paso 2.OAUTH2_TOKEN
es el token de acceso que has generado en el paso 1.BUCKET_NAME
es el nombre del segmento al que quieres dar acceso al principal. Por ejemplo,my-bucket
.