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を持つクラウドストレージバケットから読み取る方法はありますか?リクエストをまだ認証していますか?
storage.googleapis.comにはGoogle Cookieがないため、ブラウザ経由での認証は許可されません。そのエンドポイントを使用する場合は、OAuth(またはSigned URL)を使用する必要があります。 –
あなたは正しいです、私の悪いです。私は意味: 'https:// storage.cloud.google.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLDER'です。 私の答えを編集させてください。返信いただきありがとうございます! – dsesto
これはうまくいきますが、通常はエンドユーザーをACLに直接配置する必要があるため、通常は使用することをお勧めします(これはセキュリティ上賢明ではなく、エンドユーザーがGoogleアカウントを持たない場合は不可能です)。そのエンドポイントはまた、..(エンドユーザーが複数のアカウントにログインしている場合に使用するアカウントを指定する必要があります。これは外部ユーザーにとって不可能ではないにしても困難です)。 –