Copie dados de um bucket do S3 para outra conta e região usando o AWS CLI - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Copie dados de um bucket do S3 para outra conta e região usando o AWS CLI

Criado por Appasaheb Bagali (AWS) e Purushotham G K () AWS

Ambiente: produção

Tecnologias: Armazenamento e backup

AWSserviços: AWSCLI; AWS Identity and Access Management; Amazon S3

Resumo

Esse padrão descreve como migrar dados de um bucket do Amazon Simple Storage Service (Amazon S3) em uma conta de AWS origem para um bucket S3 de destino em outra AWS conta, na mesma AWS região ou em uma região diferente.

O bucket S3 de origem permite o acesso ao AWS Identity and Access Management (IAM) usando uma política de recursos anexada. Um usuário na conta de destino precisa assumir uma função que tenha permissões PutObject e GetObject para o bucket de origem. Por fim, você executa os comandos copy e sync para transferir dados do bucket do S3 de origem para o bucket do S3 de destino.

As contas são proprietárias dos objetos que carregam nos buckets do S3. Se você copiar objetos entre contas e regiões, concederá à conta de destino a propriedade dos objetos copiados. Você pode alterar a propriedade de um objeto alterando sua lista de controle de acesso (ACL) parabucket-owner-full-control. No entanto, recomendamos que você conceda permissões programáticas entre contas à conta de destino, pois ACLs pode ser difícil gerenciar vários objetos.

Aviso: esse cenário exige que IAM os usuários tenham acesso programático e credenciais de longo prazo, o que representa um risco de segurança. Para ajudar a reduzir esse risco, recomendamos que você forneça a esses usuários somente as permissões necessárias para realizar a tarefa e que você os remova quando não forem mais necessários. As chaves de acesso podem ser atualizadas, se necessário. Para obter mais informações, consulte Atualização das chaves de acesso no Guia IAM do usuário.

Esse padrão abrange a migração única. Para cenários que exigem migração contínua e automática de novos objetos de um bucket de origem para um bucket de destino, você pode usar o S3 Batch Replication em vez disso, conforme descrito no padrão Copiar dados de um bucket do S3 para outra conta e região usando o S3 Batch Replication.

Pré-requisitos e limitações

  • Duas AWS contas ativas na mesma região ou em AWS regiões diferentes.

  • Um bucket do S3 existente na conta de origem. 

  • Se seu bucket Amazon S3 de origem ou destino tiver a criptografia padrão habilitada, você deverá modificar as permissões de AWS chave do Key Management Service (AWSKMS). Para obter mais informações, consulte o artigo do AWS re:POST sobre esse tópico.

  • Familiaridade com permissões entre contas.

Arquitetura

Copiar dados do Amazon S3 para outra conta ou região

Ferramentas

Práticas recomendadas

Épicos

TarefaDescriçãoHabilidades necessárias

Crie um IAM usuário e obtenha a chave de acesso.

  1. Faça login no AWS Management Console e crie um IAM usuário que tenha acesso programático. Para obter etapas detalhadas, consulte Criação de IAM usuários na IAM documentação. Não há necessidade de anexar nenhuma política para esse usuário.

  2. Gere uma chave de acesso e uma chave secreta para esse usuário. Para obter instruções, consulte Chaves de AWS conta e acesso na AWS documentação.

AWS DevOps

Crie uma política IAM baseada em identidade.

Crie uma política IAM baseada em identidade nomeada S3MigrationPolicy usando as seguintes permissões. Para obter etapas detalhadas, consulte Criação de IAM políticas na IAM documentação.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket", "arn:aws:s3:::awsexamplesourcebucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexampledestinationbucket", "arn:aws:s3:::awsexampledestinationbucket/*" ] } ] }

Observação: modifique os nomes dos buckets de origem e destino de acordo com seu caso de uso.

Essa política baseada em identidade permite que o usuário que está assumindo essa função acesse o bucket de origem e o bucket de destino.

AWS DevOps

Crie uma IAM função.

Crie uma IAM função nomeada S3MigrationRole usando a política de confiança a seguir e, em seguida, anexe a criada anteriormenteS3MigrationPolicy. Para obter etapas detalhadas, consulte Criação de uma função para delegar permissões a um IAM usuário na IAM documentação.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<destination_account>:user/<user_name>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

Nota: Modifique o Amazon Resource Name (ARN) da IAM função de destino ou nome de usuário na política de confiança de acordo com seu caso de uso.

Essa política de confiança permite que o IAM usuário recém-criado assumaS3MigrationRole.

AWS DevOps
TarefaDescriçãoHabilidades necessárias

Criar e anexar uma política de bucket do S3.

Faça login no AWS Management Console da sua conta de origem e abra o console do Amazon S3. Escolha sua origem do bucket do S3 e selecione Permissões. Em Política de bucket, selecione Editar e cole a seguinte política de bucket. Escolha Salvar.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"}, "Action": ["s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket/*", "arn:aws:s3:::awsexamplesourcebucket" ] } ] }

Observação: certifique-se de incluir o ID da AWS conta de destino e configurar o modelo de política de bucket de acordo com seus requisitos.

Essa política baseada em recursos permite que a função S3MigrationRole de destino acesse objetos do S3 na conta de origem.

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Criar um bucket do S3 de destino.

Faça login no AWS Management Console da sua conta de destino, abra o console do Amazon S3 e escolha Create bucket. Criar um bucket do S3 de acordo com suas necessidades. Para obter mais informações, consulte Criar um bucket na documentação do Amazon S3. 

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Configure AWS CLI com as credenciais de usuário recém-criadas.

  1. Instale a versão mais recente do AWSCLI. Para obter instruções, consulte Instalação ou atualização da versão mais recente do AWS CLI na AWS CLI documentação.

  2. Execute $ aws configure e atualize CLI com a chave de AWS acesso do usuário que você criou. Para obter mais informações, consulte Configurações e configurações do arquivo de credenciais na AWS CLI documentação.

AWS DevOps

Assumir a função de migração do S3.

  1. Use o AWS CLI para assumirS3MigrationRole:

    aws sts assume-role \ --role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \ --role-session-name AWSCLI-Session

    Esse comando gera várias informações. Dentro do bloco de credenciais, você precisa de AccessKeyId, SecretAccessKey, e SessionToken. Este exemplo usa as variáveis de ambiente RoleAccessKeyID, RoleSecretKey e RoleSessionToken. Observe que o timestamp do campo de expiração está no fuso UTC horário. O timestamp indica quando as credenciais temporárias da função expiram. IAM Se as credenciais temporárias expirarem, você deverá ligar novamente. sts:AssumeRole API

  2. Crie três variáveis de ambiente para assumir a IAM função. Essas variáveis de ambiente são preenchidas com a seguinte saída:

    # Linux export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken # Windows set AWS_ACCESS_KEY_ID=RoleAccessKeyID set AWS_SECRET_ACCESS_KEY=RoleSecretKey set AWS_SESSION_TOKEN=RoleSessionToken
  3. Verifique se você assumiu a IAM função executando o seguinte comando:

    aws sts get-caller-identity

Para obter mais informações, consulte o Centro de AWS Conhecimento.

AWSadministrador

Copiar e sincronizar dados do bucket do S3 de origem para o bucket do S3 de destino.

Depois de assumir a função S3MigrationRole, você pode copiar os dados usando o comando copy (cp) ou synchronize (sync).

Copie (consulte a Referência de AWS CLI Comandos para obter detalhes):

aws s3 cp s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

Sincronize (consulte a Referência de AWS CLI Comandos para obter detalhes):

aws s3 sync s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
Administrador de nuvem

Solução de problemas

ProblemaSolução

Ocorreu um erro (AccessDenied) ao chamar a operação ListObjects: acesso negado

  • Certifique-se de ter assumido a funçãoS3MigrationRole.

  • Execute aws sts get-caller-identity para verificar a função usada. Se a saída não exibir o ARN forS3MigrationRole, assuma a função novamente e tente novamente.

Recursos relacionados