Веб-сайт, размещенный на EC2, не может получить доступ к ссылке на изображение S3

#amazon-web-services #amazon-s3 #amazon-ec2

#amazon-web-services #amazon-s3 #amazon-ec2

Вопрос:

Я назначил EC2 роль Fulls3Access. веб-сайт на EC2 может загружать и удалять объекты S3, но доступ к URL-адресу ресурса s3 запрещен (что означает, что я не могу читать изображения). Я включил настройки блокировки общедоступного доступа. Некоторые папки я хочу сделать конфиденциальными, и только веб-сайт может получить к ним доступ. Я попытался установить условия для общедоступного чтения, такие как sourceIP и URL-адрес ссылки в политике корзины, но приведенное ниже не работает, изображения на веб-сайте по-прежнему не отображаются. У кого-нибудь есть идеи по включению, а также ограничению доступа к корзине чтения s3 только к веб-сайту?

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::bucketname/assets/*",            ]
        },
        {
            "Sid": "AllowIP",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::bucketname/private/*",
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "ip1/32",
                        "ip2/32",                    ]
                }
            }
        }
    ]
}  

Комментарии:

1. Можете ли вы уточнить эту часть? «Я включил настройки блокировки общедоступного доступа». Итак, можете ли вы сказать, какой из «block public xxx» включен, а какой выключен? Все они должны быть отключены, если что-то не изменилось в пользовательском интерфейсе. Я не вижу ничего явно неправильного в политике корзины. Вместо условия IP-адреса лучше предоставить доступ к закрытому разделу роли, которая назначается экземпляру через профиль экземпляра. Но это не вызывает проблемы с общедоступным доступом.

2. Спасибо, Петрч. Включен параметр «блокировать общедоступный доступ». отключив его, он решает проблему доступа для чтения. Теперь моя проблема в том, как ограничить доступ к определенным префиксам. Что вы подразумеваете под частным разделом? это VPC для частной подсети?

3. Извините, позвольте мне уточнить. Я имел в виду «к частному разделу вашей корзины» bucketname/private/ , то есть, если у вашего экземпляра есть профиль экземпляра, вы можете разрешить доступ в зависимости от роли экземпляра ec2. Это намного более гибко. Я искал этот пример в Google docs.databricks.com/administration-guide/cloud-configurations /…

4. Спасибо @petrch, позвольте мне протестировать это. ссылка очень полезна.

Ответ №1:

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

ЕСЛИ вы хотите ограничить ресурсы, есть несколько вариантов, позволяющих пользователю видеть их в браузере.

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

Второй вариант — добавить дистрибутив CloudFront перед корзиной S3 и использовать подписанный файл cookie. Для этого потребуется, чтобы ваш код генерировал файл cookie, который затем будет включен во все запросы к дистрибутиву CloudFront. Он допускает то же поведение, что и подписанный URL-адрес, но для доступа пользователя ко всему контенту требуется только один раз.

Если все ресурсы должны быть доступны только с вашего веб-сайта, но не считаются конфиденциальными, вы также можете рассмотреть возможность добавления WAF в дистрибутив CloudFront перед корзиной S3. Это будет настроено с помощью правила, разрешающего только там, где заголовок «Refererer» соответствует вашему домену. Это все равно можно обойти, если кто-то установит этот заголовок в запросе, но это приведет к меньшему количеству сканеров, попадающих в ваши ресурсы.

Более подробная информация доступна в документации по предотвращению горячих ссылок с помощью AWS WAF, Amazon CloudFront и проверке ссылок.

Комментарии:

1. Спасибо, Крис, за то, что прояснил мое замешательство. Это действительно хорошие ответы и именно то, что я ищу.