Existe-t-il une stratégie S3 pour limiter l'accès pour voir / accéder uniquement à un compartiment?

123

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.

Alex
la source
Je vote pour clore cette question comme hors-sujet car elle devrait être sur Superusers
Tonny Madsen
Une politique pourrait être générée ici à: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta
1
Pourquoi ne pas simplement partager l'URL du bucket - 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.
treecoder

Réponses:

119

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 (comme PutBucketAcl).

La stratégie IAM suivante fonctionne pour moi maintenant:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Les actions concernant un bucket et celles concernant les objets doivent avoir un arn différent.

rogercampos
la source
9
C'est une excellente réponse, merci. Il peut être intéressant de noter que l’implication de l’autorisation s3: ListAllMyBuckets est que le destinataire de cette stratégie peut voir tous vos buckets (racine). Il n'y a pas de divulgation directe de données, mais il peut y avoir de la sensibilité / confusion autour des noms de compartiment. Il est possible de supprimer cette autorisation particulière et les choses devraient toujours fonctionner (bien que "s3cmd ls" etc. ne renverra pas le compartiment cible).
Mike Repass
91
Cela n'empêche pas l'utilisateur de voir d'autres noms de compartiment!
metdos
2
@metdos, vous pouvez empêcher les utilisateurs de voir d'autres noms de compartiment en supprimant la dernière stratégie.
Hendra Uzia
20
Afin de voir la liste des compartiments dans la console (et donc utiliser la console pour l'accès aux compartiments), vous devez accorder ListAllMyBucketset GetBucketLocationpour 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."
jwadsack
10
C'est un conseil horrible. C'est dangereux et précisément ce que l'OP ne voulait pas. Voir les réponses d' Andreas Stankewitz et BFar pour des solutions de contournement possibles.
AndreKR
37

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.

Andreas Stankewitz
la source
1
De plus, pour Solution (1), si vous souhaitez utiliser l'hébergement Web avec un bucket, le nom du bucket doit correspondre au nom de domaine.
Andy Fusniak
31

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 ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

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 /

BFar
la source
1
Cela fonctionne bien. Ce serait optimal si les utilisateurs ne pouvaient pas explorer en dehors de la vue du seau ... Mais je vais le prendre. Merci @BFar.
Jamie Popkin
C'est la réponse ONE CORRECT, toutes les autres listeront chaque seau - qui devrait être caché selon la demande originale.
Steve Horvath
Exactement ce dont j'ai besoin. Merci.
Di Zhang
20

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.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}
cloudberryman
la source
2
Cela fonctionne très bien! Je devais faire du changement 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.
Michael Yagudaev
3
s3: * accorde l'accès à n'importe quoi, y compris la suppression d'un compartiment. Tu veux vraiment ça?
Dave Gregory
10

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
6

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.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Cette méthode a été testée avec Cyberduck sur Mac OS / X et en utilisant le package s3cmd

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2
Joevartuli
la source
Je peux toujours voir la liste de tous les seaux. Ne fonctionne pas :(
Rishikesh Chandra
5

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.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

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/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

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.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

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.

Donal Lafferty
la source
3

Probablement le cas d'utilisation le plus simple:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}
jjanczyszyn
la source
1
This policy contains the following error: The policy must contain a valid version string
Réponse d'
c'est vrai - j'ai corrigé ma réponse -> <br/> il n'y a que deux valeurs possibles ici: <br/> * 2012-10-17 * et 2008-10-17 . <br/> D'autres références peuvent être trouvées ici: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn
Une idée sur la (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.
MaximeBernard
3

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

Shaik Ismail
la source
3

J'ai trouvé cette solution:
AWS FLOW:
AWS FLOW

Politique de seau:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

Stratégie IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

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

Constantin Paigin
la source
2

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

Ishan Tomar
la source
1
Je pense que c'est la seule solution réalisable en 2018 également.
Saurabh
1

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.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

J'utilisais Cyberduck pour tester cette connexion.

codeplay
la source
1

Bien qu'il ne soit pas possible de restreindre l' s3:ListAllMyBucketsaction à des compartiments spécifiques, comme solution de contournement, vous pouvez leur envoyer l'URL de la console pour un compartiment spécifique, par exemple

  • https://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é:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

my-bucket-1et my-bucket-2sont vos compartiments pour donner l'accès en lecture et en écriture.

En relation:

Kenorb
la source
1

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

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
Lam
la source
1

Similaire à ce que d'autres ont décrit ci-dessus:

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

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.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Vous pouvez trouver plus d'informations dans l'article suivant:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/

crandorf80s
la source
0

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.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
Carlos Coelho
la source
0

J'ajoute juste un besoin similaire, résolu par ceci:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}
Xavinsky
la source
0

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:useridet 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":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}
Andrii Starikov
la source
0

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é.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}
PROSPÉRER
la source
0

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.

lunettes_ de brouillard
la source
-1

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.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      
s. tait
la source
-2

Ajoutez une Denyclause 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.

{
    "Version": "17/10/2012",
    "Déclaration": [
        {
            "Effet": "Autoriser",
            "Action": "s3: *",
            "Ressource": "*"
        },
        {
            "Effet": "Refuser",
            "Action": "s3: *",
            "Ressource": [
                "arn: aws: s3 ::: nom du compartiment",
                "arn: aws: s3 ::: nom du compartiment / *"
            ]
        }
    ]
}
codeur d'arbres
la source
1
Vous devez explicitement accorder l'accès aux ressources. Lorsque vous accordez par défaut l'accès à toutes les ressources, vous pouvez accidentellement omettre les ressources que vous souhaitez garder privées. Accorder également l'accès à toutes les actions S3 signifie que l'utilisateur peut rendre les ressources publiques, configurer un hébergement statique ou faire d'autres choses nuisibles.
Ondrej Galbavý