L'action du compartiment S3 ne s'applique à aucune ressource

124

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 l'instruction

Que suis-je absent de ma police?

Philip Kirkbride
la source
1
J'ai essayé la solution dans le lien: stackoverflow.com/a/36551238/2786039 Et ça marche maintenant. Regards
Vuong Nguyen

Réponses:

218

À partir de la documentation 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 Resource.

Avec ces informations, la ressource doit avoir une valeur comme ci-dessous:

"Resource": "arn:aws:s3:::surplace-audio/*"
Oluwafemi Sule
la source
40
Je ne peux pas croire que cela ne soit pas mentionné dans la politique de bucket et / ou dans le générateur de politique!
Carles Alcolea
4
J'utilise * et cela donne toujours cette erreur. quelqu'un pourrait-il m'aider?
Yehuda Clinton
@YehudaClinton, travaille pour moi. assurez-vous d'ajouter les deux / *
RMati
74

Le simple fait de retirer l' s3:ListBucketautorisation n'était pas vraiment une solution suffisante pour moi, et probablement pas pour beaucoup d'autres.

Si vous souhaitez s3:ListBucketobtenir l' autorisation, vous devez simplement avoir l'arn simple du compartiment (sans le /*à la fin) car cette autorisation s'applique au compartiment lui-même et non aux éléments du compartiment.

Comme indiqué ci-dessous, vous devez avoir l' s3:ListBucketautorisation en tant qu'instruction distincte des autorisations relatives aux éléments du compartiment comme s3:GetObjectet 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/*"
    }
  ]
}
Luke
la source
D'accord. Pour certaines actions, l'autorisation ListBucket est nécessaire avant de pouvoir exécuter GetObject, cette réponse est donc plus approfondie.
3cheesewheel le
2
Cela fonctionne pour moi et ne fait que souligner la quantité de travail qu'il reste à AWS pour guider les utilisateurs dans les tâches de base.
volvox
41

L'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 bucket afin que tout le monde puisse le télécharger à partir de mon bucket. 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 bucket de liste ne s'applique pas à l'intérieur du bucket, la suppression de cette stratégie d'action a bien fonctionné.

Vaseem007
la source
Merci, cela a fonctionné pour moi, en supprimant "s3: ListBucket".
Paul Watson
14

Je viens de rencontrer ce problème et j'ai 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": "*"
    }
  ]
}
Alex Spence
la source
Wrong - Le Principaln'est pas autorisé pour la grammaire de la stratégie S3.
azec-pdx
Aucune des solutions ci-dessus n'a fonctionné pour moi, le principal était soit invalide, soit l'accès me serait refusé.
Daniel
C'est correct, la ressource devrait être un tableau dans ce cas et pour inclure ces 2 lignes ... Votez.
Assil
4

J'ai également rencontré le 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 bucket, cela résoudra le problème

Ici mon nom de seau est mrt9949

Ravi Teja Mureboina
la source
Je vous remercie!
J'ai
4

Dans mon cas, la solution à cette erreur essayait de 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

Yehuda Clinton
la source
ListBucket m'a eu! Merci pour cela
Quad64Bit
Pour moi, a travaillé en gardant uniquement getObjet
LittleTiger
0

Vous devez vérifier le modèle de l'arn défini sous la balise Resource pour la politique-

"Ressource": "arn: aws: s3 ::: s3mybucketname / *"

L'ajout de "/ *" à la fin aiderait à résoudre le problème si vous y faisiez face même après avoir débloqué votre politique d'accès public pour votre bucket.

Pinaki
la source
0
  • Accédez à Amazon S3 dans votre instance.
  • Accédez à Permissions -> onglet Accès public.
  • Sélectionnez Modifier et décochez Bloquer tout accès public et enregistrez.
  • Vous verrez la balise «Public» dans l'onglet Autorisation et la liste de contrôle d'accès.
Chathura Devinda
la source
0

Vous pouvez également configurer ListBuckets pour chaque dossier, comme ceci

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

Ces règles sont utilisées avec SES pour recevoir un e-mail, mais permettent à un utilisateur externe d'afficher les fichiers qui ont été placés dans le compartiment par SES. J'ai suivi les instructions d'ici: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

En outre, vous devez spécifier le préfixe domain.co/user/avec barre oblique à la fin lorsque vous utilisez le SDK, sinon vous obtiendrez l'accès refusé. j'espère que ça aide n'importe qui

zavr
la source