AWS S3 Позволяет читать все объекты, кроме указанной c папки - PullRequest
1 голос
/ 07 апреля 2020
  1. Как разрешить чтение всех объектов, кроме одной папки и ее содержимого? Приведенное ниже правило блокирует мне всю корзину ... (не может прочитать корзину)

  2. Если эта функция невозможна, как я могу разрешить чтение файлов в root но запретить все подпапки?

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

Структура моего ведра:

  • my-bucket
    • my-folder
      • объект3
    • объект1
    • объект2

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы можете добавить явный Deny в своей политике для списка объектов, который соответствует префиксу my-folder.

Редактировать : эта политика будет работать только в том случае, если запрос списка сегментов содержит префикс.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::my-bucket"
        },
        {
            "Sid": "ReadOnly",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*"
        },
        {
            "Sid": "DenyOneFolderRead",
            "Effect": "Deny",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::my-bucket/my-folder/*"
            ]
        },
        {
            "Sid": "DenyOneFolderList",
            "Effect": "Deny",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::my-bucket",
            "Condition" : {
                "StringEquals" : {
                    "s3:prefix": "my-folder" 
                }
            } 
        }
    ]
}
0 голосов
/ 07 апреля 2020

Политика работает правильно, хотя я бы удалил Запретить на arn:aws:s3:::my-bucket/my-folder, потому что это бесполезно.

Я думаю, что путаница заключается в том, что вы ожидаете, что эта политика предотвратит листинг пользователей IAM и / или получение объектов под s3://my-bucket/my-folder/. Это не будет сделано, в частности, часть листинга, и на самом деле вы не можете этого сделать. Вы не можете контролировать способность пользователя выводить список на детальный уровень (например, ниже указанного префикса c).

Политика будет успешно предотвращать получение (как при загрузке) объектов пользователем под s3://my-bucket/my-folder/.

...