253 votes

AccessDenied pour ListObjects pour S3 seau lorsque les autorisations sont s3:*

Je suis arriver

Une erreur s'est produite (AccessDenied) lors de l'appel de la ListObjects opération: Accès Refusé

lorsque j'essaie d'obtenir le dossier de mon S3 seau.

À l'aide de cette commande

aws s3 cp s3://bucket-name/data/all-data/ . --recursive

L'IAM autorisations pour le seau ressembler à ceci

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }

De quoi ai-je besoin de changer pour être en mesure d' copy et ls avec succès?

378voto

mbaird Points 31293

Vous en avez donné la permission d'exécuter des commandes sur les objets à l'intérieur du compartiment S3, mais vous n'avez pas donné l'autorisation d'effectuer des actions sur le seau lui-même. Modifier votre politique est la suivante:

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname",
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }

55voto

Robert Smith Points 136

Si vous vouliez copier récursivement tous les compartiment s3 objets à l'aide de la commande "aws s3 cp s3://seau-nom/data/tous-data/ . --recursive" comme vous l'avez mentionné, ici, c'est le minimum de la politique nécessaire pour le faire:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::bucket-name"
          ]
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject"
          ],
          "Resource": [
              "arn:aws:s3:::bucket-name/data/all-data/*"
          ]
      }
  ]
}

La première instruction dans cette politique permet à la cotation des objets à l'intérieur du seau. Être conscient du fait qu'avec ce paramètre, vous autoriserait également les objets de la liste dans les sous-répertoires de ce compartiment. Il ne semble pas possible de ne donner ls autorisation pour le s3 sous-répertoires, et donc essayer d'appliquer cette action à la ressource "arn:aws:s3::://seau-nom/data/tous-data/" ne fonctionne pas comme prévu (j'ai testé et essayé plusieurs façons de le faire, de l'aide ici serait appréciée).

Le deuxième énoncé dans la présente politique permet d'obtenir des objets à l'intérieur du seau à un sous-répertoire. Cela signifie que quoi que ce soit à l'intérieur de la "s3://seau-nom/data/tous-data/" chemin d'accès que vous serez en mesure de copier. Être conscient que cela ne va pas vous permettre de copier des parents des chemins tels que "s3://seau-nom/data/".

Un problème similaire à ce qui peut être trouvé ici ce qui m'a conduit à la solution je suis de donner. https://github.com/aws/aws-cli/issues/2408

Espérons que cette aide!

9voto

Putnik Points 244

J'ai été incapable d'accéder à S3 parce que

  • d'abord, j'ai configuré la clé de l'accès à l'instance (il a été impossible de joindre rôle après le lancement de l'époque)
  • oublié pendant quelques mois
  • attaché rôle d'instance de
  • essayé d'accès. La configuration de la clé de priorité plus élevée que le rôle et l'accès a été refusé parce que l'utilisateur n'était pas accordée avec nécessaire S3 autorisations.

Solution: rm -rf .aws/credentials, alors aws utilise rôle.

5voto

user1016615 Points 307

Vous devez spécifier des Ressources pour le seau via "arn:aws:3:::bucketname" ou "arn:aws:3:::bucketname*". Ce dernier est préféré puisqu'il permet à des manipulations sur le seau, les objets de trop. Notez qu'il n'est pas de slash!

Liste des objets est une opération sur le Seau. Par conséquent, l'action "s3:ListBucket" est nécessaire. L'ajout d'un objet dans le Seau est une opération sur l'Objet. Par conséquent, l'action "s3:PutObject" est nécessaire. Certainement, vous pouvez ajouter d'autres actions que vous avez besoin.

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname*"
        ]
    }
] 
}

4voto

Sudhakar Naidu Points 51

Je pensais que l'erreur est due à "s3:ListObjects" action, mais j'ai dû ajouter l'action "s3:ListBucket" pour résoudre le problème "AccessDenied pour ListObjects pour S3 seau"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X