2012-02-15 26 views
2

私はユーザーのデータベースを持つGAEアプリケーションを持っています。Google Cloud StorageからGoogle App Engineアプリで認証されたユーザーにファイルを制限しますか?

利用者の一つは、私は希望、myapplication.appspot.com/somefile.jpgファイル、たとえば、ダウンロードしようとします:彼は許可されている場合、彼は

  • に許可されているかどうかをGAEのデータベース上の

    1. チェック、クラウドに彼をリダイレクト彼が許可されていない場合はsomefile.jpg
    2. をダウンロードして、404エラーコードを返し、魔法を使って直接somefile.jpgをクラウドストレージバケットからダウンロードしようとしていません。

    次に、somefile.jpgへのアクセスを制御する方法がわかりません。このユーザーの範囲にダウンロードを制限するにはどうすればよいですか?

    PS:Google Storage以外のものを使用することはオプションではありません(あなたはBLOBSTOREについて考えている人向けです)。

  • 答えて

    3

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

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

    +0

    ああ、これは明確なことです:) – qdii

    +0

    あなたは、ハンドラがストレージのデータを代理することを意味しますか?これは、ハンドラがストレージから読み取り、データをユーザに転送することを意味しますか? – nalply

    +1

    @nalplyはいそうする方法の1つで、別の方法は、データへのアクセスを許可する安全な署名付きURLを返すことです。 –

    2

    Shayが指摘しているように、すべてのApp Engineアプリケーションは自動的に「サービスアカウント」と呼ばれる内部アカウントを関連付けています。通常、サービスアカウント名はパターン「[email protected]」に従いますが、App Engine Administration Consoleにアクセスしてアプリ名をクリックしてから「アプリケーション設定」リンクをクリックすると、サービスアカウント名が表示されます。

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

    +0

    ああ、それはさらに良い(少なくとも私の場合は)。 – qdii

    関連する問題