Wie machen Sie viele Dateien in Google Cloud Storage öffentlich?


78

Ich habe 1000 Dateien in Google Cloud Storage, die veröffentlicht werden sollen, oder allgemein eine Verzeichnishierarchie.

In der Web-Benutzeroberfläche kann ich scheinbar jeweils nur eine öffentlich machen.

Gibt es eine Möglichkeit, dies zu tun?


1
Ich habe es gefunden. Sie können Folgendes ausführen: gsutil ls, um eine Liste der Dateien zu erhalten. Anschließend können Sie die Liste mit gsutil setacl public-read * in xargs weiterleiten. Sie können gsutil setdefacl auch öffentlich lesen, damit zukünftige hochgeladene Dateien öffentlich sind
Engineerchuan

Antworten:


103

Lauf gsutil -m acl set -R -a public-read gs://bucket

  • Das -mgibt mehrere Anfragen gleichzeitig aus.
  • Die -RAusgabe fordert für jedes Objekt in Ihrem Bucket.
  • Die -aAusgabe fordert für jede Version jedes Objekts.

Siehe gsutil help aclfür weitere Informationen.

Auf der API-Ebene gibt gsutil die folgende HTTP-Anforderung aus:

PUT /bucket/obj?acl HTTP/1.1
Host: storage.googleapis.com
x-goog-acl: public-read

Sie können dies sehen, indem Sie die -DFlagge verwenden mit gsutil:

gsutil -D setacl public-read gs://bucket/obj

Danke dafür ! Derzeit zeigt das Dokument 'gsutil acl set public-read gs: // Bucket / Object' an. Dies ist die Update-Syntax von 'setacl' zu 'acl set'? ( developer.google.com/storage/docs/gsutil/commands/acl#set )
Pierre Broucz

Liste der vordefinierten ACLs (privat, öffentlich gelesen usw.): cloud.google.com/storage/docs/access-control
ruhong

Ich habe die ACL-Taktik ausprobiert und die aktualisierten Dateien auf "Nicht freigegeben" zurückgesetzt :(
Darian311

57

Beim Ausführen: gsutil -m acl set -R -a public-read gs://bucketSie definieren public read für alle Objekte, die sich derzeit in Ihrem Bucket befinden. Wenn Sie jedoch neue Dateien hochladen, sind diese standardmäßig nicht öffentlich.

Was ich gefunden habe, ist, dass es sich lohnt, eine Bucket-Standard-ACL als öffentlich lesbar zu definieren gsutil defacl set public-read gs://bucket


2
Gute Idee. Leider funktioniert dies nur in einem Bucket der obersten Ebene und kann nicht in einem Ordner innerhalb eines Buckets verwendet werden. Die andere Antwort funktioniert sogar in einem Ordner.
Plasty Grove

6
gsutil defacl set public-read gs://bucketfunktioniert mit allen zukünftigen Dateien, einschließlich der in Unterverzeichnissen. Ignoriere den Kommentar von Plastly Grove.
Albin

48

Sie können alle Objekte in einem Bucket öffentlich machen. Hier ist der Link .

  1. Öffnen Sie den Cloud-Speicherbrowser in der Google Cloud Platform Console.
  2. Klicken Sie in der Liste der Buckets auf den Namen des Buckets, den Sie veröffentlichen möchten.
  3. Wählen Sie die Registerkarte Berechtigungen oben auf der Seite.
  4. Klicken Sie auf die Schaltfläche Mitglieder hinzufügen.
    Das Dialogfeld Mitglieder hinzufügen wird angezeigt.
  5. Geben Sie im Feld Mitglieder allUsers ein.
  6. Wählen Sie in der Dropdown-Liste Rollen das Untermenü Speicher aus und klicken Sie auf die Option Speicherobjekt-Viewer.
  7. Klicken Sie auf Hinzufügen.

Nach der öffentlichen Freigabe wird für jedes Objekt in der Spalte Öffentlicher Zugriff> ein Verknüpfungssymbol angezeigt. Sie können auf dieses Symbol klicken, um die URL für das Objekt abzurufen.


1
Leute, das sieht nach der Antwort aus. Ich habe gerade meine Bucket-Berechtigungen getestet. Ich habe mein Bild geändert und erneut hochgeladen, und Google Storage hat die Berechtigungen nicht wie vor dem Ausführen dieses Befehls vermasselt: gsutil iam ch allUsers: objectViewer gs: // [BUCKET_NAME]. Nur für den Fall, dass Sie sich fragen, ist Amazon immer noch führend darin, solche Dinge einfach zu machen. Wow, viel zu viel Lernkurve, um dasselbe mit GS zu tun.
Darian311

1
Dies sollte die richtige Antwort sein, da es mit gsutil zu unbeabsichtigten Effekten kommen kann, wenn Sie nicht wissen, was Sie tun.
Perniferous

13

Der einfachste Weg, dies zu erreichen, wäre die Verwendung einer Konsole.

Klicken Sie auf "Bucket-Berechtigungen bearbeiten".

Geben Sie hier die Bildbeschreibung ein

Geben allUsersSie unter Mitglieder hinzufügen ein. Dann Select Role> Storage>Storage Object Viewer

Beachtung! Dadurch erhalten alle Personen im Internet Leseberechtigung für alle Objekte in diesem ausgewählten Bucket.

Geben Sie hier die Bildbeschreibung ein


1
Vielen Dank für die Bereitstellung von Screenshot, es ist wirklich hilfreich.
GusDeCooL

11

Die aktuelle Dokumentation (Oktober / 2017) zum Hosten einer statischen Website, die hier zu finden ist, verweist auf:

gsutil acl ch -r -u AllUsers:R gs://bucket-name

Wo -rmacht das den rekursiven Trick und -u AllUsers:Rgibt der Öffentlichkeit Lesezugriff.


2
Dies funktioniert auch für Unterverzeichnisse, zBgsutil acl ch -r -u AllUsers:R gs://bucket-name/dir-name
Ville

1
Wenn dieses Verzeichnis viele Dateien enthält, -mwird es nach -gsutil -m acl ch -r -u AllUsers:R gs://bucket-name/dir-name
MikeHoss

1

Das Kopieren und Einfügen in Eriks Namen funktionierte für mich konsequent:

Gruppen von Objekten öffentlich lesbar machen

So machen Sie alle Objekte in einem Eimer öffentlich lesbar:

CONSOLEGSUTILREST APIS Verwenden Sie den Befehl gsutil iam ch und ersetzen Sie [VALUES_IN_BRACKETS] durch die entsprechenden Werte:

 gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.