I have 1000 files in Google Cloud Storage to make public, or in general a directory hierarchy.
In the Web UI, I can only seem to make one at a time public.
I
The easiest way to accomplish this would be by using a console.
Click on "Edit bucket permissions"
Enter allUsers
in Add Members.
Then Select Role
> Storage
> Storage Object Viewer
Attention! This will give read permission to all the people on the internet to all the objects in that selected bucket.
Current (Oct/2017) documentation about Hosting a Static Website found here points to:
gsutil acl ch -r -u AllUsers:R gs://bucket-name
Where the -r
does the recursive trick and -u AllUsers:R
gives the public read access.
You can make all objects in a bucket public. Here's the link.
- Open the Cloud Storage browser in the Google Cloud Platform Console.
- In the list of buckets, click on the name of the bucket that you want to make public.
- Select the Permissions tab near the top of the page.
- Click the Add members button.
The Add members dialog box appears.- In the Members field, enter allUsers.
- In the Roles drop down, select the Storage sub-menu, and click the Storage Object Viewer option.
- Click Add.
Once shared publicly, a link icon appears for each object in the public access >column. You can click on this icon to get the URL for the object.
Run gsutil -m acl set -R -a public-read gs://bucket
-m
issues multiple requests at the same time.-R
issues requests for every object in your bucket.-a
issues requests for every version of every object.See gsutil help acl for more info.
At the API layer gsutil issues the following HTTP request:
PUT /bucket/obj?acl HTTP/1.1
Host: storage.googleapis.com
x-goog-acl: public-read
You can see this by using the -D
flag with gsutil
:
gsutil -D setacl public-read gs://bucket/obj
To copy and paste on Erik's behalf, this worked consistently for me:
Making groups of objects publicly readable
To make all objects in a bucket publicly readable:
CONSOLEGSUTILREST APIS Use the gsutil iam ch command, replacing [VALUES_IN_BRACKETS] with the appropriate values:
gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
When you run: gsutil -m acl set -R -a public-read gs://bucket
you define public read for all the objects currently in your bucket, but when you upload new files they wont be public by default.
What I found is that is worth to define a bucket default acl as public-read gsutil defacl set public-read gs://bucket