Ограничить доступ к сайту, размещенному на S3

Я бы хотел разместить статический веб-сайт на Amazon S3, но мне нужно ограничить доступ к нему для определенных пользователей. Это может быть по IP-адресу или по учетным данным amazon (только зарегистрированные пользователи могут получить доступ к содержимому корзины.

Это возможно?

Спасибо

4 ответа

Решение

Да, это действительно возможно. Лучшей отправной точкой для вас будет чтение контроля доступа S3.

Но по умолчанию корзины, созданные на S3, не являются публичными. Поэтому поведение по умолчанию должно быть таким, что оно будет доступно только человеку / программе, которые / которые знают о вашем доступе и секретном ключе.

Вы также можете отредактировать разрешение группы, чтобы предоставить доступ к определенной учетной записи AWS или идентификатору электронной почты.

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

Ограничение доступа к определенным IP-адресам

Этот оператор предоставляет разрешения любому пользователю выполнять любое действие S3 над объектами в указанном сегменте. Однако запрос должен исходить из диапазона IP-адресов, указанных в условии. Условие в этом операторе идентифицирует диапазон разрешенных IP-адресов 192.168.143.* С одним исключением, 192.168.143.188.

Обратите внимание, что значения IP Address и NotIpAddress, указанные в условии, используют нотацию CIDR, описанную в RFC 2632. Для получения дополнительной информации перейдите по http://www.rfc-editor.org/rfc/rfc4632.txt.

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "192.168.143.0/24" 
                },
                "NotIpAddress" : {
                    "aws:SourceIp": "192.168.143.188/32" 
                } 
            } 
        } 
    ]
}

Подробнее читайте здесь и здесь.

Изменить: ограничения на основе пользователей / групп не действуют для статических веб-сайтов, размещенных на S3, поскольку AWS не регистрирует учетные данные / куки AWS Консоли управления (путь: amazon.com) для S3 (путь: amazonaws.com) и не проверяет их,

Обходной путь: http://www.s3auth.com/ - Basic Auth для S3- контейнеров может помочь вам, но с участием третьей стороны. Другим решением может быть проверка подлинности запроса Query String с использованием экземпляра EC2 или опции статических файлов Elastic Beanstalk Java SE. В настоящее время мы изучаем возможности защиты наших хранилищ с помощью Amazon API Gateway в качестве прокси-сервера Amazon S3.


Sidenote: Есть некоторые дополнительные вещи, на которые стоит обратить внимание, на которые часто прямо не указывают.

В настоящее время в политиках сегмента невозможно предоставить или ограничить групповой доступ только определенным пользователям. Поскольку вы также обычно не хотите обновлять каждую политику сегментов для каждого изменения в вашей структуре пользователя, и политики сегментов могут (непреднамеренно) мешать вашим политикам пользователей, вы можете не использовать политики сегментов.

Политики на основе пользователей / групп работают только с s3:GetBucketLocation а также s3:ListAllMyBuckets прикреплен к arn:aws:s3:::* или же * (к сожалению, фильтрация здесь невозможна, все имена сегментов будут видны для пользователей / групп с этой политикой).

Пример политики IAM: (не политика S3 Bucket и не работает для статического хостинга веб-сайтов)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::YOURBUCKETNAME",
                "arn:aws:s3:::YOURBUCKETNAME/*"
            ]
        }
    ]
}

Более подробное сообщение в блоге: "Как ограничить доступ к корзине Amazon S3 для определенной роли IAM"

Вы также можете ограничить доступ к обычному / статическому веб-сайту определенным http-ссылкам. Таким образом, вы можете настроить сайт членства в WordPress, где только зарегистрированные пользователи могут получить доступ к сайту, размещенному на Amazon. Например, mymembershipsite.com/members .

Вы можете поставить Cloudfront перед S3 и AWS WAF перед Cloudfront, занести в белый список только те IP-адреса, которые вам нужны, и все будет работать.

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