O que está causando o acesso negado ao usar o aws cli para fazer o download do Amazon S3?

47

Estou realmente me debatendo na AWS tentando descobrir o que sinto falta aqui. Eu gostaria de fazer com que um usuário do IAM possa baixar arquivos de um bucket do S3 - sem apenas tornar os arquivos totalmente públicos - mas estou tendo acesso negado. Se alguém puder identificar o que está acontecendo, eu ficarei feliz.

O que eu fiz até agora:

  • Criado um usuário chamado meu usuário (por exemplo)
  • Gerou chaves de acesso para o usuário e as colocou em ~ / .aws em uma instância do EC2
  • Criei uma política de buckets que eu esperava que as concessões acessassem para meu usuário
  • Ran o comando aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Política de balde:

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

O resultado é A client error (AccessDenied) occurred: Access Denied , embora eu possa fazer o download usando o mesmo comando e as chaves de acesso padrão (conta root?).

Eu também tentei adicionar uma política de usuário. Embora eu não saiba por que seria necessário, achei que não ia doer, então anexei isso ao meu usuário.

{
  "Statement": [
    {
      "Sid": "Stmt1384889624746",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Mesmos resultados.

    
por Josh Gagnon 19.11.2013 / 20:37

7 respostas

36

Eu estava lutando com isso também, mas encontrei uma resposta aqui link que ajudou a resolver esse problema para mim . Repostando a resposta abaixo.

Você não precisa abrir permissões para todos. Use as políticas de bucket abaixo na origem e no destino para copiar de um bucket de uma conta para outra usando um usuário do IAM

Balde para copiar de - SourceBucket

Balde para copiar para - DestinationBucket

ID da conta de origem da AWS - XXXX – XXXX-XXXX

Usuário do IAM de origem - src – iam-user

A política abaixo significa - o usuário do IAM - XXXX - XXXX - XXXX: src - iam - user tem os privilégios s3: ListBucket e s3: GetObject nos privilégios SourceBucket / * e s3: ListBucket e s3: PutObject no DestinationBucket / *

No SourceBucket, a política deve ser como:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

No DestinationBucket, a política deve ser:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}
O comando

a ser executado é s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1

    
por 20.11.2013 / 00:27
8

Quando enfrentei o mesmo problema, a AWS exigiu que a criptografia do lado do servidor fosse ativada. Então, o seguinte comando funcionou com sucesso para mim:

aws s3 cp test.txt s3://my-s3-bucket --sse AES256
    
por 19.09.2017 / 10:53
4

Eu não recomendaria a opção "Qualquer usuário autenticado da AWS" mencionada por James.

Isso adiciona uma ACL no nível do bloco que permite que qualquer conta da AWS (não apenas seus usuários do IAM) liste / exclua / modifique-acls para esse intervalo.

i.e. leitura / gravação pública para qualquer pessoa com uma conta aws.

    
por 12.06.2016 / 12:51
3

Consegui consertar isso sem precisar escrever diretivas - no console do S3 (web ui) selecionei o intervalo e na guia permissões, selecione "Qualquer usuário autenticado da AWS" e marque todas as caixas.

ATUALIZAÇÃO: como apontado nos comentários "Qualquer usuário autenticado da AWS" não é apenas um usuário da sua conta, é um usuário autenticado da AWS, use com cautela

    
por 01.03.2016 / 14:52
2

Mesmo que suas políticas do IAM estejam configuradas corretamente, você ainda pode receber um erro como An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied devido aos requisitos de MFA (Autenticação de vários fatores) nas suas credenciais. Eles podem pegá-lo desprevenido porque, se você já fez login no console da AWS, parecerá que suas credenciais estão funcionando bem, e a permissão negada pela mensagem de erro do aws cli não é particularmente útil.

Existem algumas boas instruções sobre como configurar o MFA com o aws cli:

Basicamente, você precisa da necessidade de acessar o endereço do seu dispositivo MFA e enviá-lo com o código do seu dispositivo para obter um token temporário.

    
por 12.07.2017 / 19:00
0

Eu simplesmente acessei a webUI e cliquei no bloco, depois fui para as permissões e fui para a política. Quando abri, cliquei em excluir. Eu fiz isso porque acho que foi configuração também.

Voltei para a página principal do s3, depois cliquei no bloco e tentei excluí-lo e funcionou.

mesmo quando eu fiz isso pelo aws-cli usando

$ aws s3 rb s3://bucket-name --force  

De qualquer forma, isso é o que funcionou para mim. A política de permissões está impedindo você de excluir o intervalo.

    
por 14.10.2017 / 06:19
0

Assim que obtiver este erro, basta tentar executar:

aws s3 cp s3://[bucketName]/[fileName] .

em uma pasta em que eu não tenho permissões. É bobo, mas certifique-se de ser o dono da pasta em que você está antes de seguir em frente!

    
por 16.08.2018 / 06:48