Como posso utilizar o AWS DataSync para transferir os dados de ou para um local do Amazon S3 entre contas?

Data da última atualização 14/12/2022

Quero utilizar o AWS DataSync para transferir dados de ou para um bucket do Amazon Simple Storage (Amazon S3) entre contas.

Breve descrição

Para utilizar o DataSync para transferência de dados entre contas, faça o seguinte:

  1. Use a AWS Command Line Interface (AWS CLI) ou o AWS SDK para criar um local entre contas do Simple Storage Service (Amazon S3) no DataSync.
  2. Crie uma tarefa do DataSync que transfira dados do bucket de origem para o bucket de destino.

Lembre-se das seguintes limitações ao usar o DataSync para transferir dados entre buckets pertencentes a diferentes contas do S3:

  • O DataSync não aplica a lista de controle de acesso (ACL) bucket-owner-full-control ao transferir dados para um bucket de destino entre contas. Isso leva a problemas de propriedade do objeto no bucket de destino.
  • Para um local do S3 entre contas, somente o bucket entre contas na mesma região é compatível. Se você tentar um local do S3 entre contas e entre regiões, serão apresentados os erros GetBucketLocation ou Não foi possível conectar ao endpoint S3. Portanto, se uma tarefa for criada na conta de origem, a tarefa deverá ser criada na mesma região do bucket de destino. Se uma tarefa for criada na conta de destino, ela deverá ser criada na mesma região do bucket de origem.
  • Você não pode utilizar a função de passagem entre contas para acessar o local do S3 entre contas.

Você pode configurar a tarefa DataSync na conta de destino para extrair dados da fonte, contornando as limitações anteriores.

Resolução

Execute as verificações necessárias

Suponha que a conta fonte tenha o bucket do S3 fonte entre contas e a conta de destino tenha o bucket do S3 de destino e a tarefa DataSync. Execute as seguintes verificações:

Usuário/função do AWS Identity and Management (IAM): verifique se os seguintes usuários ou funções do IAM têm as permissões necessárias:

  • O usuário ou função que você está usando para criar a localização S3 entre contas
  • A função que você atribuiu à localização do S3

Política do bucket fonte: Verifique se a política do bucket fonte permite que os usuários/perfis do IAM na conta de destino acessam o bucket. O exemplo de política a seguir concede o acesso ao bucket fonte para usuários/funções do IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObjectTagging",
        "s3:GetObjectTagging",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket/*"
      ]
    }
  ]
}

Verifique e confirme a substituição dos seguintes valores na política precedente:

  • example-source-bucket com o nome do bucket fonte
  • 1111222233334444 com o ID da conta de destino
  • datasync-config-role com a função do IAM utilizada para a configuração do DataSync (exemplo: criar um local do S3 fonte e a tarefa no DataSync)
    Observação: você também pode utilizar um usuário do IAM. Este artigo considera a utilização da função do IAM.
  • dataysnc-transfer-role com a função do IAM atribuída ao criar o local do S3 fonte
    Observação: o DataSync utiliza essa função para acessar os dados entre contas.

Localização do destino S3:

Use a AWS CLI ou o SDK para criar um local do S3 de origem entre contas no DataSync

Observação: a criação de uma localização S3 entre contas não é compatível com o Console de Gerenciamento da AWS.

Você pode criar a localização do S3 entre contas usando um dos seguintes métodos:

  • Utilize um arquivo JSON de configuração.
  • Utilize as opções no comando da AWS CLI.

Utilize um arquivo JSON de configuração

1.    Crie um arquivo JSON de configuração input.template para o local S3 entre contas com os seguintes parâmetros:

{
  "Subdirectory": "",
  "S3BucketArn": "arn:aws:s3:::[Source bucket]",
  "S3StorageClass": "STANDARD",
  "S3Config": {
    "BucketAccessRoleArn": "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
  }
}

2.    Crie um local do S3 executando o seguinte comando da AWS CLI:

aws datasync create-location-s3 --cli-input-json file://input.template --region example-DataSync-Region

Observação: se você receber erros ao executar comandos da AWS CLI, verifique se está utilizando a versão mais recente da AWS CLI.

Para obter mais informações, consulte create-location-s3.

Quando o local do S3 é criado, a seguinte saída é exibida:

{
"LocationArn": "arn:aws:datasync:example-Region:123456789012:location/loc-0f8xxxxxxxxe4821"
}

Observe que 123456789012 é o ID da conta de origem.

Utilize as opções no comando da AWS CLI

Execute o seguinte comando da AWS CLI com as opções apropriadas:

aws datasync create-location-s3 --s3-bucket-arn arn:aws:s3:::example-source-bucket --s3-storage-class STANDARD --s3-config BucketAccessRoleArn="arn:aws:iam::1111222233334444:role/datasync-transfer-role" --region example-DataSync-Region

Verifique e confirme a substituição dos seguintes valores na consulta:

  • example-source-bucket com o nome do bucket fonte
  • example-DataSync-Region com a região em que você criou a tarefa DataSync.

Criar uma tarefa do DataSync

Configure a tarefa DataSync e a inicie no console do DataSync. Para obter mais informações, consulte Como iniciar sua tarefa do AWS DataSync.

Erros e resoluções conhecidos

Erro: erro ao criar o DataSync Location S3: InvalidRequestException: forneça um bucket na região xxx onde o DataSync é utilizado atualmente

Caso o erro seja recebido, verifique se o bucket e as políticas do IAM incluem as seguintes permissões necessárias:

"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
]

Caso o erro seja recebido ao utilizar um intervalo entre contas do bucket, verifique e confirme se os buckets estão na mesma região que a sua tarefa DataSync

Problemas de propriedade de objetos do S3

O DataSync não oferece suporte ao uso de um intervalo entre contas do bucket como o local de destino. Portanto, você não pode utilizar o controle total do proprietário do bucket da ACL. Se a tarefa DataSync for executada a partir da conta do bucket fonte, os objetos carregados na conta do bucket de destino poderão ter o problema de propriedade do objeto. Para resolver o problema, se o bucket de destino não tiver objetos que estejam usando ACLs, considere desabilitar as ACLs no bucket de destino. Para obter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket. Caso contrário, é uma prática recomendada configurar a tarefa DataSync na conta de destino para extrair dados da fonte.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?