J'ajoute une réponse dans le même sens que la réponse acceptée mais avec de petites différences (importantes) et en ajoutant plus de détails.
Considérez la configuration ci-dessous:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
La stratégie accorde un accès en écriture-suppression par programme et est séparée en deux parties:
L' ListBucket
action fournit des autorisations au niveau du compartiment et les autres PutObject/DeleteObject
actions nécessitent des autorisations sur les objets à l'intérieur du compartiment.
Le premier élément Resource spécifie arn:aws:s3:::<Bucket-Name>
l' ListBucket
action afin que les applications puissent répertorier tous les objets du compartiment.
Le deuxième élément Resource spécifie arn:aws:s3:::<Bucket-Name>/*
les actions PutObject
, et DeletObject
afin que les applications puissent écrire ou supprimer tous les objets du compartiment.
La séparation en deux «arns» différents est importante pour des raisons de sécurité afin de spécifier des autorisations à granularité fine au niveau du compartiment et au niveau de l'objet.
Notez que si j'avais spécifié juste GetObject
dans le 2ème bloc, ce qui se passerait, c'est que dans les cas d'accès programmatique, je recevrais une erreur comme:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.
aws
pour un utilisateur et je l'ai utilisé dans un script bash appelé cronjob d'un autre utilisateur, ce qui signifie que la clé d'accès et le jeton d'accès étaient erronés / non définis. Ma solution était de mettre directement les informations d'identification (AWS_ACCESS_KEY_ID
etAWS_SECRET_ACCESS_KEY
) dans mon fichier de script bash comme décrit ici .