Ao criar políticas do Amazon IAM para Amazon S3 , você precisa estar ciente da diferença entre Operações no serviço (por exemplo, ListAllMyBuckets ), Operações em buckets (por exemplo, ListBucket ) e Operações em objetos (por exemplo, GetObject ).
Em particular, a especificação Resource
de sua política precisa abordar as entidades de destino apropriadas de acordo com os seguintes padrões (veja, por exemplo, os vários Políticas de exemplo para o Amazon S3 ):
- Operações no serviço -
arn:aws:s3:::*
- Operações em buckets -
arn:aws:s3:::<bucket>
- Operações em objetos -
arn:aws:s3:::<bucket>/<object>
Solução
Você está encontrando Access Denied
, porque você especificou um recurso de nível de intervalo para PutObject
, que requer uma especificação de recurso no nível de objeto como arn:aws:s3:::<bucket>/*
- a seguinte política deve abranger seu caso de uso de amostra:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucketname"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
]
}