Je reçois:
Une erreur s'est produite (AccessDenied) lors de l'appel de l'opération ListObjects: Accès refusé
Quand j'essaye d'obtenir le dossier de mon compartiment S3.
En utilisant 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
réussir?
amazon-web-services
amazon-s3
utilisateur1411335
la source
la source
aws
pour un utilisateur et je l'ai utilisé dans un script bash appelé cronjob d'un autre utilisateur, ce qui signifie que la clé d'accès et le jeton d'accès étaient erronés / non définis. Ma solution était de mettre directement les informations d'identification (AWS_ACCESS_KEY_ID
etAWS_SECRET_ACCESS_KEY
) dans mon fichier de script bash comme décrit ici .Réponses:
Vous avez donné l'autorisation d'exécuter des commandes sur des objets dans le compartiment S3, mais vous n'avez pas donné l'autorisation d'effectuer des actions sur le compartiment lui-même.
Une légère modification de votre politique ressemblerait à ceci:
Cependant, cela donne probablement plus de permission que nécessaire. Suivre les bonnes pratiques AWS IAM d' octroi du moindre privilège ressemblerait à ceci:
la source
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
comme je l'ai fait (c'est-à-dire que vous ne voulez qu'une barre oblique avant le*
) - m'a pris 4 longues heures pour réaliser que cette erreur a fait échouer tous meslistObjects
appels ...Si vous souhaitez copier tous les objets du compartiment s3 à l'aide de la commande "aws s3 cp s3: // nom du compartiment / data / all-data /. --Recursive" comme vous l'avez mentionné, voici une politique sûre et minimale pour le faire:
La première instruction de cette stratégie permet de répertorier les objets dans le sous-répertoire d'un compartiment spécifique. La ressource doit être l'arn du compartiment S3, et pour limiter la liste à un seul sous-répertoire de ce compartiment, vous pouvez modifier la valeur "s3: prefix".
La deuxième déclaration de cette stratégie permet d'obtenir des objets à l'intérieur du compartiment dans un sous-répertoire spécifique. Cela signifie que tout ce qui se trouve dans le chemin "s3: // nom du compartiment / data / all-data /" que vous pourrez copier. Sachez que cela ne vous permet pas de copier à partir de chemins parents tels que "s3: // nom du compartiment / data /".
Cette solution est spécifique à la limitation de l'utilisation des commandes AWS CLI; si vous devez limiter l'accès S3 via la console ou l'API AWS, d'autres stratégies seront nécessaires. Je suggère de jeter un œil ici: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ .
Un problème similaire à celui-ci peut être trouvé ici qui m'a conduit à la solution que je donne. https://github.com/aws/aws-cli/issues/2408
J'espère que cela t'aides!
la source
ListBucket
à une sous-clé: stackoverflow.com/a/35952877/89218Vous devez spécifier Resource pour le bucket 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 bucket. Remarquez qu'il n'y a pas de barre oblique!
La liste des objets est une opération sur Bucket. Par conséquent, l'action "s3: ListBucket" est requise. L'ajout d'un objet au Bucket est une opération sur Object. Par conséquent, l'action "s3: PutObject" est nécessaire. Vous souhaiterez certainement ajouter d'autres actions selon vos besoins.
la source
arn:aws:s3:::bucketname*
c'est qu'il permet également d'accéder àarn:aws:s3:::bucketname-with-suffix
Je n'ai pas pu accéder à S3 car
Solution:,
rm -rf .aws/credentials
puisaws
utilise le rôle.la source
J'ai eu la même erreur lors de l'utilisation de la politique ci-dessous, bien que j'aie "s3: ListBucket" pour l'opération s3: ListObjects.
Ensuite, je l'ai corrigé en ajoutant une ligne "arn: aws: s3 ::: bucketname"
la source
Je pensais que l'erreur était 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"
la source
J'ai fait face au même problème. Je viens d'ajouter la configuration des informations d'identification:
dans "~ / .aws / credentials" + redémarrer le terminal pour le profil par défaut.
Dans le cas de profils multiples --profile arg doit être ajouté:
où PROFILE_NAME :
Plus d'informations sur la configuration des identifiants et des profils multiples peuvent être trouvées ici
la source
J'ai essayé ce qui suit:
Cela m'a donné l'erreur:
L'utilisation de ce formulaire a fonctionné:
la source
J'ajoute une réponse dans le même sens que la réponse acceptée mais avec de petites différences (importantes) et en ajoutant plus de détails.
Considérez la configuration ci-dessous:
La stratégie accorde un accès en écriture-suppression par programme et est séparée en deux parties:
L'
ListBucket
action fournit des autorisations au niveau du compartiment et les autresPutObject/DeleteObject
actions nécessitent des autorisations sur les objets à l'intérieur du compartiment.Le premier élément Resource spécifie
arn:aws:s3:::<Bucket-Name>
l'ListBucket
action afin que les applications puissent répertorier tous les objets du compartiment.Le deuxième élément Resource spécifie
arn:aws:s3:::<Bucket-Name>/*
les actionsPutObject
, etDeletObject
afin que les applications puissent écrire ou supprimer tous les objets du compartiment.La séparation en deux «arns» différents est importante pour des raisons de sécurité afin de spécifier des autorisations à granularité fine au niveau du compartiment et au niveau de l'objet.
Notez que si j'avais spécifié juste
GetObject
dans le 2ème bloc, ce qui se passerait, c'est que dans les cas d'accès programmatique, je recevrais une erreur comme:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.la source
Ran 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 bash_profile, AWS CLI les utilise par défaut à la place.
la source
J'ai eu ce problème, je voulais autoriser l'utilisateur à écrire dans un chemin spécifique
et le problème a été résolu avec ce changement
la source