Puedes configurar el acceso a un segmento de Amazon S3 de dos formas:
Regiones disponibles
Storage Transfer Service admite las siguientes regiones de Amazon S3:
af-south-1 ap-east-1 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-south-1 ap-south-2 ap-southeast-1 ap-southeast-2 ap-southeast-3 |
ap-southeast-4 ca-central-1 ca-west-1 eu-central-1 eu-central-2 eu-north-1 eu-south-1 eu-south-2 eu-west-1 eu-west-2
|
eu-west-3 il-central-1 me-central-1 me-south-1 sa-east-1 us-east-1 us-east-2 us-west-1 us-west-2
|
ap-east-1 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-south-1 ap-south-2 ap-southeast-1 ca-central-1 ca-west-1 eu-central-1 eu-central-2 |
eu-north-1 eu-south-1 eu-south-2 eu-west-1 eu-west-2 eu-west-3 us-east-1 us-east-2 us-west-1 us-west-2
|
Permisos obligatorios
Para usar el Servicio de transferencia de Storage y mover datos de un segmento de Amazon S3, tu cuenta de usuario o tu rol de identidad federada deben tener los permisos adecuados para el segmento:
Permiso | Descripción | Uso |
---|---|---|
s3:ListBucket |
Permite que el Servicio de transferencia de Storage muestre los objetos del segmento. | Siempre es obligatorio. |
s3:GetObject |
Permite que el Servicio de transferencia de Storage lea objetos del segmento. | Obligatorio si va a transferir la versión actual de todos los objetos. Si tu manifiesto especifica una versión de objeto, usa s3:GetObjectVersion . |
s3:GetObjectVersion |
Permite que el Servicio de transferencia de Storage lea versiones específicas de los objetos del segmento. | Obligatorio si el archivo de manifiesto especifica una versión de objeto. Si no, usa s3:GetObject . |
s3:DeleteObject |
Permite que el Servicio de transferencia de Storage elimine objetos del segmento. | Es obligatorio si asignas el valor true a deleteObjectsFromSourceAfterTransfer . |
Autenticarse con credenciales de acceso
Para usar un ID de clave de acceso y una clave secreta para autenticarte en AWS, sigue estos pasos:
Crea un usuario de gestión de identidades y accesos de AWS (AWS IAM) con un nombre que puedas reconocer fácilmente, como
transfer-user
.En Tipo de acceso de AWS, selecciona Clave de acceso: acceso programático.
Asigna al usuario uno de los siguientes roles:
- AmazonS3ReadOnlyAccess para proporcionar acceso de solo lectura al origen. Esto permite las transferencias, pero no admite la eliminación de objetos en el origen una vez que se ha completado la transferencia.
- AmazonS3FullAccess si la transferencia está configurada para eliminar objetos en el origen.
Un rol personalizado con los permisos adecuados de la tabla Permisos necesarios de arriba. El JSON de los permisos mínimos es similar al siguiente ejemplo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
Anota el ID de clave de acceso y la clave de acceso secreta cuando se haya creado el usuario correctamente.
La forma de transferir el ID de clave de acceso y la clave de acceso secreta al Servicio de transferencia de Storage depende de la interfaz que utilices para iniciar la transferencia.
consola de Cloud
Introduce los valores directamente en el formulario de creación del trabajo de transferencia.
Consulta Crear transferencias para empezar.
CLI de gcloud
Crea un archivo JSON con el siguiente formato:
{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
Pasa la ubicación del archivo al comando gcloud transfer jobs create
con la marca source-creds-file
:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/KEYFILE.JSON
API REST
Tu objeto transferSpec
debe contener la información clave como parte del objeto awsS3DataSource
:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"awsAccessKey": {
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
}
}
Bibliotecas de cliente
Consulta los ejemplos de la página Crear transferencias.
Guardar tus credenciales de acceso en Secret Manager
Secret Manager es un servicio seguro que almacena y gestiona datos sensibles, como contraseñas. Utiliza un cifrado sólido, un control de acceso basado en roles y registros de auditoría para proteger tus secretos.
El Servicio de transferencia de Storage puede usar Secret Manager para proteger tus credenciales de acceso de AWS. Carga tus credenciales en Secret Manager y, a continuación, pasa el nombre del recurso secreto al Servicio de transferencia de Storage.
Activar la API
Enable the Secret Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin
), which
contains the serviceusage.services.enable
permission. Learn how to grant
roles.
Configurar permisos adicionales
Permisos de usuario
El usuario que cree el secreto debe tener el siguiente rol:
- Administrador de Secret Manager (
roles/secretmanager.admin
)
Consulta cómo conceder un rol.
Permisos de agente de servicio
El agente de servicio del Servicio de transferencia de Storage requiere el siguiente rol de gestión de identidades y accesos:
- Lector de recursos de Secret Manager (
roles/secretmanager.secretAccessor
)
Para conceder el rol a tu agente de servicio, sigue estos pasos:
consola de Cloud
Sigue las instrucciones para recuperar el correo de tu agente de servicio.
Ve a la página Gestión de identidades y accesos de la Google Cloud consola.
Haz clic en Conceder acceso.
En el cuadro de texto Nuevos principales, introduce el correo del agente de servicio.
En el menú desplegable Selecciona un rol, busca y selecciona Permiso para acceder a los recursos de Secret Manager.
Haz clic en Guardar.
gcloud
Usa el comando gcloud projects add-iam-policy-binding
para añadir el rol de gestión de identidades y accesos a tu agente de servicio.
Sigue las instrucciones para recuperar el correo de tu agente de servicio.
En la línea de comandos, introduce el siguiente comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
Crear un secreto
Crea un secreto con Secret Manager:
consola de Cloud
Ve a la página Secret Manager en la Google Cloud consola.
Haz clic en Crear secreto.
Escribe un nombre.
En el cuadro de texto Valor del secreto, introduce tus credenciales con el siguiente formato:
{ "accessKeyId": "AWS_ACCESS_KEY_ID", "secretAccessKey": "AWS_SECRET_ACCESS_KEY" }
Haz clic en Crear secreto.
Una vez creado el secreto, anota el nombre completo del recurso:
Selecciona la pestaña Resumen.
Copia el valor de Resource ID (ID de recurso). Utiliza el siguiente formato:
projects/1234567890/secrets/SECRET_NAME
gcloud
Para crear un secreto con la herramienta de línea de comandos gcloud, envía las credenciales en formato JSON al comando gcloud secrets create
:
printf '{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
Recupera el nombre completo del recurso del secreto:
gcloud secrets describe SECRET_NAME
Anota el valor de name
en la respuesta. Utiliza el siguiente formato:
projects/1234567890/secrets/SECRET_NAME
Para obtener más información sobre cómo crear y gestionar secretos, consulta la documentación de Secret Manager.
Transfiere tu secreto al comando de creación de trabajos
Para usar Secret Manager con Storage Transfer Service, debe usar la API REST para crear un trabajo de transferencia.
Envía el nombre del recurso de Secret Manager como valor del campo transferSpec.awsS3DataSource.credentialsSecret
:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_BUCKET_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
Autenticarse mediante una identidad federada
Para usar la identidad federada para autenticarte en AWS, sigue estos pasos:
Crea un rol de gestión de identidades y accesos en AWS.
Seleccione Política de confianza personalizada como tipo de entidad de confianza.
Copia y pega la siguiente política de confianza:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "SUBJECT_ID" } } } ] }
Sustituye SUBJECT_ID por el
subjectID
de la cuenta de servicio gestionada por Google que se crea automáticamente cuando empiezas a usar Storage Transfer Service. Para recuperar elsubjectID
, sigue estos pasos: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.
Haz clic en la opción para ejecutar. El
subjectId
se incluye en la respuesta.
Concede una de las siguientes políticas de permisos al rol:
- AmazonS3ReadOnlyAccess proporciona acceso de solo lectura al origen. Esto permite las transferencias, pero no admite la eliminación de objetos en el origen una vez que se ha completado la transferencia.
- AmazonS3FullAccess si la transferencia está configurada para eliminar objetos en el origen.
Un rol personalizado con los permisos adecuados de la tabla Permisos necesarios de arriba. El JSON de los permisos mínimos es similar al siguiente ejemplo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
Asigna un nombre al rol y créalo.
Una vez creado, consulta los detalles del rol para obtener el nombre de recurso de Amazon (ARN). Anota este valor, que tiene el formato
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
.
La forma de transferir el ARN al Servicio de transferencia de Storage depende de la interfaz que uses para iniciar la transferencia.
consola de Cloud
Introduce el ARN directamente en el formulario de creación de la tarea de transferencia.
Consulta Crear transferencias para empezar.
CLI de gcloud
Crea un archivo JSON con el siguiente formato:
{
"roleArn": "ARN"
}
Pasa la ubicación del archivo al comando gcloud transfer jobs create
con la marca source-creds-file
:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/ARNFILE.JSON
API REST
Tu objeto transferSpec
debe contener la información del ARN como parte del objeto awsS3DataSource
:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"roleArn": "ARN"
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
}
}
Bibliotecas de cliente
Consulta los ejemplos de la página Crear transferencias.
Restricciones de IP
Si tu proyecto de AWS usa restricciones de IP para acceder al almacenamiento, debes añadir los intervalos de direcciones IP que usan los trabajadores de Storage Transfer Service a tu lista de IPs permitidas.
Como estos intervalos de IP pueden cambiar, publicamos los valores actuales en un archivo JSON en una dirección permanente:
https://www.gstatic.com/storage-transfer-service/ipranges.json
Cuando se añade un nuevo intervalo al archivo, esperaremos al menos 7 días antes de usarlo para las solicitudes del Servicio de Transferencia de Almacenamiento.
Te recomendamos que extraigas datos de este documento al menos una vez a la semana para mantener actualizada tu configuración de seguridad. Para ver un ejemplo de una secuencia de comandos de Python que obtiene intervalos de IPs de un archivo JSON, consulta este artículo de la documentación de Virtual Private Cloud.
Para añadir estos intervalos como IPs permitidas, usa el campo Condition
en una política de un contenedor, tal como se describe en la documentación de AWS S3: Gestionar el acceso en función de direcciones IP específicas.