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' ListBucketaction fournit des autorisations au niveau du compartiment et les autres PutObject/DeleteObjectactions 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' ListBucketaction 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 DeletObjectafin 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 GetObjectdans 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.
awspour 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_IDetAWS_SECRET_ACCESS_KEY) dans mon fichier de script bash comme décrit ici .