web-dev-qa-db-fra.com

L'action Seau S3 ne s'applique à aucune ressource

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?

80
Philip Kirkbride

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/*"
128
Oluwafemi Sule

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/*"
    }
  ]
}
38
Luke

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é.

36
Vaseem007

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": "*"
    }
  ]
}
9
Alex Spence

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

1

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

0
Yehuda Clinton