политика корзины Amazon S3 - ограничение доступа по рефереру, НО не ограничение, если URL генерируются посредством аутентификации строки запроса - PullRequest
14 голосов
/ 04 мая 2011

У меня установлена ​​следующая политика корзины:

{

"Version": "2008-10-17",

"Id": "My access policy",

"Statement": [

     {

 "Sid": "Allow only requests from our site",

 "Effect": "Allow",

 "Principal": { "AWS": "*"},

 "Action": "s3:GetObject",

 "Resource": "arn:aws:s3:::my_bucket/*",

 "Condition": {

   "StringLike": {

      "aws:Referer": [" http://mydomain.com/*"," http://www.mydomain.com/*"]

        }

              }

 },

{

   "Sid": "Dont allow direct acces to files  when no referer is present",

   "Effect": "Deny",

   "Principal": {"AWS": "*" },

  "Action": "s3:GetObject",

  "Resource": "arn:aws:s3:::my_bucket/*",

  "Condition": {

  "Null": {"aws:Referer": true }

         }

         }

]

  }

Я также настроил аутентификацию строки запроса , но, похоже, у меня не может быть обоих.Если у меня настроена политика сегментов для запрета на любой запрос, исходящий не от mydomain, мой временный URL-адрес, использующий аутентификацию строки запроса, также не будет обработан.Итак, мой вопрос, как я могу иметь оба?Есть ли способ проверить параметры URL и посмотреть, есть ли у него параметр с именем «Подпись», и в этом случае не применять политику реферера?

1 Ответ

18 голосов
/ 28 июня 2011

Удалите пробел в строке ссылок "http://mydomain.com/*", это неправильно ... Примеры Amazon сделали эту ошибку тоже.

Для второго оператора самый простой способ решить его - удалить весь этот оператор и установить для ваших прав доступа к файлам (ACL) значение private (Owner-Read / Write и World-NoRead / NoWrite)

Я не уверен, но кажется, что даже если у вас есть Заявление об отказе, файл все равно можно прочитать, если у него есть общедоступное разрешение (World Read).

Кроме того, если вы распространяете файлы в CloudFront, не забудьте также разрешить ему читать данные. Таким образом, полная политика ведра будет выглядеть так:

{
"Version": "2008-10-17",
"Id": "YourNetwork",
"Statement": [
    {
        "Sid": "Allow get requests to specific referrers",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::yourbucket/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "http://www.yourwebsite.com/*",
                    "http://yourwebsite.com/*"
                ]
            }
        }
    },
    {
        "Sid": "Allow CloudFront get requests",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::12345678:root"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::yourbucket/*"
    }
]
}

(измените 12345678 на свой идентификатор учетной записи AWS без тире)

...