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?
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/*"
]
}
] }
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!
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*"
]
}
]
}
Je ne pouvais pas accéder à S3 parce que
Solution: rm -rf .aws/credentials
, puis aws
utilise le rôle.
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"
}
]
}
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"
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
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}
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.