Estou realmente se debatendo na AWS tentando descobrir o que estou perdendo aqui. Gostaria de fazê-lo para que um usuário do IAM possa baixar arquivos de um bucket S3 - sem apenas tornar os arquivos totalmente públicos - mas estou tendo acesso negado. Se alguém puder descobrir o que está acontecendo, ficarei feliz.
O que eu fiz até agora:
- Criou um usuário chamado my-user (por exemplo)
- Chaves de acesso geradas para o usuário e colocadas em ~ / .aws em uma instância do EC2
- Criei uma política de bucket que eu esperava conceder acesso ao meu usuário
- Executou o comando
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
Política de bucket:
{
"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
que posso fazer o download usando o mesmo comando e as teclas de acesso padrão (conta root?).
Eu tentei adicionar uma política de usuário também. Embora eu não saiba por que seria necessário, pensei que não iria doer, então anexei isso ao meu usuário.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Mesmos resultados.
Quando enfrentei o mesmo problema, a AWS exigiu que a criptografia do lado do servidor estivesse ativada. Portanto, o seguinte comando funcionou com êxito para mim:
fonte
--sse aws:kms
de usar o balde "default" ...--sse-kms-key-id 0123-abc-etc
No entanto, a parte que não está clara é que, para usar sua própria chave KMS, você deve ter a permissão IAMkms:GenerateDataKey
ou o acesso será negado.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 os usuários do IAM) liste / exclua / modifique-acls para esse bloco.
isto é, leitura / gravação pública para qualquer pessoa com uma conta aws.
fonte
Consegui consertar isso sem precisar escrever políticas - no console S3 (ui da web), selecionei o bucket e, na guia permissões, escolhi "Qualquer usuário autenticado da AWS" e marquei todas as caixas.
ATUALIZAÇÃO: como indicado nos comentários "Qualquer usuário autenticado da AWS" não é apenas um usuário da sua conta; é apenas um usuário autenticado da AWS, use com cuidado
fonte
Mesmo que suas políticas do IAM estejam configuradas corretamente, você ainda poderá receber um erro
An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
devido aos requisitos de MFA (autenticação multifator) em suas credenciais. Isso pode pegá-lo desprevenido porque, se você já fez login no console da AWS, parece que suas credenciais estão funcionando bem, e a permissão de mensagem de erro negada pelo aws cli não é particularmente útil.Já existem algumas boas instruções sobre como configurar o MFA com o aws cli:
Basicamente, você precisa acessar o endereço do seu dispositivo MFA e enviá-lo com o código do seu dispositivo para obter um token temporário.
fonte
Simplesmente entrei na webUI e cliquei no balde, depois fui em permissões e depois em política. Quando o abri, cliquei em excluir. Fiz isso porque acho que também era configuração.
Voltei à página principal do s3, cliquei no balde e tentei excluí-lo e funcionou.
mesmo quando eu fiz isso por aws-cli usando
Enfim, é isso que funcionou para mim. A política de permissões está impedindo que você exclua o bucket.
fonte
Depois que eu recebi esse erro, simplesmente tentando executar:
aws s3 cp s3://[bucketName]/[fileName] .
em uma pasta onde eu não tinha permissões. É bobagem, mas verifique se você é o proprietário da pasta em que está antes de prosseguir!
fonte
O problema surge quando você insere nomes de recursos ou objetos inválidos. Eu tive o mesmo problema com o boto3 (no meu caso, era um nome de bloco inválido)
fonte