Сценарий :

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

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

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

Администратор должен иметь возможность просматривать / просматривать все, что находится внутри корзины, то есть на верхнем уровне, например, 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"
                ]
            }
        }
    ]
}
1
vis 12 Фев 2020 в 19:45

2 ответа

Лучший ответ

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

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

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

Вот политика, которая разрешает перечисление определенного сегмента, за исключением корневого (корневого) каталога:

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

По сути, это дает им разрешение на перечисление сегмента, если Prefix (путь) содержит косую черту (/).

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

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

Это не будет работать, поскольку не содержит косой черты:

aws s3 ls s3://BUCKET-NAME/folder
0
John Rotenstein 12 Фев 2020 в 23:26

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

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

0
Jason Wadsworth 12 Фев 2020 в 19:54