このチュートリアルに従って、署名付き URL を使用して GWT フロントエンドから Google Cloud Storage に直接ファイルをアップロードできるようにしました。問題なく機能するコンテンツ タイプを指定して、Java の例を拡張しました。その後、この方法でアップロードされたファイルは公開されていないことがわかりました。これを機能させるために、私は試しました:
- 新しくアップロードされたオブジェクトのデフォルト ACL を設定しました
gsutil defacl set public-read gs://<bucket>
。ファイルを再度アップロードしました - 運が悪く、まだ表示されていません。 - 次に、そのオブジェクトに ACL を直接設定しようとしました
gsutil acl set public-read gs://<bucket>/<file>
が、AccessDeniedException: 403 Forbiddenが返されました。gsutil は Google アカウントで認証され、署名付き URL はサービス アカウントと P12 キーで作成されているため、これは理にかなっています。 - アップロード フェーズで ACL を設定しようとしたため、
"x-goog-acl:public-read\n"
正規化された拡張ヘッダーと適切なクエリ文字列パラメーターを追加して、署名チェックに合格しました。くそー、まだ運がない!
私の仮定は、私が使用しているこの拡張ヘッダーが間違っているのではないでしょうか? ドキュメントによると、GCS へのすべての認証済みリクエストはprivate
、デフォルトで ACL を適用します。
とにかく、プロジェクト オーナーとしてログインしているときに、これらのファイルを Google コンソールから一般公開できないのはなぜですか? コンソールを介してアップロードされたすべてのファイルに対してこれを行うことができます (その場合、所有者はサービス アカウントではなくプロジェクト所有者であることがわかっています)。
私が間違っていることは何ですか?誰でも読めるようにするにはどうすればよいですか?
アドバイスありがとう!