Разрешить перечисление верхнего уровня корзины S3 только для указанных пользователей c - PullRequest
1 голос
/ 12 февраля 2020

Сценарий:

У меня есть корзина S3, в которой содержатся «каталоги».

my-bucket/xxx
my-bucket/yyy
my-bucket/zzz
etc

У меня есть 2 группы пользователей: admin и user.

Администратор должен иметь возможность просматривать / просматривать все внутри корзины, например, на верхнем уровне, например, aws s3 ls s3://my-bucket.

Пользователь не может просматривать верхний уровень, но может просматривать / просматривать внутри каждого каталога в ведро.

Я не уверен, как определить такую ​​политику и где ее прикрепить - на стороне S3 или на стороне пользователя IAM. Я испробовал оба варианта. Не работает.

Сторона пользователя:

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

Сторона ковша S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/User"
                ]
            }
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Во-первых, не используйте Bucket Policy . Политика корзины обычно используется при предоставлении доступа «каждому».

Если вы хотите sh предоставить доступ определенному c пользователю, поместите политику в IAM User .

Если вы хотите sh предоставить доступ группе пользователей, поместите их в группу IAM и поместите политику в группу IAM .

Здесь это политика, которая разрешает перечисление определенного сегмента, , за исключением каталога верхнего уровня (root):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::BUCKET-NAME",
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "*/*"
                    ]
                }
            }
        }
    ]
}

В основном это дает им разрешение на перечисление сегмента, так как До тех пор, пока Prefix (путь) содержит sla sh (/).

Обратите внимание, что если вы указываете ведро, вы должны включать в себя sla sh после имени каталога:

aws s3 ls s3://BUCKET-NAME/folder/

Это будет не работать, поскольку оно не содержит sla sh:

aws s3 ls s3://BUCKET-NAME/folder
0 голосов
/ 12 февраля 2020

Вы можете ограничить доступ к «папкам» в S3, применив условия к политикам IAM.

Как я могу предоставить пользователю доступ к определенной папке c в моем хранилище Amazon S3?

...