Обслуживание статического веб-сайта S3 через CloudFront и обеспечение конфиденциальности корзины?

#amazon-web-services #amazon-s3 #amazon-cloudfront

Вопрос:

Я видел руководства, позволяющие пользователям aws делать корзину закрытой, но обслуживать некоторые ее объекты через cloudfront. Я пытался сделать то же самое со всем статическим сайтом, размещенным в корзине s3, и, похоже, ничего не работает. Но я не могу найти ничего, что прямо говорило бы мне, что это невозможно.

Можно ли использовать функцию статического хостинга веб-сайтов S3 в частном хранилище? Могут ли пользователи получить доступ к сайту только через дистрибутив cloudfront, но не перейдя по правильному URL-адресу корзины s3?

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

1. Вот официальная документация, которую вы ищете: docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…

2. Однако руководство не относится к этому вопросу: If you use an Amazon S3 bucket configured as a website endpoint, you must set it up with CloudFront as a custom origin. You can’t use the origin access identity feature described in this topic. . Поэтому вам нужно настроить пользовательский источник и попытаться объединить его с процессом подписания.

3. Но реальный вопрос в том, почему вы в первую очередь хотите настроить его с помощью хостинга веб-сайтов? Можете ли вы подробнее рассказать об этом @hipsterstomper69

4. Просто чтобы посмотреть, возможно ли это

Ответ №1:

Во-первых, OAI не работает, когда вы используете функцию статического веб-сайта S3.

Лучший способ сделать то, что вы хотите, — это добавить пользовательский заголовок в cloudfront. Сгенерируйте сложную и длинную строку, как будто это пароль, и передайте ее в заголовок реферера.

Затем добавьте политику корзины, которая позволяет всем (принципалу: «*») выполнять getobject, но при условии, что указан определенный заголовок.

Пример политики корзины:

 {
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"Allow get requests originating from your Cloudfront distribution.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":"arn:aws:s3:::YOUR_BUCKET_NAME/*",
      "Condition":{
        "StringLike":{"aws:Referer": "9vzeMAVjTKCWXjbBNFsCnNRsPKqMYk6achgLXu5S"}
      }
    }
  ]
}
 

Не забудьте отключить функцию блокировки общего доступа S3 в своем ведре.

Вы можете найти более полное руководство там: https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/?nc1=h_ls