Ограничить доступ к файлам из Google Cloud Storage пользователям, прошедшим аутентификацию в моем приложении Google App Engine? - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть приложение GAE с базой данных пользователей.

Когда один из пользователей пытается загрузить, скажем, файл myapplication.appspot.com/somefile.jpg, я бы:

  1. проверил в базе данных GAE, разрешено ли ему
  2. если ему позволено, перенаправьте его в мое хранилище облачных хранилищ, откуда он сможет скачать somefile.jpg
  3. , если ему не позволено, верните ему код ошибки 404 и сделайте магию, чтобы напрямую пытатьсязагрузка somefile.jpg из облачного хранилища не завершена.

Теперь мне неясно, как управлять доступом к somefile.jpg.Как я могу ограничить загрузку этой областью пользователей?

PS: использование чего-то другого, кроме Google Storage, не вариант (для тех из вас, кто задумывался о blobstore).

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Вам не нужно ограничивать доступ для каждого пользователя, вы можете ограничить доступ для каждого приложения (Google App Engine App).
Каждое приложение имеет учетную запись службы, и вы можете установить ACL на корзине, чтобы разрешить доступ к учетной записи службы приложения.

Теперь все, что вам нужно, это написать обработчик, который будет обращаться к Google Storage и возвращать данные пользователю.

2 голосов
/ 16 февраля 2012

Как отметил Шей, каждое приложение App Engine автоматически связывает с ним внутреннюю учетную запись, называемую «служебной учетной записью».Как правило, имя учетной записи службы следует шаблону «your-app-id@appspot.gserviceaccount.com», однако вы можете подтвердить точное имя, посетив Консоль администрирования App Engine , а затем щелкнув свое приложение.имя, за которым следует ссылка «Настройки приложения», после чего вы должны увидеть имя своей учетной записи службы.

Как только вы найдете имя своей учетной записи службы, добавьте его на подстраницу «Team» в API консоль с разрешениями «Можно редактировать».Это даже проще, чем обновить ACL группы, потому что вам не нужно изменять какие-либо ACL, однако имейте в виду, что это относится ко всем корзинам в вашем проекте.Если вы хотите ограничить ваше приложение только доступом к подмножеству сегментов, принадлежащих вашему проекту, то вам нужно будет обновить списки ACL для каждого сегмента, как предложил Шей.

...