Поиск по сайту:

Как внести IP-адреса в белый список для доступа к корзине AWS S3


Если вы хотите разрешить серверам в вашей сети доступ к внутренним корзинам S3, не делая объекты внутри них открытыми для Интернета, доступ к белому списку с помощью политики корзины — это простое решение, позволяющее загружать файлы из внутренней корзины.

Доступ к корзине S3 через Интернет

Самый идеальный способ взаимодействия с S3 из Linux — просто установить интерфейс командной строки AWS и запустить такие команды, как get-object, для получения файлов напрямую или использовать API или SDK для выбранного вами языка. Если вы работаете на EC2, довольно просто обновить роль IAM для экземпляра EC2 и прикрепить политику, предоставляющую ему доступ к корзине. Пока установлен интерфейс командной строки AWS, вы можете использовать его с ролью экземпляра без управления ключами.

Однако, если вы не получаете доступ к S3 из EC2 или из другого ресурса AWS, который может взять на себя роль, вам придется управлять ключами. Интерфейсу командной строки AWS потребуется идентификатор и секрет для аутентификации, что может быть проблемой в зависимости от сложности вашего развертывания. У вас может возникнуть соблазн жестко закодировать его в скрипте сборки, но это запутанное решение, которое мы не советуем. Вы можете просто сделать корзину или объект общедоступными, но это не сработает для конфиденциальных данных, которые вы не хотите, чтобы другие скачивали.

Тогда лучший вариант — просто внести IP-адреса в белый список. Это неявно управляет доступом — если запрос поступает с IP-адреса вашего сервера, он будет разрешен. Это можно использовать, чтобы очень легко разрешить загрузку файлов с URL-адреса их конечной точки, как если бы корзина работала в частной подсети (хотя она все еще проходит через Интернет).

https://s3.amazonaws.com/bucketname/object.zip

Однако без политики корзины вы получите ошибку 403. Перейдите к настройкам корзины и найдите редактор политики корзины в разделе «Разрешения» > «Политика корзины».

Введите следующую политику, заменив IP-адреса и имя корзины на свои:

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
             ],
            "Resource": "arn:aws:s3:::bucketname/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.168.1.1",
                        "192.168.1.2",
                        "192.168.1.3"
                    ]
                }
            }
        }
    ]
}

Это просто позволяет загружать файлы из корзины (GetObject). Если вы хотите включить другие действия API, вы можете либо установить что-то конкретное с помощью генератора политики корзины AWS, либо разрешить каждое действие в корзине с подстановочным знаком (вероятно, плохая идея):

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucketname/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.168.1.1",
                        "192.168.1.2",
                        "192.168.1.3"
                    ]
                }
            }
        }
    ]
}