AWS S3 позволяет читать все объекты, кроме определенной папки

  1. Как разрешить чтение всех объектов, кроме одной папки и ее содержимого? Правило ниже блокирует мне все ведро.. (не могу прочитать ведро)

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

{
    "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/*"
            ]
        }
    ]
}

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

  • мое ведро
    • моя папка
      • объект3
    • объект1
    • объект2

2 ответа

Вы можете добавить явное Deny в вашей политике корзины для объектов Listing, которые соответствуют префиксу 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" 
                }
            } 
        }
    ]
}

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

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

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

Другие вопросы по тегам