Para las transferencias sin agente, el Servicio de transferencia de almacenamiento usa de forma predeterminada un agente de servicio para transferir tus datos entre el origen y el destino. Otorgas permisos al agente de servicio para acceder a tus buckets de Cloud Storage.
Debido a que todas las transferencias dentro de un proyecto usan el mismo agente de servicio del Servicio de transferencia de almacenamiento, este debe tener permisos en todos los buckets involucrados en cada transferencia.
Como alternativa, puedes asignar permisos de bucket a varias cuentas de servicio administradas por el usuario. A estas cuentas de servicio administradas por el usuario se les otorgan permisos en buckets de origen y destino específicos, y también se restringen a cuentas de usuario específicas (las cuentas que crean o activan el trabajo de transferencia).
Situaciones de ejemplo
En las siguientes situaciones, se muestran diferentes opciones de permisos con el agente de servicio y las cuentas de servicio administradas por el usuario.
Expande cada sección para ver los detalles.
Situación 1: Solo agente de servicio
En esta situación, todos los permisos se otorgan al agente de servicio.
- Al agente de servicio se le otorgan permisos de escritura en los buckets A, B, C, y D.
Cualquier usuario con los permisos correctos para crear un trabajo de transferencia puede transferir datos hacia los buckets A, B, C y D, o desde ellos.
Esto funciona bien cuando el usuario del Servicio de transferencia de almacenamiento es un usuario de confianza para los datos en todos los buckets y puede configurar los trabajos de transferencia correctamente para evitar trasladar datos hacia el bucket incorrecto o desde él.
Situación 2: Solo agentes de servicio administrados por el usuario
En esta situación, todos los permisos se otorgan a las cuentas de servicio administradas por el usuario.
- A la cuenta de servicio administrada por el usuario n.° 1 se le otorgan permisos en los buckets A y B.
- A la cuenta de servicio administrada por el usuario n.° 2 se le otorgan permisos en los buckets C y D.
Además:
- El usuario Alfa tiene acceso a la cuenta de servicio n.° 1.
- El usuario Bravo tiene acceso a la cuenta de servicio n.° 2.
- El usuario Charlie tiene acceso a las cuentas de servicio n.° 1 y n.° 2.
En este caso, ocurre lo siguiente:
- Alfa solo puede transferir datos entre los buckets A y B.
- Bravo solo puede transferir datos entre los buckets C y D.
- Charlie solo puede transferir datos entre los buckets A y B, y entre C y D, solo.
- Charlie no puede transferir datos entre A y C, A y D, B y C, ni B y D.
Situación 3: Permisos mixtos
En esta situación, tu proyecto contiene una combinación de permisos de agente de servicio y permisos de cuenta de servicio administrada por el usuario.
- Al agente de servicio se le otorgan permisos de escritura en los buckets A y B.
- A la cuenta de servicio administrada por el usuario n.° 1 se le otorgan permisos de solo lectura en el bucket C y permisos de escritura en el bucket D.
- El usuario Alfa tiene acceso a la cuenta de servicio administrada por el usuario n.° 1.
En este caso, ocurre lo siguiente:
- Cualquier usuario con los permisos correctos para crear un trabajo de transferencia puede transferir datos hacia los buckets A y B, o desde ellos. No pueden transferir datos hacia el bucket C o D, ni desde ellos.
- El usuario Alfa puede transferir datos hacia los buckets A y B, o desde ellos.
- Alfa puede transferir datos desde el bucket C hacia el bucket D.
- Alfa no puede transferir hacia fuera del bucket C hacia el bucket A o B.
Descripción general de la implementación
La implementación es la siguiente:
- Crea una cuenta de servicio administrada por el usuario o usa una existente.
- Otorgas permisos:
- Para que un usuario acceda a la cuenta de servicio administrada por el usuario
- Para que el agente de servicio genere un token de acceso desde la cuenta de servicio administrada por el usuario
- Para que la cuenta de servicio administrada por el usuario acceda a tus buckets
- El usuario crea un trabajo de transferencia que especifica la cuenta de servicio administrada por el usuario.
- El Servicio de transferencia de almacenamiento verifica que el usuario tenga los permisos correctos en la cuenta de servicio. Si no se otorgaron los permisos correctos, falla la creación del trabajo de transferencia.
- El agente de servicio genera un token de OAuth en nombre de la cuenta de servicio administrada por el usuario. El token de OAuth permite que el Servicio de transferencia de almacenamiento acceda a los buckets involucrados en la transferencia.
- Se ejecuta el trabajo de transferencia.
- El token de OAuth tiene una vida útil corta y vence. Si el trabajo de transferencia está en progreso cuando vence el token, el Servicio de transferencia de almacenamiento genera uno nuevo y continúa con la transferencia.
Configura la delegación de permisos
Sigue las instrucciones para delegar el acceso del agente de servicio a una cuenta de servicio administrada por el usuario.
Requisitos
- Para crear una cuenta de servicio administrada por el usuario nueva, necesitas el rol de Creador de cuentas de servicio (
roles/iam.serviceAccountCreator) en el proyecto. - Para otorgar acceso al usuario y al agente de servicio a la cuenta de servicio administrada por el usuario, necesitas el rol de Administrador de cuenta de servicio (
roles/iam.serviceAccountAdmin) en la cuenta de servicio administrada por el usuario o en el proyecto.
Crea o identifica una cuenta de servicio administrada por el usuario
Puedes crear una cuenta de servicio administrada por el usuario nueva o usar una existente.
Para crear una cuenta de servicio administrada por el usuario, sigue las instrucciones en Crea cuentas de servicio.
Para usar una cuenta de servicio administrada por el usuario existente, necesitas su dirección de correo electrónico, que usa el siguiente formato:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Si la cuenta de servicio está en un proyecto diferente al del trabajo de transferencia, consulta Habilita la conexión de cuentas de servicio en todos los proyectos.
Otorga acceso al usuario
Otorga acceso a la cuenta de usuario a la nueva cuenta de servicio administrada por el usuario y asigna el rol de Usuario de cuenta de servicio (roles/iam.serviceAccountUser). La cuenta de usuario es la que se usa para crear o actualizar el trabajo de transferencia.
Google Cloud Consola de
En la Google Cloud consola de, ve a la página Cuentas de servicio.
Selecciona un proyecto.
Haz clic en la dirección de correo electrónico de la cuenta de servicio administrada por el usuario.
Selecciona la pestaña Principales con acceso.
Haz clic en Otorgar acceso.
Ingresa la dirección de correo electrónico del usuario. Por ejemplo,
user1@example.com.En la lista desplegable Rol, selecciona Usuario de cuenta de servicio.
Haz clic en Guardar. La función se otorgó a la principal en la cuenta de servicio.
gcloud
Para otorgar un rol a una entidad, ejecuta el
add-iam-policy-binding comando:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=PRINCIPAL --role=roles/iam.serviceAccountUser
Reemplaza las siguientes variables:
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio administrada por el usuario en el formato
SA_NAME@PROJECT_ID.iam.gserviceaccount.com. - PRINCIPAL: La dirección de correo electrónico del usuario que ejecuta el trabajo de transferencia, en el formato
user:name@example.com.
Otorga acceso al agente de servicio
Para permitir que el agente de servicio genere un token de acceso desde la cuenta de servicio administrada por el usuario, otórgale acceso a la cuenta de servicio administrada por el usuario y asigna el rol de Creador de tokens para cuenta de servicio (roles/iam.serviceAccountTokenCreator).
Necesitas la dirección de correo electrónico del agente de servicio para otorgar acceso. Para encontrar el correo electrónico del agente de servicio, haz lo siguiente:
Ve a la página de referencia de
googleServiceAccounts.get.Se abrirá un panel interactivo con el título Prueba este método.
En el panel, en Parámetros de solicitud, ingresa tu ID del proyecto. El proyecto que especifiques aquí debe ser el proyecto que usas para administrar el Servicio de transferencia de almacenamiento.
Haz clic en Ejecutar.
El correo electrónico del agente de servicio se muestra como el valor de
accountEmail. Usa el formatoproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
Luego, para otorgar acceso al agente de servicio a la cuenta de servicio administrada por el usuario, haz lo siguiente:
Google Cloud Consola de
En la Google Cloud consola de, ve a la página Cuentas de servicio.
Selecciona un proyecto.
Haz clic en la dirección de correo electrónico de la cuenta de servicio administrada por el usuario.
Selecciona la pestaña Principales con acceso.
Haz clic en Otorgar acceso.
Ingresa la dirección de correo electrónico del agente de servicio.
En la lista desplegable Rol, selecciona Creador de tokens para cuenta de servicio.
Haz clic en Guardar. La función se otorgó a la principal en la cuenta de servicio.
gcloud
Para otorgar un rol a una entidad, ejecuta el
add-iam-policy-binding comando:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator
Reemplaza las siguientes variables:
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio administrada por el usuario en el formato
SA_NAME@PROJECT_ID.iam.gserviceaccount.com. - SERVICE_AGENT_EMAIL: La dirección de correo electrónico del agente de servicio.
Otorga permisos de bucket a la cuenta de servicio administrada por el usuario
Otorga los permisos que se enumeran en Permisos del agente de servicio administrado por Google a la cuenta de servicio administrada por el usuario, en lugar de al agente de servicio.
Crea un trabajo de transferencia con una cuenta de servicio administrada por el usuario
Una vez que hayas otorgado los permisos correctos, puedes especificar la cuenta de servicio administrada por el usuario cuando crees un trabajo de transferencia nuevo.
Google Cloud Consola de
Sigue las instrucciones para crear una transferencia. Antes de finalizar el trabajo de transferencia, haz lo siguiente:
- En la página Elegir configuración, busca la sección Tipo de cuenta de servicio.
- Selecciona Cuenta de servicio administrada por el usuario.
- Ingresa el correo electrónico de la cuenta de servicio administrada por el usuario con el formato
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. - Haz clic en Crear para crear el trabajo de transferencia.
API de REST
Especifica la cuenta de servicio administrada por el usuario como el valor del campo serviceAccount en la solicitud transferJobs.create.
Se acepta el correo electrónico de la cuenta de servicio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) o el ID único (123456789012345678901).
Por ejemplo:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
...
}
}