É possível configurar o acesso a um bucket do Amazon S3 usando um destes dois métodos:
Regiões compatíveis
O Serviço de transferência do Cloud Storage pode transferir dados das 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
, ca-central-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
,
me-central-1
, me-south-1
, sa-east-1
, us-east-1
,
us-east-2
, us-west-1
, us-west-2
.
Permissões necessárias
Para usar o Serviço de transferência do Cloud Storage para mover dados de um bucket do Amazon S3, sua conta de usuário ou papel de identidade federado precisa ter as permissões apropriadas para o bucket:
Permissão | Descrição | Uso |
---|---|---|
s3:ListBucket |
Permite a listagem de objetos no bucket pelo Storage Transfer Service. | Sempre obrigatório. |
s3:GetBucketLocation |
Permite a localização do bucket pelo Serviço de transferência do Cloud Storage. | Sempre obrigatório. |
s3:GetObject |
Permite a leitura de objetos no bucket pelo Storage Transfer Service. | Obrigatório se você estiver transferindo a versão atual de todos os objetos. Se o manifesto especificar uma versão do objeto, use s3:GetObjectVersion . |
s3:GetObjectVersion |
Permite que o Serviço de transferência do Cloud Storage leia versões específicas de objetos no bucket. | Obrigatório se o manifesto especificar uma versão do objeto. Do contrário, use s3:GetObject . |
s3:DeleteObject |
Permite a exclusão de objetos no bucket pelo Serviço de transferência do Cloud Storage. | Obrigatório se você definir deleteObjectsFromSourceAfterTransfer como true . |
Autenticar usando as credenciais de acesso
Para usar um ID de chave de acesso e uma chave secreta para autenticar na AWS, siga estas etapas:
Crie um usuário do gerenciamento de identidade e acesso da AWS (IAM) com um nome que você possa reconhecer facilmente, como
transfer-user
.Em Tipo de acesso da AWS, selecione Chave de acesso - Acesso programático.
Atribua um dos seguintes papéis ao usuário:
- AmazonS3ReadyOnlyAccess para fornecer acesso somente leitura à fonte. Isso permite transferências, mas não oferece suporte a exclusão de objetos na fonte após a conclusão da transferência.
- AmazonS3FullAccess se a transferência estiver configurada para excluir objetos na fonte.
Um papel personalizado com as permissões apropriadas da tabela Permissões necessárias acima. O JSON das permissões mínimas é semelhante ao exemplo abaixo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
Anote o ID da chave de acesso e a chave de acesso secreta quando o usuário for criado.
A forma como você transmite o ID da chave de acesso e a chave de acesso secreta para o Serviço de transferência do Cloud Storage depende da interface usada para iniciar a transferência.
console do Cloud
Insira os valores diretamente no formulário de criação do job de transferência.
Consulte Criar transferências para começar.
CLI da gcloud
Crie um arquivo JSON com o seguinte conteúdo:
{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
Transmita o local do arquivo para o comando gcloud transfer jobs create
usando a sinalização 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
precisa conter as informações da chave 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 de cliente
Veja os exemplos na página Criar transferências.
Autenticar usando a identidade federada
Para usar a identidade federada a fim de autenticar na AWS:
Crie um novo papel do IAM na AWS.
Selecione Política de confiança personalizada como o tipo de entidade confiável.
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 gerenciada pelo Google que é criada automaticamente ao usar o Serviço de transferência do Cloud Storage. Para recuperar osubjectID
:Acesse a página de referência de
googleServiceAccounts.get
.Você verá um painel interativo com o título Testar este método.
No painel, em Parâmetros de solicitação, insira o ID do projeto. O projeto especificado aqui precisa ser o que você está usando para gerenciar o Serviço de transferência do Cloud Storage.
Clique em Execute. O
subjectId
é incluído na resposta.
Conceda uma das seguintes políticas de permissões ao papel:
- AmazonS3ReadOnlyAccess fornece acesso somente leitura à fonte. Isso permite transferências, mas não oferece suporte a exclusão de objetos na fonte após a conclusão da transferência.
- AmazonS3FullAccess se a transferência estiver configurada para excluir objetos na fonte.
Um papel personalizado com as permissões apropriadas da tabela Permissões necessárias acima. O JSON das permissões mínimas é semelhante ao exemplo abaixo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
Atribua um nome à função e crie a função.
Depois de criado, veja os detalhes do papel para recuperar o Nome do Recurso da Amazon (ARN, na sigla em inglês). Anote esse valor, ele tem o formato
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
.
A forma como você transmite o ARN para o Serviço de transferência do Cloud Storage depende da interface usada para iniciar a transferência.
console do Cloud
Insira o ARN diretamente no formulário de criação do job de transferência.
Consulte Criar transferências para começar.
CLI da gcloud
Crie um arquivo JSON com o seguinte conteúdo:
{
"roleArn": "ARN"
}
Transmita o local do arquivo para o comando gcloud transfer jobs create
usando a sinalização source-creds-file
:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/ARNFILE.JSON
API REST
Seu objeto transferSpec
precisa conter as informações de ARN como parte do
objeto awsS3DataSource
:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"roleArn": "ARN"
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
}
}
Bibliotecas de cliente
Veja os exemplos na página Criar transferências.
Restrições de IP
Se o projeto da AWS usar restrições de IP para acessar o armazenamento, será necessário adicionar os intervalos de IP usados pelos workers do Serviço de transferência do Cloud Storage à lista de IPs permitidos.
Como esses intervalos de IP podem mudar, publicamos os valores atuais como um arquivo JSON em um endereço permanente:
https://www.gstatic.com/storage-transfer-service/ipranges.json
Quando um novo intervalo é adicionado ao arquivo, aguardamos pelo menos sete dias antes de usá-lo para solicitações do Storage Transfer Service.
Recomendamos que você extraia os dados deste documento pelo menos uma vez por semana para manter a configuração de segurança atualizada. Para uma amostra de script Python que busque intervalos de IP de um arquivo JSON, consulte este artigo da documentação da nuvem privada virtual.
Para adicionar esses intervalos como IPs permitidos, use o campo Condition
em uma política de bucket, conforme descrito na documentação do AWS S3: Como gerenciar o acesso com base em endereços IP específicos.