Daten öffentlich bereitstellen

Auf dieser Seite wird gezeigt, wie Sie Objekte, deren Inhaber Sie sind, für jeden im öffentlichen Internet lesbar machen können. Informationen über den Zugriff auf öffentliche Daten finden Sie hier: Auf öffentliche Daten zugreifen.

Auf öffentlich freigegebene Objekte kann jeder Nutzer zugreifen, der den Objekt-URI kennt, solange es öffentlich ist.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden Rollen für den Bucket zuzuweisen, der die Daten enthält, die Sie öffentlich zugänglich machen möchten, um die erforderlichen Berechtigungen zum Freigeben von Objekten zu erhalten:

  • So machen Sie alle Objekte in einem Bucket öffentlich lesbar: Storage-Administrator (roles/storage.admin)

  • So machen Sie einzelne Objekte öffentlich lesbar: Storage-Objekt-Administrator (roles/storage.objectAdmin)

    • Wenn Sie die Google Cloud Console verwenden möchten, benötigen Sie die Rolle „Storage-Administrator“ (roles/storage.admin) anstelle der Rolle „Storage-Objekt-Administrator“.

Diese Rollen enthalten die Berechtigungen, die zum Freigeben von Objekten erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

  • storage.buckets.get
  • storage.buckets.getIamPolicy
  • storage.buckets.setIamPolicy
  • storage.buckets.update
  • storage.objects.get
  • storage.objects.getIamPolicy
  • storage.objects.setIamPolicy
  • storage.objects.update

Die folgenden Berechtigungen sind nur erforderlich, um die Aufgaben auf dieser Seite mit der Google Cloud Console auszuführen:

  • storage.buckets.list
  • storage.objects.list

Sie können diese Berechtigungen möglicherweise auch mit anderen vordefinierten Rollen oder benutzerdefinierten Rollen erhalten.

Eine Anleitung zum Zuweisen von Rollen für Buckets finden Sie unter IAM mit Buckets verwenden.

Alle Objekte in einem Bucket öffentlich lesbar machen

Wenn Sie alle Objekte in einem Bucket für alle Nutzer im öffentlichen Internet lesbar machen möchten, weisen Sie dem Hauptkonto allUsers die Rolle „Storage-Objekt-Betrachter“ (roles/storage.objectViewer) zu:

Console

  1. Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.

    Buckets aufrufen

  2. Klicken Sie in der Liste der Buckets auf den Namen des Buckets, den Sie veröffentlichen möchten.

  3. Wählen Sie oben auf der Seite den Tab Berechtigungen aus.

  4. Klicken Sie im Abschnitt Berechtigungen auf die Schaltfläche Zugriff erlauben.

    Das Dialogfeld Zugriff gewähren wird angezeigt.

  5. Geben Sie im Feld Neue Hauptkonten allUsers ein.

  6. Geben Sie im Drop-down-Menü Rolle auswählen Storage Object Viewer in das Filterfeld ein und wählen Sie Storage-Objekt-Betrachter aus den gefilterten Ergebnissen aus.

  7. Klicken Sie auf Speichern.

  8. Klicken Sie auf Öffentlichen Zugriff erlauben.

Sobald der öffentliche Zugriff gewährt wurde, wird in der Spalte für den öffentlichen Zugriff die Option URL kopieren angezeigt. Sie können auf diese Schaltfläche klicken, um die öffentliche URL für das Objekt abzurufen.

Unter Fehlerbehebung erfahren Sie, wie Sie detaillierte Fehlerinformationen zu fehlgeschlagenen Cloud Storage-Vorgängen in der Google Cloud Console abrufen.

Befehlszeile

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Führen Sie in Ihrer Entwicklungsumgebung den Befehl buckets add-iam-policy-binding aus:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer

    Dabei ist BUCKET_NAME der Name des Buckets, dessen Objekte Sie veröffentlichen möchten. Beispiel: my-bucket.

Clientbibliotheken

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  auto current_policy = client.GetNativeBucketIamPolicy(
      bucket_name, gcs::RequestedPolicyVersion(3));
  if (!current_policy) throw std::move(current_policy).status();

  current_policy->set_version(3);
  current_policy->bindings().emplace_back(
      gcs::NativeIamBinding("roles/storage.objectViewer", {"allUsers"}));

  auto updated =
      client.SetNativeBucketIamPolicy(bucket_name, *current_policy);
  if (!updated) throw std::move(updated).status();

  std::cout << "Policy successfully updated: " << *updated << "\n";
}

C#

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C# API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;
using System.Collections.Generic;

public class MakeBucketPublicSample
{
    public void MakeBucketPublic(string bucketName = "your-unique-bucket-name")
    {
        var storage = StorageClient.Create();

        Policy policy = storage.GetBucketIamPolicy(bucketName);

        policy.Bindings.Add(new Policy.BindingsData
        {
            Role = "roles/storage.objectViewer",
            Members = new List<string> { "allUsers" }
        });

        storage.SetBucketIamPolicy(bucketName, policy);
        Console.WriteLine(bucketName + " is now public ");
    }
}

Go

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Go API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/iam"
	"cloud.google.com/go/iam/apiv1/iampb"
	"cloud.google.com/go/storage"
)

// setBucketPublicIAM makes all objects in a bucket publicly readable.
func setBucketPublicIAM(w io.Writer, bucketName string) error {
	// bucketName := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	policy, err := client.Bucket(bucketName).IAM().V3().Policy(ctx)
	if err != nil {
		return fmt.Errorf("Bucket(%q).IAM().V3().Policy: %w", bucketName, err)
	}
	role := "roles/storage.objectViewer"
	policy.Bindings = append(policy.Bindings, &iampb.Binding{
		Role:    role,
		Members: []string{iam.AllUsers},
	})
	if err := client.Bucket(bucketName).IAM().V3().SetPolicy(ctx, policy); err != nil {
		return fmt.Errorf("Bucket(%q).IAM().SetPolicy: %w", bucketName, err)
	}
	fmt.Fprintf(w, "Bucket %v is now publicly readable\n", bucketName)
	return nil
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.cloud.storage.StorageRoles;

public class MakeBucketPublic {
  public static void makeBucketPublic(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Policy originalPolicy = storage.getIamPolicy(bucketName);
    storage.setIamPolicy(
        bucketName,
        originalPolicy
            .toBuilder()
            .addIdentity(StorageRoles.objectViewer(), Identity.allUsers()) // All users can view
            .build());

    System.out.println("Bucket " + bucketName + " is now publicly readable");
  }
}

Node.js

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function makeBucketPublic() {
  await storage.bucket(bucketName).makePublic();

  console.log(`Bucket ${bucketName} is now publicly readable`);
}

makeBucketPublic().catch(console.error);

PHP

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage PHP API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

use Google\Cloud\Storage\StorageClient;

/**
 * Update the specified bucket's IAM configuration to make it publicly accessible.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 */
function set_bucket_public_iam(string $bucketName): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    $policy = $bucket->iam()->policy(['requestedPolicyVersion' => 3]);
    $policy['version'] = 3;

    $role = 'roles/storage.objectViewer';
    $members = ['allUsers'];

    $policy['bindings'][] = [
        'role' => $role,
        'members' => $members
    ];

    $bucket->iam()->setPolicy($policy);

    printf('Bucket %s is now public', $bucketName);
}

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

from typing import List

from google.cloud import storage


def set_bucket_public_iam(
    bucket_name: str = "your-bucket-name",
    members: List[str] = ["allUsers"],
):
    """Set a public IAM Policy to bucket"""
    # bucket_name = "your-bucket-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    policy = bucket.get_iam_policy(requested_policy_version=3)
    policy.bindings.append(
        {"role": "roles/storage.objectViewer", "members": members}
    )

    bucket.set_iam_policy(policy)

    print(f"Bucket {bucket.name} is now publicly readable")

Ruby

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Ruby API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

def set_bucket_public_iam bucket_name:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new
  bucket = storage.bucket bucket_name

  bucket.policy do |p|
    p.add "roles/storage.objectViewer", "allUsers"
  end

  puts "Bucket #{bucket_name} is now publicly readable"
end

Terraform

Sie können eine Terraform-Ressource verwenden, um alle Objekte in einem Bucket öfentlich zu machen.

# Make bucket public
resource "google_storage_bucket_iam_member" "member" {
  provider = google
  bucket   = google_storage_bucket.default.name
  role     = "roles/storage.objectViewer"
  member   = "allUsers"
}

REST APIs

JSON API

  1. Die gcloud CLI installieren und initialisieren, um ein Zugriffstoken für den Header Authorization zu generieren.

  2. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. Verwenden Sie cURL, um die JSON API mit einer PUT-Bucket-Anfrage aufzurufen:

    curl -X PUT --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"

    Dabei gilt:

    • JSON_FILE_NAME ist der Pfad für die Datei, die Sie in Schritt 2 erstellt haben.
    • BUCKET_NAME ist der Name des Buckets, dessen Objekte Sie veröffentlichen möchten. Beispiel: my-bucket.

XML API

Die öffentliche Freigabe aller Objekte in einem Bucket wird von der XML API nicht unterstützt. Verwenden Sie die Google Cloud Console oder gcloud storage.

Einen Teil eines Buckets öffentlich lesbar machen

Mit einem verwalteten Ordner können Sie den Zugriff auf Objekte steuern, deren Namenspräfix mit dem Namen des verwalteten Ordners übereinstimmt. So kann beispielsweise ein verwalteter Ordner mit dem Namen my-folder verwendet werden, um den Zugriff auf Objekte mit den Namen my-folder/cats.jpg und my-folder/dogs.jpg zu steuern.

Um solche Objekte öffentlich zugänglich zu machen, erstellen Sie zuerst den verwalteten Ordner und legen dann eine IAM-Richtlinie für den Ordner fest, die allUsers die Rolle Storage-Objekt-Betrachter (roles/storage.objectViewer) zuweist:

Console

  1. Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.

    Buckets aufrufen

  2. Klicken Sie auf den Namen des Buckets, der die Objekte enthält, die Sie veröffentlichen möchten.

  3. So erstellen Sie einen Ordner:

    1. Klicken Sie auf die Schaltfläche Ordner erstellen.

    2. Geben Sie den Namen für den Ordner ein. Sobald der Ordner in einen verwalteten Ordner umgewandelt wurde, unterliegen Objekte, deren Name mit diesem Namen beginnt, den im Ordner festgelegten IAM-Rollen.

    3. Klicken Sie auf Erstellen.

  4. So wandeln Sie den Ordner in einen verwalteten Ordner um:

    1. Suchen Sie im Bereich mit dem Inhalt des Buckets nach dem Namen des von Ihnen erstellten Ordners und klicken Sie auf das Symbol Weitere Optionen .

    2. Klicken Sie auf Zugriff bearbeiten.

    3. Klicken Sie im dann angezeigten Fenster auf Aktivieren.

  5. Fügen Sie dem Ordner eine IAM-Richtlinie hinzu, die allUsers die Rolle „Storage-Objekt-Betrachter“ (roles/storage.objectViewer) zuweist. Gehen Sie dazu so vor:

    1. Wenn der Bereich Berechtigungen für den verwalteten Ordner noch nicht geöffnet ist, klicken Sie auf das Symbol Weitere Optionen  für den verwalteten Ordner und dann auf Zugriff bearbeiten.

    2. Klicken Sie im Bereich Berechtigungen auf die Schaltfläche Hauptkonto hinzufügen.

    3. Geben Sie im Feld Neue Hauptkonten allUsers ein.

    4. Geben Sie im Drop-down-Menü Rolle auswählen Storage Object Viewer in das Filterfeld ein und wählen Sie Storage-Objekt-Betrachter aus den gefilterten Ergebnissen aus.

    5. Klicken Sie auf Speichern.

    6. Klicken Sie auf Öffentlichen Zugriff erlauben.

Sobald der öffentliche Zugriff gewährt wurde, wird in der Spalte für den öffentlichen Zugriff für jedes relevante Objekt die Option URL kopieren angezeigt. Sie können auf diese Schaltfläche klicken, um die öffentliche URL für das Objekt abzurufen.

Unter Fehlerbehebung erfahren Sie, wie Sie detaillierte Fehlerinformationen zu fehlgeschlagenen Cloud Storage-Vorgängen in der Google Cloud Console abrufen.

Befehlszeile

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Erstellen Sie in Ihrer Entwicklungsumgebung mit dem Befehl gcloud storage managed-folders create einen verwalteten Ordner:

    gcloud storage managed-folders create gs://BUCKET_NAME/MANAGED_FOLDER_NAME/

    Dabei gilt:

    • BUCKET_NAME ist der Name des Buckets, in dem Sie einen verwalteten Ordner erstellen möchten. Beispiel: my-bucket.

    • MANAGED_FOLDER_NAME ist der Name des verwalteten Ordners, den Sie erstellen möchten. Beispiel: my-managed-folder.

  3. Fügen Sie in Ihrer Entwicklungsumgebung der IAM-Richtlinie des verwalteten Ordners mit dem Befehl gcloud storage managed-folders add-iam-policy-binding allUsers hinzu:

    gcloud storage managed-folders add-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=allUsers --role=roles/storage.objectViewer

    Dabei gilt:

    • BUCKET_NAME ist der Name des Buckets, der den verwalteten Ordner enthält, dem Sie die IAM-Richtlinie hinzufügen. Beispiel: my-bucket.
    • MANAGED_FOLDER_NAME ist der Name des verwalteten Ordners, dem Sie öffentlichen Zugriff hinzufügen möchten. Beispiel: my-managed-folder

REST APIs

JSON API

  1. Die gcloud CLI installieren und initialisieren, um ein Zugriffstoken für den Header Authorization zu generieren.

  2. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

    {
      "name": "MANAGED_FOLDER_NAME"
    }

    MANAGED_FOLDER_NAME ist der Name des Ordners, den Sie erstellen möchten. Beispiel: my-managed-folder.

  3. Verwenden Sie cURL, um die JSON API mit einer Insert ManagedFolder-Anfrage aufzurufen:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders"

    Dabei gilt:

    • JSON_FILE_NAME ist der Pfad für die Datei, die Sie im vorherigen Schritt erstellt haben.
    • BUCKET_NAME ist der Name des Buckets, in dem Sie einen verwalteten Ordner erstellen möchten. Beispiel: my-bucket
  4. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  5. Verwenden Sie cURL, um die JSON API mit einer setIamPolicy-ManagedFolder-Anfrage aufzurufen:

    curl -X PUT --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"

    Dabei gilt:

    • JSON_FILE_NAME ist der Pfad für die Datei, die Sie im vorherigen Schritt erstellt haben.
    • BUCKET_NAME ist der Name des Buckets, der den verwalteten Ordner enthält, dem Sie die IAM-Richtlinie hinzufügen. Beispiel: my-bucket.
    • MANAGED_FOLDER_NAME ist der Name des verwalteten Ordners, dem Sie die IAM-Richtlinie hinzufügen. Beispiel: my-managed-folder.

XML API

Die XML API unterstützt verwaltete Ordner nicht. Verwenden Sie ein anderes Tool wie die Google Cloud Console oder legen Sie ACLs für einzelne Objekte mit Set Object ACL-Anfragen fest. Im folgenden Beispiel wird eine ACL-Datei angezeigt, mit der allUsers Zugriff auf ein Objekt gewährt wird:

<AccessControlList>
  <Entries>
    <Entry>
      <Scope type="AllUsers"/>
      <Permission>READ</Permission>
    </Entry>
  </Entries>
</AccessControlList>

Nächste Schritte