Элементы в моем S3-хранилище общедоступны.Как мне ограничить доступ, чтобы ссылка S3 Bucket была доступна только из моего приложения? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть ведро S3, которое содержит предметы.Они доступны любому на данный момент со ссылкой.Ссылка содержит UUID, поэтому шансы того, что кто-то на самом деле получит к ней доступ, очень малы.Тем не менее, когда ВВПР не за горами, мне не терпится его связать.

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

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Это стандартный вариант использования Предварительно подписанного URL .

Обычно, когда ваше приложение генерирует HTML-страницу, содержащую ссылку, оно генерирует специальный URL, которыйвключает в себя время истечения.Затем он вставляет этот URL-адрес в код ссылки HTML (например, для изображения вы должны использовать: <img src='[PRE-SIGNED URL]'/>

Код для создания предварительно подписанного URL-адреса довольно прост (и предоставляется в большинстве SDK).

Храните корзину Amazon S3 как конфиденциальную, чтобы другие люди не могли получить доступ к контенту. Тогда любой, у кого есть действительный предварительно подписанный URL-адрес, получит контент.

0 голосов
/ 21 мая 2018

В соответствии с документацией S3 , вы должны иметь возможность ограничить доступ к объектам S3 для определенных HTTP-ссылок, с явным deny, чтобы заблокировать доступ любому, кто находится за пределами вашего приложения:

{
   "Version": "2012-10-17",
   "Id": "http referer policy example",
   "Statement": [
     {
       "Sid": "Allow get requests referred by www.example.com and example.com.",
       "Effect": "Allow",
       "Principal": "*",
       "Action": "s3:GetObject",
       "Resource": "arn:aws:s3:::examplebucket/*",
       "Condition": {
         "StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
       }
     },
      {
        "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::examplebucket/*",
        "Condition": {
          "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
        }
      }
   ]
}

Предварительным условием для использования этой настройки будет создание службы оболочки ссылок S3 и размещение ее на каком-либо сайте вашего приложения.

...