0

App Engine Appからクラウドストレージバケット内のファイルにアクセスできるようにするには、オブジェクトまたはバケット自体を公開可能にする必要はありません。私は、認証(クライアントライブラリ、署名されたURLなど)を使用してバケットオブジェクトにアクセスできるオプションがあることを認識していますが、複雑な要因は、そのパスにファイルにアクセスできるようにすることです問題のバケットのフォルダ構造に似ています。バケットを公開しないでApp Engine経由でクラウドストレージオブジェクトにアクセスする

たとえば、私のバケツを公開して読めるようにすると、パブリックリンクhttps://storage.googleapis.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLER.txtでオブジェクトにアクセスできます。このURLは、バケットの内部フォルダ構造を模倣しています。ただし、バケットが一般に判読できない場合は、同等のURLは表示されません。私のApp Engine Appサービスアカウントが必要なバケットのストレージ管理者として追加されましたが、バケットオブジェクトにアクセスするために使用できるURLがあるかどうかはわかりません。オブジェクトのmediaLinkは、生成情報が末尾に追加され、selfLinkが404エラーになるため機能しません。

このようなURLの必要性は、バケットに数千のオブジェクトが含まれているためです。クライアントライブラリを使用してApp Engineの永続ストレージにダウンロードすると、私のケースではクラウドストレージを使用する目的が無効になります。要求が行われたときにそれらのすべての署名付きURLを取得するのは時間がかかり、どこかで署名付きのURLを何千も管理する必要があります。

パブリックURLのように予測可能なURLを持つクラウドストレージバケットから読み取る方法はありますか?リクエストをまだ認証していますか?

答えて

0

あなたが言及URLをブラウザがこれらのリソースへのアクセス権を持つアカウントで認証されていることを与えられたバケットやファイル公衆せずにアクセスすることができます。 https://storage.cloud.google.com/MY_BUCKET/FOLDER_IN_MY_BUCK‌​ET/FILE_IN_FOLDER

異なるアプリケーションを介してファイルへのアクセスについて( App Engineなど)では、いつでもclient libraries for your preferred languageを使用できます。あなたはAPIだけでFOLDER_IN_MY_BUCKET/FILE_IN_FOLDERとしてMY_BUCKETオブジェクトパラメータとしてバケットパラメータを定義することにより、documentationにどのように動作するかをテストすることができます。選択したクライアントライブラリにこの構造を適用するときは、この同じ構造を使用する必要があります。

+0

storage.googleapis.comにはGoogle Cookieがないため、ブラウザ経由での認証は許可されません。そのエンドポイントを使用する場合は、OAuth(またはSigned URL)を使用する必要があります。 –

+0

あなたは正しいです、私の悪いです。私は意味: 'https:// storage.cloud.google.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLDER'です。 私の答えを編集させてください。返信いただきありがとうございます! – dsesto

+1

これはうまくいきますが、通常はエンドユーザーをACLに直接配置する必要があるため、通常は使用することをお勧めします(これはセキュリティ上賢明ではなく、エンドユーザーがGoogleアカウントを持たない場合は不可能です)。そのエンドポイントはまた、..(エンドユーザーが複数のアカウントにログインしている場合に使用するアカウントを指定する必要があります。これは外部ユーザーにとって不可能ではないにしても困難です)。 –

2

応答で何千もの署名済みURLを販売するのではなく、アプリエンジンアプリで「リダイレクト」エンドポイントを作成することができます。

ユーザーが 'GET'を行うwww.myapp.com/fetch/<bucket>/<object>

このエンドポイントを処理するアプリケーションエンジンコードは、ユーザーにアクセス権があることを確認する権限を与え、バケット/オブジェクトをURLから取り出し、リソースへのアクセスを許可する署名付きURLを生成しますそのURLに302リダイレクトを返します。

+0

これは良いアイデアですが、これはおそらくこれが最良の方向性だと思います。しかし、これでは多くの署名付きURLを作成する必要があります。このオプション(リダイレクト)は、Google CDN、またはCloudFrontを使用する方法と比べてどのようになりますか? – quicklikerabbit

+0

エッジキャッシングによりCDNが高速になりますが、AFAIK Google CDNは(現在)署名入りのURLをサポートしていないため、バケツを公開するだけで、CDNサービスでプロキシされます。 –

関連する問題