Pode configurar o acesso a um contentor do Amazon S3 através de um dos dois métodos:
Regiões suportadas
O Serviço de transferência de armazenamento suporta as seguintes regiões do 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
|
Autorizações necessárias
Para usar o serviço de transferência de armazenamento para mover dados de um contentor do Amazon S3, a sua conta de utilizador ou função de identidade federada tem de ter as autorizações adequadas para o contentor:
Autorização | Descrição | Utilizar |
---|---|---|
s3:ListBucket |
Permite que o Serviço de transferência de armazenamento liste objetos no contentor. | Sempre necessário. |
s3:GetObject |
Permite que o Serviço de transferência de armazenamento leia objetos no contentor. | Obrigatório se estiver a transferir a versão atual de todos os objetos. Se o seu manifesto especificar uma versão do objeto, use s3:GetObjectVersion . |
s3:GetObjectVersion |
Permite que o Serviço de transferência de armazenamento leia versões específicas de objetos no contentor. | Obrigatório se o seu manifesto especificar uma versão do objeto. Caso contrário, use s3:GetObject . |
s3:DeleteObject |
Permite que o Serviço de transferência de armazenamento elimine objetos no contentor. | Obrigatório se definir deleteObjectsFromSourceAfterTransfer como true . |
Autentique-se através de credenciais de acesso
Para usar um ID da chave de acesso e uma chave secreta para autenticar na AWS:
Crie um utilizador do AWS Identity and Access Management (AWS IAM) com um nome que possa reconhecer facilmente, como
transfer-user
.Para o tipo de acesso da AWS, selecione Chave de acesso – acesso programático.
Conceda uma das seguintes funções ao utilizador:
- AmazonS3ReadOnlyAccess para fornecer acesso só de leitura à origem. Isto permite transferências, mas não suporta a eliminação de objetos na origem assim que a transferência estiver concluída.
- AmazonS3FullAccess se a transferência estiver configurada para eliminar objetos na origem.
Uma função personalizada com as autorizações adequadas da tabela Autorizações necessárias acima. O JSON para as autorizações mínimas tem o seguinte aspeto:
{ "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" ] } ] }
Tome nota do ID da chave de acesso e da chave de acesso secreta quando o utilizador for criado com êxito.
A forma como transmite o ID da chave de acesso e a chave de acesso secreta ao serviço de transferência de armazenamento depende da interface que usa para iniciar a transferência.
Cloud Console
Introduza os valores diretamente no formulário de criação da tarefa de transferência.
Consulte o artigo Crie transferências para começar.
CLI gcloud
Crie um ficheiro JSON com o seguinte formato:
{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
Transmita a localização do ficheiro para o comando gcloud transfer jobs create
usando a flag source-creds-file
:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/KEYFILE.JSON
API REST
O objeto transferSpec
tem de conter as informações principais como parte do 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 cliente
Veja os exemplos na página Criar transferências.
Guarde as suas credenciais de acesso no Secret Manager
O Secret Manager é um serviço seguro que armazena e gere dados confidenciais, como palavras-passe. Utiliza uma encriptação forte, um controlo de acesso baseado em funções e o registo de auditoria para proteger os seus segredos.
O Serviço de transferência de armazenamento pode tirar partido do Secret Manager para proteger as suas credenciais de acesso da AWS. Carrega as suas credenciais no Secret Manager e, em seguida, passa o nome do recurso secreto para o serviço de transferência de armazenamento.
Ative a 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.
Configure autorizações adicionais
Autorizações do utilizador
O utilizador que cria o segredo requer a seguinte função:
- Administrador do Secret Manager (
roles/secretmanager.admin
)
Saiba como conceder uma função.
Autorizações do agente de serviço
O agente do serviço do Serviço de transferência de armazenamento requer a seguinte função do IAM:
- Secret Accessor do Secret Manager (
roles/secretmanager.secretAccessor
)
Para conceder a função ao agente do serviço:
Cloud Console
Siga as instruções para encontrar o email do agente de serviço.
Aceda à página IAM na Google Cloud consola.
Clique em Conceder acesso.
Na caixa de texto Novos membros, introduza o email do agente de serviço.
No menu pendente Selecionar uma função, pesquise e selecione Secret Manager Secret Accessor.
Clique em Guardar.
gcloud
Use o comando gcloud projects add-iam-policy-binding
para adicionar a função do IAM ao seu agente de serviço.
Siga as instruções para encontrar o email do agente de serviço.
Na linha de comandos, introduza o seguinte comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
Crie um segredo
Crie um segredo com o Secret Manager:
Cloud Console
Aceda à página Secret Manager na Google Cloud consola.
Clique em Criar segredo.
Introduza um nome.
Na caixa de texto Valor do Secret, introduza as suas credenciais no seguinte formato:
{ "accessKeyId": "AWS_ACCESS_KEY_ID", "secretAccessKey": "AWS_SECRET_ACCESS_KEY" }
Clique em Criar segredo.
Depois de criar o segredo, tome nota do nome completo do recurso do segredo:
Selecione o separador Vista geral.
Copie o valor do ID do recurso. Usa o seguinte formato:
projects/1234567890/secrets/SECRET_NAME
gcloud
Para criar um novo segredo através da ferramenta de linhas de comando gcloud, transmita as credenciais formatadas em JSON para o comando gcloud secrets create
:
printf '{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
Obtenha o nome completo do recurso do segredo:
gcloud secrets describe SECRET_NAME
Tenha em atenção o valor de name
na resposta. Usa o seguinte formato:
projects/1234567890/secrets/SECRET_NAME
Para ver mais detalhes sobre a criação e gestão de segredos, consulte a documentação do Secret Manager.
Transmita o seu segredo para o comando de criação de tarefas
A utilização do Secret Manager com o serviço de transferência de armazenamento requer a utilização da API REST para criar uma tarefa de transferência.
Transmita o nome do recurso do Secret Manager como o valor do 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"
}
}
}
Autentique com uma identidade federada
Para usar a identidade federada para autenticar na AWS:
Crie uma nova função de IAM na AWS.
Selecione Política de fidedignidade personalizada como tipo de entidade fidedigna.
Copie e cole a seguinte política de confiança:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "SUBJECT_ID" } } } ] }
Substitua SUBJECT_ID pelo
subjectID
da conta de serviço gerida pela Google que é criada automaticamente quando começa a usar o Storage Transfer Service. Para aceder aosubjectID
:Aceda à página de referência
googleServiceAccounts.get
.É aberto um painel interativo com o título Experimente este método.
No painel, em Parâmetros do pedido, introduza o seu ID do projeto. O projeto que especificar aqui tem de ser o projeto que está a usar para gerir o serviço de transferência de armazenamento.
Clique em Executar. O
subjectId
está incluído na resposta.
Conceda uma das seguintes políticas de autorizações à função:
- AmazonS3ReadOnlyAccess fornece acesso só de leitura à origem. Isto permite transferências, mas não suporta a eliminação de objetos na origem assim que a transferência estiver concluída.
- AmazonS3FullAccess se a transferência estiver configurada para eliminar objetos na origem.
Uma função personalizada com as autorizações adequadas da tabela Autorizações necessárias acima. O JSON para as autorizações mínimas tem o seguinte aspeto:
{ "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" ] } ] }
Atribua um nome à função e crie-a.
Depois de criada, veja os detalhes da função para obter o Nome do recurso da Amazon (ARN). Tome nota deste valor. Tem o formato
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
.
A forma como transmite o ARN ao serviço de transferência de armazenamento depende da interface que usa para iniciar a transferência.
Cloud Console
Introduza o ARN diretamente no formulário de criação da tarefa de transferência.
Consulte o artigo Crie transferências para começar.
CLI gcloud
Crie um ficheiro JSON com o seguinte formato:
{
"roleArn": "ARN"
}
Transmita a localização do ficheiro para o comando gcloud transfer jobs create
usando a flag source-creds-file
:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/ARNFILE.JSON
API REST
O objeto transferSpec
tem de conter as informações do ARN como parte do objeto awsS3DataSource
:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"roleArn": "ARN"
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
}
}
Bibliotecas cliente
Veja os exemplos na página Criar transferências.
Restrições de IP
Se o seu projeto da AWS usar restrições de IP para aceder ao armazenamento, tem de adicionar os intervalos de IP usados pelos trabalhadores do serviço de transferência de armazenamento à sua lista de IPs permitidos.
Uma vez que estes intervalos de IP podem mudar, publicamos os valores atuais como um ficheiro JSON num endereço permanente:
https://www.gstatic.com/storage-transfer-service/ipranges.json
Quando é adicionado um novo intervalo ao ficheiro, aguardamos, pelo menos, 7 dias antes de usar esse intervalo para pedidos do serviço de transferência de armazenamento.
Recomendamos que extraia dados deste documento, pelo menos, semanalmente para manter a sua configuração de segurança atualizada. Para ver um exemplo de script Python que obtenha intervalos de IP a partir de um ficheiro JSON, consulte este artigo da documentação da nuvem privada virtual.
Para adicionar estes intervalos como IPs permitidos, use o campo Condition
numa política de contentor, conforme descrito na documentação do AWS S3: gerir o acesso com base em endereços IP específicos.