2

ユーザーのデータベースを備えたGAEアプリケーションがあります。

ユーザーの1人が、たとえばファイルをダウンロードしようとすると、次のmyapplication.appspot.com/somefile.jpgようになります。

  1. 彼が許可されているかどうかGAEデータベースを確認してください
  2. 許可されている場合は、ダウンロードできるクラウドストレージバケットにリダイレクトします。somefile.jpg
  3. 許可されていない場合は、404エラーコードを返し、クラウドストレージバケットから直接ダウンロードしようとしてsomefile.jpgも完了しないように魔法をかけます。

今、私には不明確なのは、へのアクセスを制御する方法somefile.jpgです。ダウンロードをこの範囲のユーザーに制限するにはどうすればよいですか?

PS:Google Storage以外のものを使用することはできません(blobstoreについて考えた人にとって)。

4

2 に答える 2

4

基本的にユーザーごとにアクセスを制限する必要はありません。アプリケーション(Google App Engine App)ごとにアクセスを制限できます。
すべてのアプリケーションにはサービスアカウントがあります。実行できるのは、アプリケーションサービスアカウントへのアクセスを許可するようにバケットにACLを設定することです。

これで、Google Storageにアクセスし、データをユーザーに返すハンドラーを作成する必要があります。

于 2012-02-15T15:47:03.607 に答える
3

Shayが指摘したように、すべてのApp Engineアプリケーションには、「サービスアカウント」と呼ばれる内部アカウントが自動的に関連付けられています。通常、サービスアカウント名は「your-app-id@appspot.gserviceaccount.com」のパターンに従いますが、正確な名前を確認するには、App Engine管理コンソールにアクセスし、アプリ名をクリックしてから、「 [アプリケーション設定]リンクをクリックすると、サービスアカウント名が表示されます。

サービスアカウント名を見つけたら、それをAPIコンソールの「チーム」サブページに「編集可能」権限で追加します。これは、ACLを変更する必要がないため、バケットACLを更新するよりもさらに簡単です。ただし、これはプロジェクト内のすべてのバケットに適用されることに注意してください。プロジェクトが所有するバケットのサブセットにのみアクセスできるようにアプリを制限する場合は、Shayが提案したように、バケットごとのACLを更新する必要があります。

于 2012-02-15T23:51:32.840 に答える