web-dev-qa-db-fra.com

AccessDenied pour le compartiment ListObjects for S3 lorsque les autorisations sont s3: *

Je reçois

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

quand j'essaie d'obtenir un dossier de mon seau S3.

Utiliser cette commande

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

Les autorisations IAM pour le compartiment ressemblent à ceci

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

Que dois-je changer pour pouvoir copy et ls avec succès?

90
user1411335

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

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

Si vous souhaitez copier de manière récursive tous les objets de compartiment s3 à l'aide de la commande "aws s3 cp s3: // nom de compartiment/données/toutes les données /. --Recursive", voici la politique minimale requise 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 déclaration de cette stratégie permet de répertorier les objets à l'intérieur du compartiment. Sachez qu'avec ce paramètre, vous autorisez également la liste des objets dans les sous-répertoires de ce compartiment. Il ne semble pas possible de ne donner que la permission de ls aux sous-répertoires s3. Essayez donc d'appliquer cette action à la ressource "arn: aws: s3 ::: // nom de compartiment/data/all-data /" won ' t fonctionne comme prévu (j’ai testé et essayé plusieurs façons de le faire, toute aide serait la bienvenue).

La deuxième instruction de cette stratégie permet de placer des objets à l'intérieur du compartiment dans un sous-répertoire spécifique. Cela signifie que tout ce que vous pourrez copier dans le chemin "s3: // bucket-name/data/all-data /". Sachez que cela ne vous permet pas de copier à partir des chemins parents tels que "s3: // bucket-name/data /".

Un problème similaire à celui-ci peut être trouvé ici, ce qui m’a amené à la solution que je propose. https://github.com/aws/aws-cli/issues/2408

J'espère que cette aide!

24
Robert Smith

Vous devez spécifier une ressource pour le compartiment via "arn: aws: 3 ::: bucketname" ou "arn: aws: 3 ::: bucketname *". Ce dernier est préféré car il permet également des manipulations sur les objets du godet. Remarquez qu'il n'y a pas de barre oblique!

Lister des objets est une opération sur Bucket. Par conséquent, l'action "s3: ListBucket" est requise. L'ajout d'un objet au compartiment est une opération sur l'objet. Par conséquent, l'action "s3: PutObject" est nécessaire. Vous voudrez certainement ajouter d’autres actions selon vos besoins.

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

Je ne pouvais pas accéder à S3 parce que

  • j'ai d'abord configuré l'accès à la clé sur l'instance (il était alors impossible d'attacher un rôle après le lancement)
  • oublié pendant quelques mois
  • rôle attaché à l'instance
  • essayé d'accéder. La priorité configurée pour la clé configurée était supérieure à celle de rôle et l'accès était refusé car l'utilisateur ne disposait pas des autorisations S3 nécessaires.

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

7
Putnik

J'ai eu la même erreur en utilisant la politique ci-dessous, bien que j'ai "s3: ListBucket" pour l'opération s3: ListObjects.

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
  ]
 }

Puis je l'ai corrigé en ajoutant une ligne "arn: aws: s3 ::: bucketname"

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
             "arn:aws:s3:::<bucketname>",
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
 ]
}
5
Gabriel Wu

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

4
Sudhakar Naidu

J'ai affronté le même problème. Je viens d'ajouter des informations d'identification config:

aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key

dans "~/.aws/credentials" + redémarrer le terminal pour le profil par défaut.

Dans le cas de multi profils --profil arg doit être ajouté:

aws s3 sync ./localDir s3://bucketName --profile=${PROFILE_NAME}

où NOM DE PROFIL:

.bash_profile ( or .bashrc) -> export PROFILE_NAME="yourProfileName"

Plus d'informations sur la configuration des informations d'identification et des profils multiples peuvent être trouvées ici

1
Ihor Pavlyk

J'ai essayé ce qui suit:

aws s3 ls s3.console.aws.Amazon.com/s3/buckets/{bucket name}

Cela m'a donné l'erreur:

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

En utilisant ce formulaire a fonctionné:

aws s3 ls {bucket name}
0
Henry

Couru dans un problème similaire, pour moi le problème était que j'avais différentes clés AWS définies dans mon bash_profile.

J'ai répondu à une question similaire ici: https://stackoverflow.com/a/57317494/11871462

Si vous avez des clés AWS en conflit dans votre profil bash, AWS CLI utilise par défaut ces valeurs.

0
Varun Tandon