J'ai un compartiment simple qui ressemble images.mysite.com
à mon S3 et à d'autres compartiments contenant des sauvegardes, etc.
Je souhaite autoriser un utilisateur spécifique à accéder au images.mysite.com
bucket afin de télécharger des images. Cependant, je ne veux PAS qu'il voie les autres seaux; même pas qu’ils existent.
Je ne pourrais pas faire une politique qui fasse cela; chaque fois que j'essaie quelque chose de restrictif, cela finit par bloquer la liste de tous les seaux.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. De cette façon, vous les empêchez de voir la liste complète et ne changez rien à votre politique actuelle.Réponses:
J'essaie cela depuis un moment et j'ai finalement trouvé une solution de travail. Vous devez utiliser des «ressources» différentes selon le type d'action que vous effectuez. J'ai également inclus certaines actions manquantes dans la réponse précédente (comme
DeleteObject
) et en restreignant d'autres (commePutBucketAcl
).La stratégie IAM suivante fonctionne pour moi maintenant:
Les actions concernant un bucket et celles concernant les objets doivent avoir un arn différent.
la source
ListAllMyBuckets
etGetBucketLocation
pour tous les compartiments S3 ("arn:aws:s3:::*"
fonctionnera plutôt que"*"
pour la ressource). Comme indiqué dans cet article de blog AWS, "en passant, vous ne pouvez actuellement pas filtrer sélectivement certains compartiments, les utilisateurs doivent donc avoir l'autorisation de répertorier tous les compartiments pour l'accès à la console."Notre cas d'utilisation: fournir un espace de sauvegarde pour les clients de notre application cloud auquel les clients peuvent accéder directement à l'aide des outils S3 courants. Bien sûr, aucun client ne devrait voir ce que les autres clients ont.
Comme l'a expliqué cloudberryman, "Vous pouvez soit lister tous les buckets, soit aucun.", Nous devons donc trouver une solution. Contexte:
L'octroi des droits ListAllMyBuckets à l'utilisateur est nécessaire pour que la console AWS S3 ou S3Fox se connecte sans message d'erreur. Mais ListAllMyBuckets répertorie tous les buckets, en ce qui concerne les ressources affectées (en fait, seul arn: ... ::: * fonctionne). C'est un bug sérieux, si vous me demandez. Btw. refuser ListBucket pour tous les buckets ne les empêche pas d'être répertoriés, car ListBucket accorde le droit de lister le contenu du bucket.
Il y a 3 possibilités que j'ai considérées comme des contournements. J'ai choisi le dernier.
(1) utiliser des noms de compartiment cryptiques, par exemple des GUID
Avantage: facile à installer
Inconvénient: difficile à gérer, surtout pour le client. (Imaginez trouver un GUID spécifique parmi des milliers d'autres.) Affiche également le nombre de compartiments = nombre de clients utilisant le service de sauvegarde.
(2) utiliser un compartiment avec des dossiers spécifiques au client
C'est ainsi qu'Amazon suggère par ses exemples S3 / IAM de fournir un espace d'accès uniquement à certains utilisateurs ou groupes d'utilisateurs. Voir: Exemples de stratégies IAM AWS
Avantage: assez facile à mettre en place, va avec les idées AWS
Inconvénient: oblige à rendre public l'existence de tous les seaux, afin que le client puisse trouver son seau «maison». La comptabilité AWS fournit des statistiques sur l'utilisation du compartiment, mais pas sur l'utilisation des dossiers, ce qui rend difficile le calcul du coût par client.
(3) Ne pas accorder le droit d'accès à ListAllMyBuckets
Avantage: vous obtenez ce que vous voulez: les clients ne peuvent pas voir les buckets des autres clients
Inconvénient: le client ne peut pas voir son propre bucket. S3Browser est livré avec un joli message "impossible de faire" et demande le nom du compartiment à entrer. S3Fox envoie un message d'erreur lors de la connexion à la racine, mais permet une navigation directe vers le compartiment du client si le nom du compartiment est connu. La console Amazon S3 ne fonctionne pas du tout.
J'espère que cela a aidé à gérer S3 IAM comme vous en avez besoin.
la source
Il n'est pas possible de donner accès à la console S3 sans accorder le
ListAllMyBuckets
autorisation.Dans mon cas (et peut-être le vôtre aussi, futur lecteur), une alternative acceptable consiste à rediriger les utilisateurs lors de la connexion directement vers le bucket que vous souhaitez qu'ils voient.
Pour ce faire, ajoutez ce qui suit à votre URL de connexion IAM:
/s3/?bucket=bucket-name
URL de connexion complète (remplacez votre alias et le nom du compartiment ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
Stratégie IAM (remplacez le nom du compartiment ):
Pour plus d'informations sur la création d'autorisations spécifiques au bucket pour les utilisateurs, lisez ce blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /
la source
Essayez cette politique. également prendre en compte qu'il n'y a aucun moyen de laisser l'utilisateur répertorier uniquement le seau sélectionné. Vous pouvez répertorier tous les compartiments ou aucun.
la source
s3:*
pour que cela fonctionne pour moi. J'en avais aussi"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, mais ce n'est peut-être pas nécessaire.J'interprète cette question comme suit: "Puis-je autoriser l'accès à un seau où tous les autres seaux ne seront pas accessibles et donc invisibles." Car, afficher le nom du compartiment auquel aucun accès n'a été accordé équivaut toujours à une fuite d'informations.
Et la bonne réponse est non. L'autorisation requise est ListAllMyBuckets qui permettra à l'utilisateur de voir TOUS les compartiments. Laisser cette autorisation rendra la console inutilisable.
la source
Il existe un excellent moyen de permettre aux utilisateurs d'accéder à un compartiment spécifique sans compromettre la connaissance des autres compartiments. Une stratégie de groupe similaire à celle ci-dessous permettra aux utilisateurs de ne voir que le "compartiment a". Le seul hic est que l'utilisateur ne pourra jamais accéder au compartiment que s'il se connecte au point de terminaison du compartiment donné. Pour l'exemple ci-dessous, ce serait bucket-a.s3.amazonaws.com. Le compartiment doit également avoir des «utilisateurs authentifiés» autorisés pour que cela se produise.
Cette méthode a été testée avec Cyberduck sur Mac OS / X et en utilisant le package s3cmd
la source
Vous ne savez pas pourquoi aucune réponse n'a été vérifiée?
Décomposons chaque énoncé de politique parmi les solutions ci-dessus:
Cette déclaration de politique de de s'applique au contenu du compartiment, mais pas au buck lui-même. Ce n'est probablement pas ce que la question a posée, car vous ne pouvez pas voir ce qu'il y a dans le seau.
Cette stratégie à deux instructions dérivée de donne un accès en lecture seule au compartiment à (
arn:aws:s3:::your_bucket_here/
) en lecture seule , mais autorise toujours les opérations CRUD sur le contenu du compartiment (arn:aws:s3:::your_bucket_here/*
).Cependant, la stratégie inclut la déclaration ci-dessous, qui permet à un utilisateur de voir tous les compartiments au point de terminaison. Ce n'est probablement pas ce que la question demandait.
Cependant, ce qui précède est très utile si vous utilisez un client qui navigue dans un magasin S3. Si votre client accède directement au magasin et non au bucket, vous devez donc accéder à la liste des buckets à la racine.
la source
Probablement le cas d'utilisation le plus simple:
la source
This policy contains the following error: The policy must contain a valid version string
(listing included)
signification de la façon de répertorier uniquement le compartiment dans lequel l'utilisateur est autorisé à entrer? Jusqu'à présent (et selon toutes les autres réponses), il semble qu'AWS ne vous laisse pas faire cela.Il existe un moyen simple ou une solution de contournement pour ce faire en utilisant AWS Organizations. L'organisation AWS vous permet d'avoir plusieurs comptes d'utilisateurs. Votre compte principal pourra avoir plusieurs comptes AWS (Sub) et quels que soient les services (s3 / EC2 / *) qui seront ajoutés dans les comptes AWS que seules ces ressources seront visibles.
Veuillez vous référer à https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Organisation sur la page Mon compte
la source
J'ai trouvé cette solution:
AWS FLOW:
Politique de seau:
Stratégie IAM:
aws iam get-user -–user-name USER-NAME --profile = ExampleProfile
aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile
La source: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PS soyez prudent avec la politique de seau, vous pouvez rester à l'écart sans autorisations
la source
Comme cela a été bien discuté ci-dessus, il n'est pas possible de lister un seul bucket sur la console. Mais si l'accès du compartiment S3 est attaché à un IAM, IAM peut accéder directement au compartiment si l'URL du compartiment est disponible. L'URL du compartiment S3 sera comme:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Où BucketName est le nom du compartiment auquel IAM a accès
la source
J'ai réussi à faire fonctionner ce qui suit. Signifiait que la liste des autres compartiments recevait le message Accès refusé. Mais j'étais toujours capable de voir le seau que je voulais si je me connectais avec le nom du seau défini comme chemin.
J'utilisais Cyberduck pour tester cette connexion.
la source
Bien qu'il ne soit pas possible de restreindre l'
s3:ListAllMyBuckets
action à des compartiments spécifiques, comme solution de contournement, vous pouvez leur envoyer l'URL de la console pour un compartiment spécifique, par exemplehttps://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Source: liste restreinte des compartiments S3 depuis la console S3
Pour ce faire, vous devrez spécifier le document de stratégie suivant pour un utilisateur ou un groupe donné:
Où
my-bucket-1
etmy-bucket-2
sont vos compartiments pour donner l'accès en lecture et en écriture.En relation:
la source
Essayez cette politique. L'utilisateur ne peut répertorier aucun bucket, il doit utiliser un lien direct vers le bucket autorisé.
Par exemple: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview
la source
Similaire à ce que d'autres ont décrit ci-dessus:
Voici cependant la pièce manquante. Bien qu'il ne soit pas possible d'accéder au bucket via S3-> Home, il est possible d'accéder uniquement au bucket souhaité via un lien direct.
Vous pouvez trouver plus d'informations dans l'article suivant:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/
la source
La solution ci-dessous a fonctionné pour moi. Je voulais une politique pour accorder l'accès à un utilisateur spécifique my_iam_user sur un bucket spécifique my-s3-bucket .
Cette politique permet à mon utilisateur de lister, supprimer, récupérer des fichiers sur un compartiment s3 spécifique.
la source
J'ajoute juste un besoin similaire, résolu par ceci:
la source
J'utilise les éléments suivants pour masquer le contenu du bucket aux autres utilisateurs. Cela permet non seulement de masquer d'autres compartiments (n'utilisez pas ListAllMyBuckets), mais également des dossiers dans le même compartiment, lorsque vous créez un compartiment, mais que vous souhaitez y avoir des sous-dossiers attribuant les autorisations appropriées à l'utilisateur / sous-dossier IAM.
La stratégie suivante est appliquée au groupe IAM et tous les utilisateurs font partie de ce groupe. Vous devez prendre
aws:userid
et créer un sous-dossier avec le même nom dans le seau.L'ID utilisateur peut être pris:
aws iam get-user --user-name "user_name_for_folder_access":
la source
Une belle solution simple que nous avons trouvée est de bloquer l'utilisateur pour se connecter au répertoire racine. Ils doivent donc se connecter avec le chemin distant défini sur le dossier souhaité.
la source
Non, il n'est actuellement pas possible de limiter les utilisateurs à afficher des buckets sélectifs sous root ou ailleurs. Vous n'avez que ces 3 options pour le moment.
J'ai choisi de demander au client d'utiliser le nom du bucket explicitement.
la source
Ceci est détaillé par Amazon sur http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket
la source
Cela a fonctionné parfaitement pour moi. L'utilisateur peut télécharger, télécharger et obtenir la liste des fichiers, mais ne pourra pas voir les fichiers d'un autre compartiment.
la source
Ajoutez une
Deny
clause pour le ou les compartiments auxquels vous ne souhaitez pas accéder. N'oubliez pas qu'ils peuvent toujours être répertoriés, mais vous ne pourrez pas accéder à leur contenu.la source