Моя политика AS3 Bucket применяется только к некоторым объектам - PullRequest
0 голосов
/ 21 апреля 2020

Мне очень трудно настроить политику корзины, похоже, моя политика корзины применима только к некоторым объектам в корзине.

То, что я хочу, довольно просто: я храню видеофайлы в я хочу, чтобы их можно было загружать исключительно с моего веб-сайта.

Мой подход состоит в том, чтобы заблокировать все по умолчанию, а затем добавить разрешающие правила:

  • Предоставить полные права на root и пользователь Алисы.
  • Предоставьте publi c доступ к файлам в моем корзине только от указанных c рефереров (мои веб-сайты).

Примечание: я вручную сделал все объекты 'publi c' и мои настройки для Block Publi c Access все установлены на Off.

Может кто-нибудь увидеть какие-либо очевидные ошибки в моей политике корзины? Я не понимаю, почему моя политика работает только для некоторых файлов. Большое спасибо

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::MY_BUCKET/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [
                        "https://mywebsite1.com/*",
                        "https://mywebsite2.com/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::MY_BUCKET/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "https://mywebsite1.com/*",
                        "https://mywebsite2.com/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::426873019732:root",
                    "arn:aws:iam::426873019732:user/alice"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::MY_BUCKET",
                "arn:aws:s3:::MY_BUCKET/*"
            ]
        }
    ]
}

1 Ответ

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

Управление доступом через aws:Referer небезопасно. Это можно преодолеть довольно легко. простой веб-поиск предоставит множество инструментов, которые могут выполнить sh this.

Более безопасный метод будет:

  • Храните все объекты в вашем Amazon S3 bucket private (не «Make Publi c»)
  • Do not используйте политику Bucket
  • Пользователи должны пройти аутентификацию в вашем приложении
  • Когда пользователь желает получить доступ к одному из видео, или когда ваше приложение создает страницу HTML, которая ссылается на / вставляет видео, приложение должно определить, имеет ли пользователь право на доступ к объекту.
  • Если пользователь имеет право доступа к объекту, приложение создает предварительно подписанный URL-адрес Amazon S3 , который обеспечивает ограниченный по времени доступ к частному объекту. .
  • Когда браузер пользователя запрашивает получение объекта по предварительно подписанному URL-адресу, Amazon S3 проверит содержимое URL-адреса. Если URL-адрес действителен, а срок не истек, Amazon S3 вернет объект (например, видео). Если время истекло, будет предоставлено содержимое , а не .

Предварительно подписанный URL-адрес может быть создан в несколько строк кода и не требует вызова API. вернуться к Amazon S3.

Преимущество использования предварительно подписанных URL-адресов заключается в том, что ваше приложение определяет, кто имеет право на просмотр объектов . Например, пользователь может выбрать поделиться видео с другим пользователем. Ваше приложение позволит другому пользователю просматривать это видео. Это не потребует каких-либо изменений в IAM или политиках сегмента.

См .: Предварительно подписанные URL-адреса Amazon S3

Кроме того, если вы используете sh - Предоставив доступ к корзине Amazon S3 определенным c пользователям IAM (т. е. пользователям в вашей организации, а не пользователям приложений), лучше предоставить доступ пользователю IAM, а не через корзину Amazon S3. Если пользователей много, вы можете создать IAM Group , которая содержит несколько пользователей IAM, а затем поместить политику в группу IAM. Bucket Policies, как правило, следует использовать для предоставления доступа «каждому», а не указывать c пользователей IAM.

Как правило, рекомендуется избегать использования Deny policy , поскольку они могут Трудно писать правильно и может непреднамеренно лишить вас доступа к вашему администратору. Лучше ограничить то, что разрешено, чем комбинировать Allow и Deny.

...