2015-11-10 4 views
2

У меня есть ведро, настроенное как веб-сайт, а политика ведра позволяет публичный доступ ко всем папкам в ковше, за исключением папки «/ _admin /». Разрешается доступ только к пользователю Iam, выполняющему запросы, к '/ _admin /'. Это для бэкэнд-управления сайтом, поэтому я обслуживаю пользователя html, js, css и т. Д. Прямо сейчас я использую aws javascript sdk, чтобы подписать каждый URL-адрес в ссылку js/css/img src/href, а затем обновить этот атрибут или создать его. (Это означает, что почти ничего не кэшируется, потому что подпись меняется каждый раз, когда вы обращаетесь к ней.) Я доказал эту концепцию, и я могу получить доступ к файлам, подписав каждый URL-адрес на своих веб-страницах, но это выглядит неудобным способом создания веб-сайта ,Управление доступом к папке s3 в браузере - лучшая практика?

Есть ли способ, я могу просто добавить какой-то заголовок доступа на каждую страницу, которая будет включена в каждый запрос? Если это так, будет ли это также применяться ко всем запросам типа ajax?

+0

* У меня есть ведро, настроенное как веб-сайт ... подпишите каждый URL-адрес в ссылку js/css/img src/href * Я не следую ... [конечные точки веб-сайта не интерпретируют подписанные URL-адреса] (http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html). Вы используете ведро в качестве веб-сайта, но вместо этого используете конечную точку REST или ...? –

+0

Я использовал SDK для подписи URL-адресов, чтобы пользователи могли получать доступ к содержимому позади '/ _admin'. Теперь у меня есть лучший способ. Я отправлю его позже. – TDave00

ответ

2

Вот что я придумал для решения этой проблемы. Я изменил политику своего ведра, чтобы отклонить весь анонимный доступ к '/ _admin /', если только это не из моего основного идентификатора учетной записи, определенного пользователя Iam или если URL-адрес реферера не соответствует определенному токену. После аутентификации пользователя с общедоступной страницы на моем сайте я создаю новый токен, а затем с помощью sdk изменяю политику ведра со значением этого нового токена. (Я, вероятно, добавить еще одно условие с даты истечения срока действия.)

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "PublicReadGetObject", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::test-domain-structure/*" 
    }, 
    { 
     "Sid": "AllowAdminWithToken", 
     "Effect": "Deny", 
     "NotPrincipal": { 
      "AWS": [ 
       "arn:aws:iam::AWS-USER-ID:user/IAM-USER", 
       "arn:aws:iam::AWS-USER-ID:root" 
      ] 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::test-domain-structure/_admin/*", 
     "Condition": { 
      "StringNotLike": { 
       "aws:Referer": "*?t=a77Pn" 
      } 
     } 
    } 
] 
} 

В каждой странице я использую JavaScript предварять каждую ссылку/HREF с новой строки запроса (? Т = a77Pn ... или новый генерироваться маркер).
Редактировать: Это была действительно боль. Ссылки продолжали ломаться, поэтому в итоге я пошел с решением ниже, плюс добавленное условие истечения срока действия. Работает намного лучше.

Другой вариант - изменить политику ведра, чтобы разрешить доступ только с определенного IP-адреса. Это избавит вас от необходимости изменять все ссылки/hrefs и сохранить URL-адрес в чистоте. Все еще открыт для лучшей идеи, но это работает пока.

Смежные вопросы