Je suis les instructions de cette réponse pour générer la stratégie de compartiment S3 suivante:
{
"Id": "Policy1495981680273",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1495981517155",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::surplace-audio",
"Principal": "*"
}
]
}
Je récupère l'erreur suivante:
L'action ne s'applique à aucune ressource dans la déclaration
Qu'est-ce qui me manque dans ma police?
D'après les documents IAM, http://docs.aws.Amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action
Certains services ne vous permettent pas de spécifier des actions pour des ressources individuelles; à la place, toutes les actions que vous répertoriez dans l'élément Action ou NotAction s'appliquent à toutes les ressources de ce service. Dans ces cas, vous utilisez le caractère générique * dans l'élément Ressource.
Avec cette information, ressource devrait avoir une valeur comme ci-dessous:
"Resource": "arn:aws:s3:::surplace-audio/*"
Le simple fait de retirer la permission s3:ListBucket
n'était pas vraiment une bonne solution pour moi, et probablement pas pour beaucoup d'autres.
Si vous souhaitez obtenir l'autorisation s3:ListBucket
, vous devez simplement disposer du nom de fichier du seau (sans le /*
à la fin) car cette autorisation s'applique au seau lui-même et non aux éléments qu'il contient.
Comme indiqué ci-dessous, vous devez disposer de l'autorisation s3:ListBucket
comme instruction distincte des autorisations relatives aux éléments du compartiment, telles que s3:GetObject
et s3:PutObject
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Principal": {
"AWS": "[IAM ARN HERE]"
},
"Resource": "arn:aws:s3:::my-bucket-name"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Principal": {
"AWS": "[IAM ARN HERE]"
},
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
Action d'erreur ne s'applique à aucune ressource dans l'instruction
Cela signifie simplement que l'action (que vous avez écrite dans la stratégie) ne s'applique pas à la ressource. J'essayais de rendre public mon seau pour que tout le monde puisse le télécharger depuis mon seau. J'obtenais une erreur jusqu'à ce que je supprime ("s3: ListBucket") de ma déclaration.
{
"Id": "Policyxxxx961",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmtxxxxx4365",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket-name/*",
"Principal": "*"
}
]
}
Étant donné que le compartiment de liste ne s'applique pas à l'intérieur du compartiment, la suppression de cette stratégie d'action a donc bien fonctionné.
J'ai juste rencontré ce problème et trouvé une solution plus courte pour ceux qui souhaitent avoir ListBucket et GetObject dans la même stratégie.
{
"Id": "Policyxxxx961",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmtxxxxx4365",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
],
"Principal": "*"
}
]
}
J'ai également fait face au même problème lors de la création du seau
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mrt9949"
]
}
]
}
J'ai changé le code ci-dessus en
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mrt9949/*"
]
}
]
}
ajoutez / * au nom de votre compartiment, le problème sera résolu
Ici mon nom de seau est mrt9949
Dans mon cas, la solution à cette erreur consistait à supprimer certaines des actions que j’appliquais. Certains d'entre eux ne sont pas pertinents ou ne peuvent pas fonctionner avec cette ressource. Dans ce cas, cela ne me permettrait pas d'inclure ceux-ci:
GetBucketAcl ListBucket ListBucketMultipartUploads