Acesso negado ao sincronizar entre intervalos s3 em diferentes contas da AWS

7

Estou tentando configurar a sincronização entre dois intervalos em diferentes contas da AWS.

Eu tenho cp trabalhando com:

@ubuntu:~$ s3cmd cp -v s3://src/dir/ s3://dest/folder --recursive

Eu sou o usuário que possui /src/dir e adicionei:

{
"Version": "2012-10-17",
"Id": "Policy1477299702471",
"Statement": [
    {
        "Sid": "Stmt1477299696163",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::awsid:user/name"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::bucket/*"
    }
]}

Para a política de permissões de depósito no intervalo de teste.

Agora estou atrás de aws sync para funcionar, pois usar s3 cp não é recomendado para uso com o cron.

Eu tentei

user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1

mas obtenho acesso negado:

fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied

Como posso obter acesso negado se esse é o usuário que possui o intervalo e a sincronização está sendo executada?

    
por OrigamiEye 24.10.2016 / 13:13

1 resposta

12

A causa do seu erro ListObjects é que você atribuiu permissão para acessar o conteúdo do seu intervalo ( arn:aws:s3:::bucket/* ), mas você não deu permissões ao próprio bloco ( arn:aws:s3:::bucket ). O comando ListObjects requer acesso ao intervalo.

Para testar isso, fiz o seguinte:

  • Utilizou duas contas da AWS: conta A, conta B
  • Criado bucket-a na conta A
  • Criado bucket-b na conta B
  • Criado um usuário do IAM user-a na conta A com permissões para acessar bucket-a
  • Adicionada uma política de bucket a bucket-b :

    {
      "Id": "CopyBuckets",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1",
          "Action": "s3:*",
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::bucket-b",
            "arn:aws:s3:::bucket-b/*"
          ],
          "Principal": {
            "AWS": [
              "arn:aws:iam::<account-a-id>:user/user-a"
            ]
          }
        }
      ]
    }
    

Em seguida, iniciei a sincronização usando user-a na conta A:

aws s3 sync s3://bucket-a s3://bucket-b --profile user-a

Funcionou com sucesso.

    
por 27.10.2016 / 09:12