Возможно ли получить доступ к частным файлам S3 на основе домена или IP?

#php #laravel #amazon-web-services #amazon-s3

#php #laravel #amazon-web-сервисы #amazon-s3

Вопрос:

У меня есть частная корзина в S3. Я могу загружать файлы в S3, но когда я хочу просмотреть / загрузить файл, я получаю сообщение «Доступ запрещен».

Прямо сейчас у меня нет возможности использовать signedURL.

Я хотел бы разрешить загрузку моего файла на основе IP-адреса / домена моего сервера. Возможно ли управлять этим на уровне политики корзины? Все, что я нашел в Интернете, превратило мое ведро в общедоступное, чего я не хочу.

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

1. Как обслуживаются файлы? Они обслуживаются непосредственно через браузер или вы загружаете их в частном порядке на сервер?

2. Я не уверен, я должен исследовать компонент, который я использую…

Ответ №1:

Возможно, вы могли бы использовать aws:Referer, как показано здесь:

 {
  "Version":"2012-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originating from www.example.com and example.com.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":"arn:aws:s3:::awsexamplebucket1/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}
  

Однако это довольно легко обойти защиту, и на нее не следует полагаться для абсолютной безопасности:

aws: referer не следует использовать для предотвращения неавторизованных сторон от прямых запросов AWS. Предлагается только для того, чтобы позволить клиентам защищать свой цифровой контент, такой как контент, хранящийся в Amazon S3, от ссылок на несанкционированные сторонние сайты.

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

1. Я сделал это вчера, но обнаружил, что мое ведро было общедоступным после применения этой политики…

2. @Juliatzin Конечно, это общедоступно, только для данного реферера. Если вы не хотите использовать предварительно выделенный URL-адрес, единственным другим вариантом является сервер ваших файлов через CloudFront.

Ответ №2:

В зависимости от того, как вы хотите его использовать, вам доступны следующие опции.

Подписанные файлы cookie

Если вы пытаетесь ограничить доступ к ресурсам, если только кто-то не имеет публичного доступа к вашему веб-сайту, идеальным решением было бы добавить CloudFront перед вашей корзиной S3 (предпочтительно с использованием источника для S3 и другого для вашего приложения, но все в одном домене).

Как только вы перейдете к этому подходу, вы можете использовать подписанные файлы cookie, которые будут обеспечивать, как минимум, доступ к пользователю через безопасный подписчик. В отличие от подписанных URL-адресов, это делается один раз и не влияет на существующую кодовую базу (нет пользовательских URL-адресов для ресурсов).

Заголовок ссылки

Хотя это и не идеально, вы можете использовать заголовок refererer либо как условие политики корзины, либо как правило WAF при подключении к дистрибутиву CloudFront. Чтобы было ясно, это всего лишь заголовок, который может быть установлен кем угодно. Если какая-либо информация является конфиденциальной, не используйте эту опцию.

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

Конечная точка шлюза VPC

Предпочтительный способ сохранить вашу корзину S3 закрытой, если единственная связь с S3 осуществляется через экземпляр, подключающийся к API S3 (например, через SDK или CLI). Это не сработает, если вы предоставляете контент пользователю публично в браузере с S3.

Создав конечную точку шлюза для S3, вы можете создать условие в политике корзины S3, для aws:SourceVpce которого вы сможете ограничить GetObject действие только этим соединением.

IP-адрес

Так же, как вы можете внести в белый список по referer заголовку, вы можете внести в белый список по исходному IP-адресу. Этот параметр подходит только в том случае, если источником доступа к объекту является фиксированный IP-адрес, примером является экземпляр EC2, подключающийся к исходящему через NAT. Если вы используете общедоступный веб-сайт и ресурс обслуживается в браузере, этот вариант нежизнеспособен, поскольку IP-адрес, который должен быть внесен в белый список, относится к клиентам, а не к серверам.

Это можно выполнить либо с помощью политики корзины, используя IpAddress условие, либо путем присоединения IPSet к WAF, который подключен к CloudFront.

Краткие сведения

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

Ответ №3:

Не уверен, есть ли у нас все подробности, чтобы узнать, в чем заключаются ваши проблемы, например, Являетесь ли вы владельцем корзины и т. Д.

Учитывая, что вы спрашиваете о белом списке IP, вот руководство по этому поводу: https://www.cloudsavvyit.com/5761/how-to-whitelist-ip-addresses-to-access-an-aws-s3-bucket /

Так что да, все это должно быть возможно, если у вас есть необходимые права собственности на s3

Ответ №4:

Вы можете использовать условие NotIpAddress для ограничения определенных IP-адресов в корзине. Если вы все еще получаете отказ в доступе, проверьте, что содержимое файлов не шифруется с помощью ключа KMS, это остановит загрузку файлов пользователем через пользовательский интерфейс, если у вас нет разрешения на доступ к ключу KMS.

 {
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
     "arn:aws:s3:::awsexamplebucket1",
         "arn:aws:s3:::awsexamplebucket1/*"
      ],
      "Condition": {
     "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      }
    }
  ]
}
  

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

1. NotIpAddress не означает, что это черный список?

2. Следующий пример запрещает любому пользователю выполнять какие-либо операции Amazon S3 с объектами в указанном сегменте S3, если запрос не исходит из диапазона IP-адресов, указанных в условии. docs.aws.amazon.com/AmazonS3/latest/dev /…

3. Это больше похоже на белый список, запрещающий все, но разрешающий этот IP

4. Эта политика будет запрещать даже аутентифицированный доступ, если он не исходит из этого диапазона IP. Цель состоит в том, чтобы разрешить неаутентифицированный доступ с определенного IP (т. Е. Разрешить s3:GetObject С определенного IP). Совсем другое.

5. В его вопросе не говорится об аутентифицированном / неаутентифицированном доступе