Estou obtendo:
Ocorreu um erro (AccessDenied) ao chamar a operação ListObjects: Acesso negado
Quando tento obter pasta do meu bucket S3.
Usando este comando:
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
As permissões do IAM para o bucket são assim:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
O que preciso alterar para poder copy
e ter ls
sucesso?
amazon-web-services
amazon-s3
user1411335
fonte
fonte
aws
para um usuário e o usei dentro de um script bash chamado cronjob de outro usuário, o que significa que a chave de acesso e o token de acesso estavam errados / não configurados. Minha solução foi colocar diretamente as credenciais (AWS_ACCESS_KEY_ID
eAWS_SECRET_ACCESS_KEY
) no meu arquivo de script bash, conforme descrito aqui .Respostas:
Você concedeu permissão para executar comandos em objetos dentro do bucket do S3, mas não deu permissão para executar nenhuma ação no próprio bucket.
Modificar levemente sua política seria assim:
No entanto, isso provavelmente dá mais permissão do que o necessário. Seguindo as práticas recomendadas do AWS IAM de Concessão de menos privilégios, seria algo como isto:
fonte
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
como eu fiz (ou seja, você quer apenas uma barra antes do*
) - Levei 4 longas horas para realizar esse erro causou todas as minhaslistObjects
chamadas para falhar ...Se você deseja copiar todos os objetos de bloco s3 usando o comando "aws s3 cp s3: // nome do bloco / dados / todos os dados /. --Recursive" como você mencionou, aqui está uma política segura e mínima para fazer isso:
A primeira instrução nesta política permite listar objetos dentro do subdiretório de um intervalo específico. O recurso precisa ser o arn do bloco S3 e, para limitar a listagem a apenas um subdiretório nesse bloco, você pode editar o valor "s3: prefix".
A segunda instrução nesta política permite colocar objetos dentro do bucket em um subdiretório específico. Isso significa que qualquer coisa dentro do caminho "s3: // bucket-name / data / all-data /" você poderá copiar. Esteja ciente de que isso não permite copiar dos caminhos-pai, como "s3: // bucket-name / data /".
Esta solução é específica para limitar o uso de comandos da AWS CLI; se você precisar limitar o acesso ao S3 por meio do console ou da API da AWS, serão necessárias mais políticas. Sugiro que você dê uma olhada aqui: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ .
Um problema semelhante a esse pode ser encontrado aqui, o que me levou à solução que estou dando. https://github.com/aws/aws-cli/issues/2408
Espero que isto ajude!
fonte
ListBucket
a uma subchave: stackoverflow.com/a/35952877/89218Você deve especificar Recurso para o bucket via "arn: aws: 3 ::: bucketname" ou "arn: aws: 3 ::: bucketname *". O último é preferido, pois também permite manipulações nos objetos do balde. Observe que não há barra!
Listar objetos é uma operação no Bucket. Portanto, a ação "s3: ListBucket" é necessária. Adicionar um objeto ao Balde é uma operação em Objeto. Portanto, a ação "s3: PutObject" é necessária. Certamente, você pode querer adicionar outras ações conforme necessário.
fonte
arn:aws:s3:::bucketname*
é que ele também permite o acesso aarn:aws:s3:::bucketname-with-suffix
Não consegui acessar o S3 porque
Solução:,
rm -rf .aws/credentials
entãoaws
usa role.fonte
Eu recebi o mesmo erro ao usar a política abaixo, embora eu tenha "s3: ListBucket" para a operação s3: ListObjects.
Então eu o corrigi adicionando uma linha "arn: aws: s3 ::: bucketname"
fonte
Eu estava pensando que o erro se devia à ação "s3: ListObjects" , mas tive que adicionar a ação "s3: ListBucket" para resolver o problema "AccessDenied for bucket ListObjects for S3"
fonte
Eu enfrentei o mesmo problema. Acabei de adicionar credenciais de configuração:
em "~ / .aws / credentials" + reinicie o terminal para o perfil padrão.
No caso de multi-perfis - arg --profile precisa ser adicionado:
onde PROFILE_NAME :
Mais informações sobre como configurar credenciais e perfis múltiplos podem ser encontradas aqui
fonte
Eu tentei o seguinte:
Isso me deu o erro:
Usando este formulário funcionou:
fonte
Estou adicionando uma resposta com a mesma direção que a resposta aceita, mas com pequenas (importantes) diferenças e adicionando mais detalhes.
Considere a configuração abaixo:
A política concede acesso programático de exclusão de gravação e é separada em duas partes:
a
ListBucket
ação fornece permissões no nível do bloco e as outrasPutObject/DeleteObject
ações requerem permissões nos objetos dentro do bloco.O primeiro elemento Resource especifica
arn:aws:s3:::<Bucket-Name>
aListBucket
ação para que os aplicativos possam listar todos os objetos no bucket.O segundo elemento Resource especifica
arn:aws:s3:::<Bucket-Name>/*
as açõesPutObject
, eDeletObject
para que os aplicativos possam gravar ou excluir qualquer objeto no bucket.A separação em dois 'arns' diferentes é importante por motivos de segurança, a fim de especificar permissões refinadas no nível do bucket e no nível do objeto.
Observe que se eu tivesse especificado apenas
GetObject
no segundo bloco, o que aconteceria é que, nos casos de acesso programático, eu receberia um erro como:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.fonte
Ocorreu um problema semelhante. Para mim, o problema era que eu tinha diferentes chaves da AWS definidas no meu bash_profile.
Respondi a uma pergunta semelhante aqui: https://stackoverflow.com/a/57317494/11871462
Se você tiver chaves AWS conflitantes em seu perfil de bash, a CLI da AWS assumirá o padrão delas.
fonte
Eu tive esse problema meu requisito que eu queria permitir que o usuário escrevesse no caminho específico
e o problema foi resolvido com essa mudança
fonte