0

)Google Cloud Storage(GCS)とのインターフェイスとしてウェブアプリケーションで作業しています。ウェブアプリケーションからGoogle Cloud Storageにアクセスする(常に403

バックエンドサービスを使用してGCSに保存したファイルのリストとそのURLをJSON APIで取得し、それをWebアプリケーションに返します。しかし、私は実際には403のURLを使ってファイルを読み込むことができませんでした。

シーンの背景でGCS認証がどのように機能するのか、Webアプリケーションへのアクセスを直接許可することができるかどうかはわかりません。私はどのように私はHTTP要求を介してアプリケーションの認証情報を添付することができますか分からない。私が知っていることは、バックエンドサービスを介してそれを行うことができるということですが、単純さの理由から、それを回避することが可能かどうか疑問です。私が試したことの1つは、Webアプリケーションドメイン(http要求の参照元を介して送信される)をそのバケットへのACLに追加することです。これはまったく動作しません。

@Brandonが以下に指摘してくれたことに感謝します。私は内部アプリケーションであるGCSのコンテンツを表示するためにアプリケーションにアクセスできる人は誰でも許可し、Webアプリケーションを初めて提供するときにはすでに認証を確認しています。

====

ソリューション

私は5分で期限切れsignedUrlを使用して終了し、私は非常に(彼らのpython documentは本当に良いです)のgcloudを使用してGCSとの対話をお勧めします。徹底的な答えをありがとう!

+0

どの権限を使用しますか?アプリケーション独自の権限、またはアプリケーションの個々のユーザーの権限(独自のGoogleアカウントを持つユーザー)ありがとう@Brandon。 –

+0

内部アプリケーションなので、簡単にするためにアプリケーションの許可を使用したいと思います。また、バックエンドサービス(GAEでもホストされている場合)がappidを使用してアクセスする可能性があることも知っています。しかし、私は本当にフロントエンドに依存したいと思っています。 – yeelan

答えて

1

ユーザーは、アプリケーションのサービスアカウントだけが読み取りアクセス権を持つオブジェクトをダウンロードしたいWebブラウザー上にいる場合があります。いくつかの選択肢があります:

  1. 拡張アクセス:これらのオブジェクトを一般に読めるようにします。この情報が機密扱いの場合はおそらく最良の選択ではありませんが、そうでない場合はこれが最も簡単な解決策です。
  2. アプリとして認証できるように、アプリの認証情報をユーザーに与えます。これは本当に悪い考えです。私はおそらくそれをここにリストアップすべきではありません。
  3. ユーザーがファイルをダウンロードしたいときに、アプリケーションにそのファイルを要求してから、アプリケーションにファイルを取得させ、その内容をユーザーにストリームさせます。これはクライアント側のコードのための最も簡単なソリューションですが、アプリのストリーミングファイルの内容に責任を負うことになります。
  4. ユーザーがファイルをダウンロードしたい場合は、アプリケーションに許可を求めて、GCSから直接データを取得するために使用できる何らかのトークンで返信します。

#4はあなたが望むものです。あなたのユーザーはあなたのアプリにファイルを要求するでしょう、あなたのアプリはあなたが何をしていてもそのファイルにアクセスすることを許可されているかどうかを決めるでしょう(IP?Cookies?Whatever。)次に、 GCSから直接ファイルを取得することができます。

このURLは「署名済みURL」と呼ばれます。あなたのアプリは独自の秘密鍵を使ってURLに署名を追加します。この署名は、ベアラによってダウンロードされるオブジェクトと、そのURLが有効である間はどれかを示します。 procedure for signing URLsはやや難解ですが、幸いなことに、それらを生成できるgcloudストレージライブラリhave helper functionsがあります。

+0

あなたの徹底的なソリューション比較のためにBrandonに感謝します。私は別のアプリケーションの1つがソリューション#4を使用したことを覚えていますが、APIはその時点ではあまり親切ではありませんでした。しかし、うまくいけばgcloudへの移行が今やもっと簡単になります。 – yeelan

関連する問題