バケット内のファイルの匿名(またはアプリケーションドメインからのみ)読み取りアクセスを許可しようとしています。
ファイルを読み取ろうとすると
`` `
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous users does not have storage.objects.get access to object.
</Details>
</Error>
`` `
また、Googleクラウドコンソールのオブジェクトのデフォルトの権限ダイアログでドメインを追加しようとしました。 「アクセス権の1つが無効です。グループとユーザーの承認済みIDまたはメールアドレス、およびドメインのドメインを入力してください」というエラーが表示されます
バケットのACLの作成も検討しましたpublic-read
。これに関する私の唯一の問題は、バケットの所有権が削除されることです。特定のGoogleアクセスIDからのアップロードを許可するため、その所有権が必要です。
Gsutilを使用すると、所有権を削除せずに、バケット内に作成された新しいオブジェクトを一般に読み取り可能にすることができます。バケットで作成された新しいオブジェクトを一般に読めるようにするには:
gsutil defacl ch -u AllUsers:R gs://yourbucket
バケット内に既存のオブジェクトを公開して読みたい場合は、次を実行できます。
gsutil acl ch -u AllUsers:R gs://yourbucket/**
コンソールからも実行できます。
https://console.cloud.google.com/storage/
バケットのアクセス許可の編集を選択します。
[メンバーの追加]オプションに[allUsers]を入力し、ロールとして[ストレージオブジェクトビューアー]を入力します。次に、「役割の選択」に進み、「ストレージ」と「ストレージオブジェクトのレガシー」を「ストレージオブジェクトビュー」に設定します。
IAMロールを使用して、ファイルを読み取り可能にし、リストをブロックします。
gsutil iam ch allUsers:legacyObjectReader gs://bucket-name
ファイルを読み取り可能にし、リストを許可するには:
gsutil iam ch allUsers:objectViewer gs://bucket-name
AllUsersのアクセス許可を追加します。
パブリックに共有されると、パブリックアクセス列にリンクアイコンが表示されます。このアイコンをクリックして、オブジェクトのURLを取得できます。
データを公開する Google Cloud Docsの説明
firebase functionsでファイルをアップロードする場合、トークンを渡さずにアクセスできるようにするには、参照オブジェクトでmakePublic()
を呼び出す必要があります。