Open4
Cloud Storage for Firebaseから公開URLと署名付きURLを発行する
セットアップはいつもどおり。
const fireStorage = getStorage();
const bucketFile = await fireStorage.bucket().file(file as string);
const publicUrl = bucketFile.publicUrl(); // 公開URLの取得
const signedUrl = await bucketFile.getSignedUrl({ // 署名付きURLの取得
action: 'read',
expires: Date.now() + 1000 * 60 * 60,
});
Storageのルールとして以下を設定してみる
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if request.auth != null;
}
}
}
以下のようなエラーが出る
Permission 'iam.serviceAccounts.signBlob' denied on resource (or it may not exist).
実行ユーザーに権限が足りていない状態。
サービス アカウント トークン作成者
のロールが必要なようだ
「Permission 'iam.serviceAccounts.signBlob' denied on resourceエラー」の解決方法 #GoogleCloud - Qiita
コンソールからは付与できないので gcloud コマンドで付与する
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:プロジェクト名@appspot.gserviceaccount.com" \
--role="roles/iam.serviceAccountTokenCreator"
署名付きURLは上記ロールの付与で取れるようになった
公開URLは別途対応が必要なようで、バケットの権限を調整した
バケットに対して新規プリンシパルの追加、allUsers
に対して Storage Object Viewer
を追加
これはFirebase側からの設定だけでは適用できないらしい