Access Control Lists (ACLs) erstellen und verwalten

Auf dieser Seite wird beschrieben, wie mithilfe von Access Control Lists (ACLs) der Zugriff auf Buckets und Objekte gesteuert wird. Mit ACLs bestimmen Sie, welche Nutzer auf Buckets und Objekte zugreifen können und welche Berechtigungen sie haben. Weitere Informationen über ACLs finden Sie unter ACLs – Übersicht.

Unter Übersicht über die Zugriffssteuerung werden weitere Möglichkeiten beschrieben, um den Zugriff auf Buckets und Objekte zu kontrollieren.

Vorbereitung

Wann sollten Sie ACLs verwenden?

In den meisten Fällen ist die Cloud Identitäts- und Zugriffsverwaltung (Cloud Identity and Access Management, Cloud IAM) die empfohlene Methode für die Steuerung des Zugriffs auf Ihre Ressourcen. Das liegt daran, dass sie einerseits Zugriffssteuerung auf Unternehmensebene in der gesamten Google Cloud Platform ermöglicht und andererseits Berechtigungen für übergeordnete Ressourcen wie z. B Projekte von untergeordneten Ressourcen wie Buckets und Objekten übernommen werden. Weitere Informationen zur Verwendung von Cloud IAM in Cloud Storage finden Sie unter Cloud IAM-Berechtigungen verwenden.

ACLs sind zu empfehlen, wenn Sie den Zugriff auf einzelne Objekte innerhalb eines Buckets anpassen müssen, da Cloud IAM-Berechtigungen für alle Objekte in einem Bucket gelten. Verwenden Sie Cloud IAM demzufolge, um den allgemeinen Zugriff auf Objekte in einem Bucket zu steuern. Mit ACLs wäre der Aufwand dafür viel größer, weil jedes Objekt einzeln konfiguriert werden müsste.

Ist eine ACL erforderlich?

Ob Sie eine ACL festlegen müssen, hängt davon ab, welche Berechtigung ein Bucket oder Objekt erhalten soll. Beide werden mit Standard-ACLs erstellt, die möglicherweise bereits die Berechtigung enthalten, die Sie erteilen möchten.

Folgende Informationen helfen Ihnen dabei zu entscheiden, ob eine ACL erforderlich ist.

Für Buckets:

Console

Neue Buckets werden mit der vordefinierten ACL project-private erstellt. Wenn Ihr Bucket eine andere Berechtigung benötigt, legen Sie eine ACL fest.

gsutil

Neue Buckets werden als project-private hinzugefügt. Wenn Ihr Bucket eine andere Berechtigung benötigt, legen Sie eine ACL fest.

JSON API

Neue Buckets werden standardmäßig als project-private hinzugefügt. Wenn Ihr Bucket eine andere Berechtigung benötigt, legen Sie eine ACL fest.

XML API

Neue Buckets werden als project-private hinzugefügt. Wenn Ihr Bucket eine andere Berechtigung benötigt, legen Sie eine ACL fest.

Wie erwähnt, gibt es für jeden Bucket eine Standard-Objekt-ACL. Diese ACL wird auf alle hochgeladenen Objekte angewendet, die keine vordefinierte ACL haben. Sie wird auch verwendet, wenn Sie die JSON API verwenden und keine ACL in der Anfrage angegeben ist. Weitere Informationen finden Sie unter Standard-Objekt-ACLs festlegen.

Für Objekte:

Console

Hochgeladene Objekte übernehmen die ACLs des Bucket-Objekts. Der Uploader wird als Inhaber zur ACL hinzugefügt. Wenn Ihr Objekt eine andere Berechtigung benötigt, legen Sie eine ACL fest.

gsutil

Neu hinzugefügte Objekte erhalten die Standard-Objekt-ACL für den Bucket. Beim Kopieren eines bereits in der Cloud gespeicherten Objekts können Sie dieses Verhalten mit der Option -p überschreiben.

JSON API

Standardmäßig erhalten neu hinzugefügte Objekte die Standard-Objekt-ACL für den Bucket.

XML API

Neu hinzugefügte Objekte erhalten die Standard-Objekt-ACL für den Bucket.

Welche Schnittstellen sind geeignet?

In den folgenden Beispielen wird gezeigt, wie Sie die Google Cloud Platform Console, das gsutil-Befehlszeilentool, die Cloud Storage-Clientbibliotheken und die XML API bzw. die JSON API zur Konfiguration der Zugriffssteuerung verwenden. Hier eine kurze Entscheidungshilfe zur Auswahl der passenden Schnittstelle:

  • Wenn die Zugriffssteuerung für Sie eher Neuland ist und Sie nur die ACLs einzelner Objekte ändern möchten, nutzen Sie die GCP Console.

  • Wenn die Zugriffssteuerung neu für Sie ist und Sie die ACLs von Buckets und Objekten ändern möchten, verwenden Sie gsutil.

  • Wenn Sie schon mit einer der Cloud Storage-Clientbibliotheken gearbeitet haben, verwenden Sie diese, um ACLs zu verwalten.

  • Wenn Sie ACLs über eine API konfigurieren möchten, sollten Sie sich mit HTTP-Anfragen auskennen. Verwenden Sie zum Senden von HTTP-Anfragen ein Ihnen vertrautes Tool oder eine Anwendung, die Sie kennen. In den folgenden Beispielen wird das cURL-Tool verwendet. Die Autorisierungstokens für die cURL-Beispiele erhalten Sie von OAuth 2.0 Playground.

ACLs festlegen

Das Tool oder die API, das/die zum Festlegen und Abrufen von ACLs verwendet wird, bestimmt auch die ACL-Syntax. ACL-Syntaxen sehen unterschiedlich aus, enthalten aber dieselben ACL-Informationen: Einträge, die Berechtigungen für Bereiche erteilen.

Console

  1. Wechseln Sie in der GCP Console zum Cloud Storage-Browser.
    Zum Cloud Storage-Browser

  2. Rufen Sie das Objekt auf, dessen ACL Sie ändern möchten.

  3. Wählen Sie im Drop-down-Menü für das Objekt Berechtigungen bearbeiten aus.

    Ein Dialogfeld mit Berechtigungen wird angezeigt, das ungefähr so aussieht:

    Der Screenshot zeigt eine ACL mit vier Einträgen:

    • Im ersten Eintrag ist festgelegt, dass alle Inhaber eines bestimmten Projekts (mit der Projektnummer 867489140601) die Berechtigung "Owner" (Inhaber) für dieses Objekt erhalten.
    • Im zweiten Eintrag ist festgelegt, dass alle Bearbeiter eines bestimmten Projekts (mit der Projektnummer 867489140601) ebenfalls die Berechtigung "Owner" (Inhaber) für dieses Objekt erhalten.
    • Mit dem dritten Eintrag erhalten alle Betrachter eines bestimmten Projekts (mit der Projektnummer 867489140601) die Zugriffsberechtigung "Reader" (Leser) für dieses Objekt.
    • Im vierten Eintrag ist festgelegt, dass der Nutzer, der das Objekt hochgeladen hat, die Zugriffsberechtigung "Owner" (Inhaber) für das Objekt erhält. Wer ein Objekt hochlädt, erhält immer die Berechtigung "Owner" und kann nicht entfernt werden.
  4. Klicken Sie auf Zeile hinzufügen.

  5. Wählen Sie die Entität aus, der Sie eine Berechtigung erteilen möchten.

    Eine Entität ist der Nutzer, die Gruppe oder eine andere Einheit, die eine Berechtigung erhalten soll. Eine Liste der für Entität unterstützten Werte finden Sie unter Zugriffsteuerungslisten im Abschnitt "Bereiche".

  6. Geben Sie für Name einen Wert ein.

    Der Name bezeichnet den Nutzer, die Gruppe oder eine andere Art von Entität. Eine Liste der für Name unterstützten Werte finden Sie unter Zugriffsteuerungslisten im Abschnitt "Bereiche".

    Entität und Name zusammen definieren den Empfänger der Berechtigung.

  7. Wählen Sie einen Wert für Zugriff aus.

    Unter Zugriff legen Sie die Berechtigung fest, die für das Objekt gelten soll. Eine Liste der für Zugriff unterstützten Werte finden Sie unter Zugriffssteuerungslisten im Abschnitt "Berechtigungen".

  8. Klicken Sie auf Speichern.

gsutil

Verwenden Sie gsutil acl, um ACLs festzulegen:

  • Individuelle Rechte erteilen:

    gsutil acl ch -u [USER_EMAIL]:[PERMISSION] gs://[BUCKET_NAME]

  • Vordefinierte ACLs festlegen:

    gsutil acl set [CANNED_ACL_NAME] gs://[BUCKET_NAME]

  • ACLs im JSON-Format festlegen:

    gsutil acl set [JSON_FILE] gs://[bucket-name]

    wobei [JSON_FILE] ACLs im JSON-Format enthält.

Codebeispiele

C++

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string entity) {
  StatusOr<gcs::BucketAccessControl> patched_acl =
      client.PatchBucketAcl(bucket_name, entity,
                            gcs::BucketAccessControlPatchBuilder().set_role(
                                gcs::BucketAccessControl::ROLE_OWNER()));

  if (!patched_acl) {
    throw std::runtime_error(patched_acl.status().message());
  }

  std::cout << "ACL entry for " << patched_acl->entity() << " in bucket "
            << patched_acl->bucket() << " is now " << *patched_acl << "\n";
}

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string entity) {
  StatusOr<gcs::ObjectAccessControl> patched_acl =
      client.CreateObjectAcl(bucket_name, object_name, entity,
                             gcs::ObjectAccessControl::ROLE_OWNER());

  if (!patched_acl) {
    throw std::runtime_error(patched_acl.status().message());
  }

  std::cout << "ACL entry for " << patched_acl->entity() << " in object "
            << patched_acl->object() << " in bucket " << patched_acl->bucket()
            << " is now " << *patched_acl << "\n";
}

C#

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

private void AddBucketOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.Acl)
    {
        bucket.Acl = new List<BucketAccessControl>();
    }
    bucket.Acl.Add(new BucketAccessControl()
    {
        Bucket = bucketName,
        Entity = $"user-{userEmail}",
        Role = "OWNER",
    });
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

private void AddObjectOwner(string bucketName, string objectName,
    string userEmail)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName,
        new GetObjectOptions() { Projection = Projection.Full });
    if (null == storageObject.Acl)
    {
        storageObject.Acl = new List<ObjectAccessControl>();
    }
    storageObject.Acl.Add(new ObjectAccessControl()
    {
        Bucket = bucketName,
        Entity = $"user-{userEmail}",
        Role = "OWNER",
    });
    var updatedObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

func addBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).ACL()
	if err := acl.Set(ctx, storage.AllAuthenticatedUsers, storage.RoleReader); err != nil {
		return err
	}
	return nil
}

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

func addObjectACL(client *storage.Client, bucket, object string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).Object(object).ACL()
	if err := acl.Set(ctx, storage.AllAuthenticatedUsers, storage.RoleReader); err != nil {
		return err
	}
	return nil
}

Java

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

Acl acl = storage.createAcl(bucketName, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER));

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER));

Node.js

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to add, e.g. developer@company.com';

// Makes the user an owner of the bucket. You can use addAllUsers(),
// addDomain(), addProject(), addGroup(), and addAllAuthenticatedUsers()
// to grant access to different types of entities. You can also use "readers"
// and "writers" to grant different roles.
await storage.bucket(bucketName).acl.owners.addUser(userEmail);

console.log(`Added user ${userEmail} as an owner on bucket ${bucketName}.`);

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'Name of file to access, e.g. file.txt';
// const userEmail = 'Email of user to add, e.g. developer@company.com';

// Makes the user an owner of the file. You can use addAllUsers(),
// addDomain(), addProject(), addGroup(), and addAllAuthenticatedUsers()
// to grant access to different types of entities. You can also use "readers"
// and "writers" to grant different roles.
await storage
  .bucket(bucketName)
  .file(filename)
  .acl.owners.addUser(userEmail);

console.log(`Added user ${userEmail} as an owner on file ${filename}.`);

PHP

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

use Google\Cloud\Storage\StorageClient;

/**
 * Add an entity and role to a bucket's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity The entity to update access controls for.
 * @param string $role The permissions to add for the specified entity. May
 *        be one of 'OWNER', 'READER', or 'WRITER'.
 * @param array $options
 *
 * @return void
 */
function add_bucket_acl($bucketName, $entity, $role, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->acl();
    $acl->add($entity, $role, $options);
    printf('Added %s (%s) to gs://%s ACL' . PHP_EOL, $entity, $role, $bucketName);
}

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

use Google\Cloud\Storage\StorageClient;

/**
 * Add an entity and role to an object's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $entity The entity to update access controls for.
 * @param string $role The permissions to add for the specified entity. May
 *        be one of 'OWNER', 'READER', or 'WRITER'.
 * @param array $options
 *
 * @return void
 */
function add_object_acl($bucketName, $objectName, $entity, $role, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    $acl->add($entity, $role, $options);
    printf('Added %s (%s) to gs://%s/%s ACL' . PHP_EOL, $entity, $role, $bucketName, $objectName);
}

Python

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

def add_bucket_owner(bucket_name, user_email):
    """Adds a user as an owner on the given bucket."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group()`, `domain()`, `all_authenticated()` and `all()`
    # to grant access to different types of entities.
    # You can also use `grant_read()` or `grant_write()` to grant different
    # roles.
    bucket.acl.user(user_email).grant_owner()
    bucket.acl.save()

    print('Added user {} as an owner on bucket {}.'.format(
        user_email, bucket_name))

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

def add_blob_owner(bucket_name, blob_name, user_email):
    """Adds a user as an owner on the given blob."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    # Reload fetches the current ACL from Cloud Storage.
    blob.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # grant access to different types of entities. You can also use
    # `grant_read` or `grant_write` to grant different roles.
    blob.acl.user(user_email).grant_owner()
    blob.acl.save()

    print('Added user {} as an owner on blob {} in bucket {}.'.format(
        user_email, blob_name, bucket_name))

Ruby

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

Im folgenden Beispiel wird eine ACL einem Bucket hinzugefügt:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.acl.add_owner email

puts "Added OWNER permission for #{email} to #{bucket_name}"

Im folgenden Beispiel wird eine ACL einem Objekt hinzugefügt:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Storage bucket"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.add_owner email

puts "Added OWNER permission for #{email} to #{file_name}"

JSON API

Beim Erstellen eines Buckets können Sie das Attribut acl[] in einer insert-Anfrage angeben. Für einen bestehenden Bucket geben Sie das Attribut acl[] in einer patch- oder update-Anfrage an.

Beim Erstellen eines Objekts geben Sie im Anfragetext das Attribut acl[] oder in einer insert-Anfrage den Abfrageparameter predefinedAcl an. Für ein bestehendes Objekt geben Sie das Attribut acl[] oder den Abfrageparameter predefinedAcl in einer patch- oder update-Anfrage an.

Definitionen der Bucket- und Objekt-ACL-Attribute finden Sie in den Ressourcen BucketAccessControls bzw. ObjectAccessControls.

Das folgende Beispiel zeigt unterschiedliche Bucket-ACL-Einträge:

"acl": [
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/project-owners-123412341234",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-owners-123412341234",
"bucket": "example-bucket",
"entity": "project-owners-123412341234",
"role": "OWNER",
"projectTeam": {
       "projectNumber": "123412341234",
       "team": "owners"
},
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/project-editors-123412341234",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-editors-123412341234",
"bucket": "example-bucket",
"entity": "project-editors-123412341234",
"role": "OWNER",
"projectTeam": {
     "projectNumber": "123412341234",
     "team": "editors"
},
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/project-viewers-123412341234",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-viewers-123412341234",
"bucket": "example-bucket",
"entity": "project-viewers-123412341234",
"role": "READER",
"projectTeam": {
     "projectNumber": "123412341234",
     "team": "viewers"
},
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/group-gs-announce@googlegroups.com",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/group-gs-announce@googlegroups.com",
"bucket": "example-bucket",
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com",
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/user-jane@gmail.com",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/user-jane@gmail.com",
"bucket": "example-bucket",
"entity": "user-jane@gmail.com",
"role": "READER",
"email": "jane@gmail.com",
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/allUsers",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/allUsers",
"bucket": "example-bucket",
"entity": "allUsers",
"role": "READER",
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/allAuthenticatedUsers",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/allAuthenticatedUsers",
"bucket": "example-bucket",
"entity": "allAuthenticatedUsers",
"role": "READER",
"etag": "CDk="
}
]

XML API

In der XML API werden ACLs im XML-Format definiert. Zum Ändern von Bucket- und Objekt-ACLs hängen Sie ein XML-Dokument an den Anfragetext an. Wenn Sie Bucket- und Objekt-ACLs abrufen, wird ein XML-Dokument zurückgegeben. Dieses enthält die einzelnen ACL-Einträge der Buckets oder Objekte.

  • Nachdem Sie einen Bucket mit einer PUT Bucket-Anfrage erstellt haben, verwenden Sie eine zweite PUT Bucket-Anfrage mit dem ?acl-Parameter, um die Bucket-ACL zu ändern.

  • Nachdem Sie ein Objekt mit einer PUT Object-Anfrage hochgeladen haben, ändern Sie die ACL mit einer weiteren PUT-Anfrage mithilfe des ?acl-Parameters oder des Anfrageheaders x-googl-acl.

Verwenden Sie folgende ACL-Syntax für die XML API. Unter RELAX NG – Kompaktes Syntaxformatschema sind die Formatierungsanforderungen für Google ACL-XML genau beschrieben.

Element Beschreibung
AccessControlList Container für die Elemente Entries und Owner.
Owner Container für die Elemente DisplayName und ID. Weil ein Objekt immer dem Nutzer gehört, der es hochgeladen hat, wird dieses Element für Objekte nicht benötigt. Es wird genutzt, wenn Sie die ACL-Syntax von Amazon S3 in einem Migrationsszenario verwenden.

Amazon Simple Storage Service und Amazon S3 sind Marken von Amazon.com, Inc. oder ihren Tochtergesellschaften in den Vereinigten Staaten und/oder anderen Ländern.
ID Die Google Cloud Storage-ID des Bucket-Inhabers.
DisplayName Derzeit nicht implementiert. Der Wert ist immer ein leerer String.
Entries Container für keine oder mehr Entry-Elemente.
Entry Container für Scope- und Permission-Elemente. Ein Entry darf jeweils nur ein Scope- und ein Permission-Element enthalten.
Scope Container für ein ID-, EmailAddress- oder Domain-Element, das den Geltungsbereich der ACL definiert. Dieses Element muss ein type-Attribut mit einem der folgenden Werte enthalten: UserByID, UserByEmail, GroupByID, GroupByEmail, GroupByDomain, AllUsers oder AllAuthenticatedUsers.
ID Kennzeichnet den Empfänger, wenn für den Berechtigungseintrag eine ID angegeben wird.
EmailAddress Die E-Mail-Adresse des Empfängers, wenn für den Berechtigungseintrag eine E-Mail-Adresse angegeben wird.
Domain Die Domain des Empfängers, wenn für den Berechtigungseintrag eine Domain angegeben wird.
Name Ein optionales Element, das angegeben oder auch automatisch hinzugefügt werden kann, wenn der Geltungsbereich UserByEmail oder GroupByEmail lautet.
Permission Die erteilte Berechtigung: READ , WRITE oder FULL_CONTROL.

Beachten Sie Folgendes, wenn Sie ACLs mithilfe der XML API bearbeiten:

  • Nur das oben beschriebene XML-Format kann verwendet werden.
  • Gleiche Geltungsbereiche können nicht festgelegt werden.

    Das ACL-XML kann viele Einträge enthalten, unzulässig sind jedoch Einträge mit gleichem Geltungsbereich. Es darf zum Beispiel keine zwei Einträge geben, die beide das Bereichselement jane@example.com enthalten.

Das folgende Beispiel zeigt unterschiedliche Bucket-ACL-Einträge:

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlList>
<Owner>
    <ID>00b4903a9721...</ID>
</Owner>
<Entries>
    <Entry>
      <Scope type="GroupById">
        <ID>00b4903a9722...</ID>
      </Scope>
      <Permission>FULL_CONTROL</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupById">
        <ID>00b4903a9723...</ID>
      </Scope>
      <Permission>FULL_CONTROL</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupById">
        <ID>00b4903a9724...</ID>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupByDomain">
        <Domain>example.com</Domain>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupByEmail">
        <EmailAddress>gs-announce@googlegroups.com</EmailAddress>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="UserByEmail">
        <EmailAddress>jane@gmail.com</EmailAddress>
        <Name>jane</Name>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="AllUsers"/>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="AllAuthenticatedUsers"/>
      <Permission>READ</Permission>
    </Entry>
</Entries>
</AccessControlList>

Das Element "Name" in ACL-XML festlegen

Wenn Sie eine ACL eines Buckets oder Objekts betrachten, fällt Ihnen vielleicht auf, dass einigen der Einträge das zusätzliche Element <Name> angefügt ist. So ein Eintrag sieht zum Beispiel so aus:

<Entry>
    <Scope type="UserByEmail">
      <EmailAddress>jane@gmail.com</EmailAddress>
      <Name>Jane</Name>
    </Scope>
    <Permission>FULL_CONTROL</Permission>
</Entry>

Diese optionalen <Name>-Elemente werden in zwei Fällen hinzugefügt:

  1. Wenn die ACLs des Buckets oder Objekts <Name> als Element enthalten.

    Beim Erstellen von ACLs können Sie das Element <Name> in die ACL-Einträge aufnehmen. Sie können jeden Wert in das Element <Name> eingeben. Die Werte werden von Cloud Storage gespeichert, bis die ACL entfernt oder überschrieben wird. Diese Methode kann nützlich sein, wenn Sie komplizierte Kennzeichnungen verwenden, zum Beispiel Google Cloud Storage-IDs.

  2. Wenn ein UserByEmail- oder GroupByEmail-Bereich ein öffentliches Google-Profil enthält.

    Wenn Sie einen dieser Geltungsbereiche verwenden, aber kein <Name>-Element angeben, prüft Cloud Storage, ob es für den Nutzer oder die Google Group, dem bzw. der diese E-Mail-Adresse gehört, ein öffentliches Google-Profil mit einem öffentlichen Namen gibt. Wenn ja, wird der öffentliche Name von Cloud Storage automatisch für das <Name>-Element übernommen.

Vordefinierte ACL anwenden

Anstatt wie oben gezeigt die gesamte ACL Eintrag für Eintrag zu spezifizieren, können Sie eine vordefinierte ACL verwenden, die automatisch eine Reihe von Einträgen anwendet, die für ein bestimmtes Szenario angepasst sind. Eine vordefinierte ACL kann über gsutil, die JSON API oder die XML API einem Bucket oder einem Objekt zugewiesen werden.

Für neue Objekte

So wenden Sie eine vordefinierte ACL während des Objektuploads auf ein Objekt an:

Console

Sie können eine vordefinierte ACL nicht mithilfe der GCP Console anwenden. Verwenden Sie stattdessen gsutil.

gsutil

Verwenden Sie die Option -a mit dem Befehl gsutil cp, um die vordefinierte ACL anzuwenden:

gsutil cp -a [PREDEFINED_ACL] [OBJECT] gs://[BUCKET_NAME]

In diesem Beispiel wird die vordefinierte ACL bucket-owner-read beim Hochladen des Objekts paris.jpg in den Bucket example-travel-maps angewendet:

gsutil cp -a bucket-owner-read paris.jpg gs://example-travel-maps

JSON API

Verwenden Sie den Abfragestringparameter predefinedAcl in einer insert-Anfrage, um die vordefinierte ACL anzuwenden.

In diesem Beispiel wird die vordefinierte ACL bucketOwnerRead beim Hochladen des Objekts paris.jpg in den Bucket example-travel-maps angewendet:

curl -X POST --data-binary @paris.jpg -H "Content-Type: image/jpeg" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
"https://www.googleapis.com/upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead"

Die Anfrage sieht so aus:

POST /upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&amppredefinedAcl=bucketOwnerRead HTTP/1.1
Host: www.googleapis.com
Content-Type: image/jpeg
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
Content-Length: 12345
Date: Fri, 10 Oct 2014 00:02:38 GMT

XML API

Verwenden Sie den Header x-goog-acl in einer Put Object-Anfrage, um die vordefinierte ACL anzuwenden.

In diesem Beispiel wird die vordefinierte ACL bucket-owner-read beim Hochladen des Objekts paris.jpg in den Bucket example-travel-maps angewendet:

curl -X PUT --upload-file paris.jpg -H "x-goog-acl: bucket-owner-read" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg

Die Anfrage sieht so aus:

PUT /paris.jpg HTTP/1.1
Host: example-travel-maps.storage.googleapis.com
Date: Thu, 09 Oct 2014 23:06:08 GMT
Content-Length: 12345
Content-Type: image/jpg
x-goog-acl: bucket-owner-read
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

12345 bytes in entity body

Für vorhandene Buckets oder Objekte

Eine vordefinierte ACL kann auch auf vorhandene Buckets oder Objekte angewendet werden. Dies ist nützlich, wenn Sie eine vordefinierte ACL oder eine benutzerdefinierte ACL durch eine (andere) vordefinierte ACL ersetzen möchten.

Console

Sie können eine vordefinierte ACL nicht mithilfe der GCP Console anwenden. Verwenden Sie stattdessen gsutil.

gsutil

Verwenden Sie den Befehl gsutil acl set, um die vordefinierte ACL anzuwenden:

gsutil acl set [PREDEFINED_ACL] gs://[BUCKET_NAME]/[OBJECT_NAME]

Um zum Beispiel die vordefinierte ACL private auf das Objekt paris.jpg im Bucket example-travel-maps anzuwenden:

gsutil acl set private gs://example-travel-maps/paris.jpg

JSON API

Verwenden Sie den Abfragestringparameter predefinedAcl und geben Sie in einer patch-Anfrage ein leeres acl-Attribut an, um die vordefinierte ACL anzuwenden.

Um zum Beispiel die vordefinierte ACL private auf das Objekt paris.jpg im Bucket example-travel-maps anzuwenden:

curl -X PATCH --data '{"acl": []}'  -H "Content-Type: application/json" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private

Die Anfrage sieht so aus:

PATCH /storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private HTTP/1.1
Host: www.googleapis.com
Content-Type: application/json
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
Content-Length: 11
Date: Fri, 10 Oct 2014 18:57:59 GMT

XML API

Verwenden Sie den Header x-goog-acl mit dem Abfragestringparameter acl in einer Put Object-Anfrage, aber nehmen Sie kein XML-Dokument in die Anfrage auf.

Um zum Beispiel die vordefinierte ACL private auf das Objekt paris.jpg im Bucket example-travel-maps anzuwenden:

curl -X PUT -H "Content-Length: 0" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
-H "x-goog-acl: private" https://storage.googleapis.com/example-travel-maps/paris.jpg?acl

Die Anfrage sieht so aus:

PUT /paris.jpg?acl HTTP/1.1
Host: example-travel-maps.storage.googleapis.com
Date: Thu, 09 Oct 2014 23:14:59 GMT
Content-Length: 0
x-goog-acl: private
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

empty entity body

Standard-Objekt-ACLs festlegen

Damit Sie nicht für jedes neu erstellte Objekt eine ACL festlegen müssen, können Sie für Buckets Standard-Objekt-ACLs definieren. Jedem neuen Objekt, das dem Bucket hinzugefügt wird und das nicht bereits über eine ACL verfügt, wird automatisch diese Standard-ACL zugewiesen. Damit könnten Sie zum Beispiel festlegen, dass auf die meisten Objekte in einem bestimmten Bucket nur eine bestimmte Nutzergruppe Zugriff haben soll. Sie können die Standard-Objekt-ACL ändern und dann Objekte zum Bucket hinzufügen. Diese erhalten automatisch die Standard-Objekt-ACL, die Sie angegeben haben. Sie können einzelnen Objekten aber auch andere ACLs zuweisen, sodass diese dann nicht die Standard-ACL erhalten.

Die Standard-Objekt-ACL für einen Bucket anzeigen und ändern:

Console

Sie können Standard-Objekt-ACLs nicht mithilfe der GCP Console festlegen. Verwenden Sie stattdessen gsutil.

gsutil

  1. Verwenden Sie gsutil defacl zum Abrufen einer Standard-Objekt-ACL:

    gsutil defacl get gs://[BUCKET_NAME]

  2. Verwenden Sie gsutil defacl ch oder gsutil defacl set zum Bearbeiten der Standard-Objekt-ACL.

    Mit dem folgenden Befehl wird zum Beispiel jane@gmail.com der Standard-Objekt-ACL für den Bucket example-travel-maps hinzugefügt:

    gsutil defacl ch -u jane@gmail.com:READER gs://example-travel-maps

    Sie können auch eine Datei verwenden, um eine Standard-Objekt-ACL zu spezifizieren. Weitere Informationen finden Sie in der Dokumentation zu gsutil defacl.

Codebeispiele

C++

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string entity,
   std::string role) {
  StatusOr<gcs::ObjectAccessControl> default_object_acl =
      client.CreateDefaultObjectAcl(bucket_name, entity, role);

  if (!default_object_acl) {
    throw std::runtime_error(default_object_acl.status().message());
  }

  std::cout << "Role " << default_object_acl->role()
            << " will be granted default to " << default_object_acl->entity()
            << " on any new object created on bucket "
            << default_object_acl->bucket() << "\n"
            << "Full attributes: " << *default_object_acl << "\n";
}

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string bucket_name, std::string entity) {
  google::cloud::Status status =
      client.DeleteDefaultObjectAcl(bucket_name, entity);

  if (!status.ok()) {
    throw std::runtime_error(status.message());
  }

  std::cout << "Deleted ACL entry for " << entity << " in bucket "
            << bucket_name << "\n";
}

C#

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

private void AddBucketDefaultOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.Acl)
    {
        bucket.Acl = new List<BucketAccessControl>();
    }
    if (null == bucket.DefaultObjectAcl)
    {
        bucket.DefaultObjectAcl = new List<ObjectAccessControl>();
    }
    bucket.DefaultObjectAcl.Add(new ObjectAccessControl()
    {
        Bucket = bucketName,
        Entity = $"user-{userEmail}",
        Role = "OWNER",
    });
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

private void RemoveBucketDefaultOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.DefaultObjectAcl)
        return;
    if (null == bucket.Acl)
    {
        bucket.Acl = new List<BucketAccessControl>();
    }
    bucket.DefaultObjectAcl = bucket.DefaultObjectAcl.Where((acl) =>
         !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")
        ).ToList();
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

Go

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

func addDefaultBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).DefaultObjectACL()
	if err := acl.Set(ctx, storage.AllAuthenticatedUsers, storage.RoleReader); err != nil {
		return err
	}
	return nil
}

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

func deleteDefaultBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).DefaultObjectACL()
	if err := acl.Delete(ctx, storage.AllAuthenticatedUsers); err != nil {
		return err
	}
	return nil
}

Java

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

Acl acl =
    storage.createDefaultAcl(bucketName, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER));

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

boolean deleted = storage.deleteDefaultAcl(bucketName, User.ofAllAuthenticatedUsers());
if (deleted) {
  // the acl entry was deleted
} else {
  // the acl entry was not found
}

Node.js

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to add, e.g. developer@company.com';

// Makes the user an owner in the default ACL of the bucket. You can use
// addAllUsers(), addDomain(), addProject(), addGroup(), and
// addAllAuthenticatedUsers() to grant access to different types of entities.
// You can also use "readers" and "writers" to grant different roles.
await storage.bucket(bucketName).acl.default.owners.addUser(userEmail);

console.log(`Added user ${userEmail} as an owner on bucket ${bucketName}.`);

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to remove, e.g. developer@company.com';

// Removes the user from the access control list of the bucket. You can use
// deleteAllUsers(), deleteDomain(), deleteProject(), deleteGroup(), and
// deleteAllAuthenticatedUsers() to remove access for different types of entities.
await storage.bucket(bucketName).acl.default.owners.deleteUser(userEmail);

console.log(`Removed user ${userEmail} from bucket ${bucketName}.`);

PHP

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

use Google\Cloud\Storage\StorageClient;

/**
 * Add an entity and role to a bucket's default ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity The entity to update access controls for.
 * @param string $role The permissions to add for the specified entity. May
 *        be one of 'OWNER', 'READER', or 'WRITER'.
 * @param array $options
 *
 * @return void
 */
function add_bucket_default_acl($bucketName, $entity, $role, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->defaultAcl();
    $acl->add($entity, $role, $options);
    printf('Added %s (%s) to gs://%s default ACL' . PHP_EOL, $entity, $role, $bucketName);
}

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from a bucket's default ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity the name of the entity to remove from the ACL.
 * @param array $options
 *
 * @return void
 */
function delete_bucket_default_acl($bucketName, $entity, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->defaultAcl();
    $acl->delete($entity, $options);
    printf('Deleted %s from gs://%s default ACL' . PHP_EOL, $entity, $bucketName);
}

Python

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

def add_bucket_default_owner(bucket_name, user_email):
    """Adds a user as an owner in the given bucket's default object access
    control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # grant access to different types of entities. You can also use
    # `grant_read` or `grant_write` to grant different roles.
    bucket.default_object_acl.user(user_email).grant_owner()
    bucket.default_object_acl.save()

    print('Added user {} as an owner in the default acl on bucket {}.'.format(
        user_email, bucket_name))

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

def remove_bucket_default_owner(bucket_name, user_email):
    """Removes a user from the access control list of the given bucket's
    default object access control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # remove access for different types of entities.
    bucket.default_object_acl.user(user_email).revoke_read()
    bucket.default_object_acl.user(user_email).revoke_write()
    bucket.default_object_acl.user(user_email).revoke_owner()
    bucket.default_object_acl.save()

    print('Removed user {} from the default acl of bucket {}.'.format(
        user_email, bucket_name))

Ruby

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

Im folgenden Beispiel wird eine Standard-Objekt-ACL einem Bucket hinzugefügt:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.default_acl.add_owner email

puts "Added default OWNER permission for #{email} to #{bucket_name}"

Im folgenden Beispiel wird die Standard-Objekt-ACL eines Buckets gelöscht:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.default_acl.delete email

puts "Removed default ACL permissions for #{email} from #{bucket_name}"

JSON API

  1. Die Standard-Objekt-ACL rufen Sie mit einer GET-Anfrage ab. Beispiel:

    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?projection=full

  2. Mit einer patch-Anfrage können Sie die Standard-Objekt-ACL ersetzen. Mit folgender Anfrage wird die Standard-Objekt-ACL für den Bucket example-travel-maps durch die in defacls.json angegebene ACL ersetzt:

    curl -X PATCH --data @defacls.json -H "Content-Type: application/json" -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    https://www.googleapis.com/storage/v1/b/example-travel-maps

    Ein Beispiel für defacls.json:

    {
    "defaultObjectAcl": [
    {
    "email": "jane@gmail.com",
    "entity": "user-jane@gmail.com",
    "role": "READER"
    }
    ]
    }

XML API

  1. Rufen Sie die Standard-Objekt-ACL mit einer auf Ihren Bucket beschränkten GET-Anfrage ab, die den Parameter ?defaultObjectAcl enthält. Beispiel:

    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    https://storage.googleapis.com/[BUCKET_NAME]?defaultObjectAcl

  2. Verwenden Sie eine auf Ihren Bucket beschränkte PUT-Anfrage mit dem Parameter ?defaultObjectAcl, um die Standard-Objekt-ACL durch die ACL zu ersetzen, die in acls.xml angegeben ist. Beispiel:

    curl -X PUT --data-binary @acls.xml -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    http://storage.googleapis.com/[BUCKET_NAME]?defaultObjectAcl

    Ein Beispiel für acls.xml:

    <AccessControlList>
    <Entries>
    <Entry>
    <Permission>FULL_CONTROL</Permission>
    <Scope type="GroupByEmail">
    <EmailAddress>travel-companions@googlegroups.com</EmailAddress>
    </Scope>
    </Entry>
    </Entries>
    </AccessControlList>

Die ACL-Syntax wird unter ACLs festlegen beschrieben. Es ist auch möglich, eine vordefinierte ACL als Standard-Objekt-ACL festzulegen.

So legen Sie eine vordefinierte ACL als Standard-Objekt-ACL für einen Bucket fest:

Console

Sie können Standard-Objekt-ACLs nicht mithilfe der GCP Console festlegen. Verwenden Sie stattdessen gsutil.

gsutil

Verwenden Sie den Befehl gsutil defacl mit dem Namen der vordefinierten ACL.

So legen Sie zum Beispiel project-private als Standard-Objekt-ACL für den Bucket example-travel-maps fest:

gsutil defacl set project-private gs://example-travel-maps

JSON API

Verwenden Sie eine PUT-Anfrage mit dem Parameter predefinedAcl.

Beispiel:

curl -X PUT -H "Content-Length: 0" -H "Authorization: Bearer [OAUTH2_TOKEN]" 
https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?predefinedAcl=private

XML API

Verwenden Sie eine auf Ihren Bucket beschränkte PUT-Anfrage mit dem Parameter ?defaultObjectAcl und dem Header x-goog-acl.

Beispiel:

curl -X PUT -H "x-goog-acl: project-private" -H "Content-Length: 0" -H "Authorization: Bearer [OAUTH2_TOKEN]" 
http://storage.googleapis.com/[BUCKET_NAME]?defaultObjectAcl

Standard-Objekt-ACLs für einen neu erstellten Bucket:

Die Standard-Objekt-ACLs für einen neu erstellten Bucket sind im Folgenden aufgeführt. Vergleichen Sie sie mit den Standard-Objekt-ACLs Ihres Buckets, um festzustellen, ob die Standard-Objekt-ACLs Ihres Buckets geändert wurden.

Console

In der GCP Console können Sie nicht mit Standard-Objekt-ACLs arbeiten. Verwenden Sie stattdessen gsutil.

gsutil

Im folgenden Beispiel lautet die Projekt-ID "123412341234". Ihre Projekt-ID wird anders lauten.

[
{
"entity": "project-owners-123412341234",
"projectTeam": {
  "projectNumber": "123412341234",
  "team": "owners"
},
"role": "OWNER"
},
{
"entity": "project-editors-123412341234",
"projectTeam": {
  "projectNumber": "123412341234",
  "team": "editors"
},
"role": "OWNER"
},
{
"entity": "project-viewers-123412341234",
"projectTeam": {
  "projectNumber": "123412341234",
  "team": "viewers"
},
"role": "READER"
}
]

JSON API

Im folgenden Beispiel lautet die Projekt-ID "123412341234". Ihre Projekt-ID wird anders lauten.

defaultObjectAcl": [
{
"kind": "storage#objectAccessControl",
"entity": "project-owners-123412341234",
"role": "OWNER",
"projectTeam": {
"projectNumber": "123412341234",
"team": "owners"
}
},
{
"kind": "storage#objectAccessControl",
"entity": "project-editors-123412341234",
"role": "OWNER",
"projectTeam": {
"projectNumber": "123412341234",
"team": "editors"
}
},
{
"kind": "storage#objectAccessControl",
"entity": "project-viewers-123412341234",
"role": "READER",
"projectTeam": {
"projectNumber": "123412341234",
"team": "viewers"
}
}
]

XML API

Im folgenden Beispiel beginnen die Projektrollen-IDs mit "00b4903a97...". Ihre IDs werden anders lauten.

<?xml version='1.0' encoding='UTF-8'?>
<AccessControlList>
<Entries>
<Entry>
  <Scope type='GroupById'>
    <ID>00b4903a9721...</ID>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type='GroupById'>
    <ID>00b4903a9722...</ID>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type='GroupById'>
    <ID>00b4903a9723...</ID>
  </Scope>
  <Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>

Die Standard-Objekt-ACL eines neu erstellten Buckets entspricht der vordefinierten ACL projectPrivate.

ACLs abrufen

So rufen Sie die ACL eines vorhandenen Buckets oder Objekts ab:

Console

  1. Wechseln Sie in der GCP Console zum Cloud Storage-Browser.
    Zum Cloud Storage-Browser

  2. Rufen Sie das Objekt auf, dessen ACL angezeigt werden soll.

  3. Wählen Sie im Drop-down-Menü für das Objekt Berechtigungen bearbeiten aus.

    Ein Dialogfeld mit den Berechtigungen des Objekts wird angezeigt.

gsutil

Verwenden Sie gsutil acl get, um die ACL eines Objekts abzurufen.

Um beispielsweise die ACL des Objekts paris.jpg im Bucket example-travel-maps abzurufen:

gsutil acl get gs://example-travel-maps/paris.jpg

Beispielantwort:

[
{
    "entity": "project-owners-123412341234",
    "projectTeam": {
      "projectNumber": "123412341234",
      "team": "owners"
    },
    "role": "OWNER"
},
{
    "entity": "project-editors-123412341234",
    "projectTeam": {
      "projectNumber": "123412341234",
      "team": "editors"
    },
    "role": "OWNER"
},
{
    "entity": "project-viewers-123412341234",
    "projectTeam": {
      "projectNumber": "123412341234",
      "team": "viewers"
    },
    "role": "READER"
},
{
    "email": "gs-announce@googlegroups.com",
    "entity": "group-gs-announce@googlegroups.com",
    "role": "READER"
},
{
    "email": "jane@gmail.com",
    "entity": "user-jane@gmail.com",
    "role": "READER"
},
{
    "entity": "allUsers",
    "role": "READER"
},
{
    "entity": "allAuthenticatedUsers",
    "role": "READER"
}
]

Um die ACL eines Buckets zu erhalten:

gsutil acl get gs://[BUCKET_NAME]

Wenn Sie den Befehl gsutil acl get verwenden, um ACLs für Buckets und Objekte abzurufen, liegen diese im selben JSON-Format vor, das auch zum Festlegen von ACLs verwendet wird. ACLs im JSON-Format verwenden Attributnamen der JSON API, wie entity und role.

Weitere Informationen zur Interpretation der Ausgabe finden Sie in der JSON API-Syntax bzw. durch Ausführen von gsutil help acls.

Codebeispiele

C++

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<std::vector<gcs::BucketAccessControl>> items =
      client.ListBucketAcl(bucket_name);

  if (!items) {
    throw std::runtime_error(items.status().message());
  }

  std::cout << "ACLs for bucket=" << bucket_name << "\n";
  for (gcs::BucketAccessControl const& acl : *items) {
    std::cout << acl.role() << ":" << acl.entity() << "\n";
  }
}

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<std::vector<gcs::ObjectAccessControl>> items =
      client.ListObjectAcl(bucket_name, object_name);

  if (!items) {
    throw std::runtime_error(items.status().message());
  }

  std::cout << "ACLs for object=" << object_name << " in bucket "
            << bucket_name << "\n";
  for (gcs::ObjectAccessControl const& acl : *items) {
    std::cout << acl.role() << ":" << acl.entity() << "\n";
  }
}

C#

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

private void PrintBucketAcl(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (bucket.Acl != null)
        foreach (var acl in bucket.Acl)
        {
            Console.WriteLine($"{acl.Role}:{acl.Entity}");
        }
}

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

private void PrintObjectAcl(string bucketName, string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName,
        new GetObjectOptions() { Projection = Projection.Full });
    if (storageObject.Acl != null)
    {
        foreach (var acl in storageObject.Acl)
        {
            Console.WriteLine($"{acl.Role}:{acl.Entity}");
        }
    }
}

Go

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

func bucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	rules, err := client.Bucket(bucket).ACL().List(ctx)
	if err != nil {
		return err
	}
	for _, rule := range rules {
		fmt.Printf("ACL rule: %v\n", rule)
	}
	return nil
}

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

func objectACL(client *storage.Client, bucket, object string) error {
	ctx := context.Background()

	rules, err := client.Bucket(bucket).Object(object).ACL().List(ctx)
	if err != nil {
		return err
	}
	for _, rule := range rules {
		fmt.Printf("ACL rule: %v\n", rule)
	}
	return nil
}

Java

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

Acl acl = storage.getAcl(bucketName, User.ofAllAuthenticatedUsers());

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.getAcl(blobId, User.ofAllAuthenticatedUsers());

Node.js

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Gets the ACL for the bucket
const [acls] = await storage.bucket(bucketName).acl.get();

acls.forEach(acl => {
  console.log(`${acl.role}: ${acl.entity}`);
});

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

// Gets the ACL for the file
const [acls] = await storage
  .bucket(bucketName)
  .file(filename)
  .acl.get();

acls.forEach(acl => {
  console.log(`${acl.role}: ${acl.entity}`);
});

PHP

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

use Google\Cloud\Storage\StorageClient;

/**
 * Print all entities and roles for a bucket's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 *
 * @return Google\Cloud\Storage\Acl the ACL for the Cloud Storage bucket.
 */
function get_bucket_acl($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->acl();
    foreach ($acl->get() as $item) {
        printf('%s: %s' . PHP_EOL, $item['entity'], $item['role']);
    }
}

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

use Google\Cloud\Storage\StorageClient;

/**
 * Print all entities and roles for an object's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 *
 * @return void
 */
function get_object_acl($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    foreach ($acl->get() as $item) {
        printf('%s: %s' . PHP_EOL, $item['entity'], $item['role']);
    }
}

Python

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

def print_bucket_acl(bucket_name):
    """Prints out a bucket's access control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    for entry in bucket.acl:
        print('{}: {}'.format(entry['role'], entry['entity']))

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

def print_blob_acl(bucket_name, blob_name):
    """Prints out a blob's access control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    for entry in blob.acl:
        print('{}: {}'.format(entry['role'], entry['entity']))

Ruby

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

Im folgenden Beispiel wird eine Bucket-ACL abgerufen:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"

require "google/cloud/storage"

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

puts "ACL for #{bucket_name}:"

bucket.acl.owners.each do |owner|
  puts "OWNER #{owner}"
end

bucket.acl.writers.each do |writer|
  puts "WRITER #{writer}"
end

bucket.acl.readers.each do |reader|
  puts "READER #{reader}"
end

Im folgenden Beispiel wird eine Objekt-ACL abgerufen:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Storage bucket"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

puts "ACL for #{file_name} in #{bucket_name}:"

file.acl.owners.each do |owner|
  puts "OWNER #{owner}"
end

file.acl.readers.each do |reader|
  puts "READER #{reader}"
end

JSON API

  1. Sie benötigen die OWNER-Berechtigung für den Bucket bzw. das Objekt.

  2. Rufen Sie die Bucket- oder Objekt-ACL mithilfe einer GET-Anfrage ab.

    Die Objekt-ACL wird im JSON-Format als Anhang zum Antworttext geliefert.

Um beispielsweise die ACL für das Objekt paris.jpg im Bucket example-travel-maps zurückzugeben:

curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" 
https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?projection=full

Die Antwort sollte so aussehen:

{
"kind": "storage#object",
"id": "example-travel-maps/paris.jpg/1412805837131000",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg",
"name": "paris.jpg",
"bucket": "example-travel-maps",
...
"acl": [
{
...
"entity": "project-owners-867489160491",
"role": "OWNER",
"projectTeam": {
    "projectNumber": "867489160491",
    "team": "owners"
},
...
},
{
...
"entity": "user-jane@gmail.com",
"role": "OWNER",
"email": "jane@gmail.com",
...
},
{
...
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com",
...
}
],
"owner": {
"entity": "user-jane@gmail.com"
},
...
}

Sie können auch die objectAccessControls-Methode der GET-Ressource verwenden, um einzelne Einträge in der ACL eines Objekts abzurufen.

XML API

  1. Sie benötigen eine FULL_CONTROL-Berechtigung für den Bucket bzw. das Objekt.

  2. Rufen Sie die Bucket- oder Objekt-ACL mit einem acl-Abfragestringparameter in einer GET Object-Anfrage ab.

Die ACLs sind in XML definiert und an den Anworttext angefügt.

Um beispielsweise die ACL für das Objekt paris.jpg im Bucket example-travel-maps zurückzugeben:

curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" 
https://storage.googleapis.com/example-travel-maps/paris.jpg?acl

Die Antwort sollte so aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlList>
<Owner>
<ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
<Name>Owner Name</Name>
</Owner>
<Entries>
<Entry>
  <Scope type="UserById">
    <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
    <Name>Name</Name>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type="UserByEmail">
    <EmailAddress>jane@gmail.com</EmailAddress>
    <Name>Jane</Name>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type="GroupByEmail">
    <EmailAddress>gs-announce@googlegroups.com</EmailAddress>
  </Scope>
  <Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>

Sie können auch die JSON-GET-Methode der ObjectAccessControls-Ressource verwenden, um einen bestimmten ACL-Eintrag zurückzugeben.

ACLs ändern

So ändern Sie die ACL eines vorhandenen Objekts oder Buckets:

Console

  1. Wechseln Sie in der GCP Console zum Cloud Storage-Browser.
    Zum Cloud Storage-Browser

  2. Rufen Sie das Objekt auf, dessen ACL geändert werden soll.

  3. Wählen Sie im Drop-down-Menü für das Objekt Berechtigungen bearbeiten aus.

    Ein Dialogfeld mit den Berechtigungen des Objekts wird angezeigt.

Im folgenden Beispiel wird dem Nutzer jane@gmail.com die Berechtigung OWNER und den Mitgliedern der Gruppe gs-announce die Berechtigung READER für das Objekt paris.jpg erteilt:

Eine ACL für das Objekt "paris.jpg" festlegen.

gsutil

  1. Definieren Sie die ACLs in einer Datei.

  2. Übergeben Sie die ACL-Datei an gsutil acl set und geben Sie das Objekt an, für das die ACLs gelten sollen.

In diesem Beispiel werden die in der Datei acls.txt definierten ACLs auf das Objekt paris.jpg im Bucket example-travel-maps angewendet:

gsutil acl set acl.txt gs://example-travel-maps/paris.jpg

Den Inhalt von acl.txt sehen Sie unten. Diese ACLs gewähren den Inhabern des Projekts 867489160491 sowie dem Nutzer jane@gmail.com die Berechtigung OWNER für das Objekt paris.jpg. Außerdem erhalten die Mitglieder der Gruppe gs-announce die Berechtigung READER für dieses Objekt:

[
{
"entity": "project-owners-867489160491",
"role": "OWNER",
"projectTeam": {
    "projectNumber": "867489160491",
    "team": "owners"
},
},
{
"entity": "user-jane@gmail.com",
"email": "jane@gmail.com",
"role": "OWNER"
},
{
"entity": "group-gs-announce@googlegroups.com",
"email": "gs-announce@googlegroups.com",
"role": "READER"
}
]

Mit derselben ACL für dieses Objekt können Sie auch individuelle Rechte erteilen. Um dem Nutzer jane@gmail.com zum Beispiel READER-Zugriff zu gewähren:

gsutil acl ch -u jane@gmail.com:READ gs://example-travel-maps/paris.jpg
.

Codebeispiele

C++

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string entity) {
  StatusOr<gcs::BucketMetadata> original_metadata =
      client.GetBucketMetadata(bucket_name, gcs::Projection::Full());

  if (!original_metadata) {
    throw std::runtime_error(original_metadata.status().message());
  }

  std::vector<gcs::BucketAccessControl> original_acl =
      original_metadata->acl();
  auto it = std::find_if(original_acl.begin(), original_acl.end(),
                         [entity](const gcs::BucketAccessControl& entry) {
                           return entry.entity() == entity &&
                                  entry.role() ==
                                      gcs::BucketAccessControl::ROLE_OWNER();
                         });

  if (it == original_acl.end()) {
    std::cout << "Could not find entity " << entity
              << " with role OWNER in bucket " << bucket_name << "\n";
    return;
  }

  gcs::BucketAccessControl owner = *it;
  google::cloud::Status status =
      client.DeleteBucketAcl(bucket_name, owner.entity());

  if (!status.ok()) {
    throw std::runtime_error(status.message());
  }

  std::cout << "Deleted ACL entry for " << owner.entity() << " in bucket "
            << bucket_name << "\n";
}

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string entity) {
  StatusOr<gcs::ObjectMetadata> original_metadata = client.GetObjectMetadata(
      bucket_name, object_name, gcs::Projection::Full());

  if (!original_metadata) {
    throw std::runtime_error(original_metadata.status().message());
  }

  std::vector<gcs::ObjectAccessControl> original_acl =
      original_metadata->acl();
  auto it = std::find_if(original_acl.begin(), original_acl.end(),
                         [entity](const gcs::ObjectAccessControl& entry) {
                           return entry.entity() == entity &&
                                  entry.role() ==
                                      gcs::ObjectAccessControl::ROLE_OWNER();
                         });

  if (it == original_acl.end()) {
    std::cout << "Could not find entity " << entity << " for file "
              << object_name << " with role OWNER in bucket " << bucket_name
              << "\n";
    return;
  }

  gcs::ObjectAccessControl owner = *it;
  google::cloud::Status status =
      client.DeleteObjectAcl(bucket_name, object_name, owner.entity());

  if (!status.ok()) {
    throw std::runtime_error(status.message());
  }

  std::cout << "Deleted ACL entry for " << owner.entity() << " for file "
            << object_name << " in bucket " << bucket_name << "\n";
}

C#

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

private void RemoveBucketOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.Acl)
        return;
    bucket.Acl = bucket.Acl.Where((acl) =>
        !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")
        ).ToList();
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

private void RemoveObjectOwner(string bucketName, string objectName,
    string userEmail)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName,
        new GetObjectOptions() { Projection = Projection.Full });
    if (null == storageObject.Acl)
        return;
    storageObject.Acl = storageObject.Acl.Where((acl) =>
        !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")
        ).ToList();
    var updatedObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

func deleteBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).ACL()
	if err := acl.Delete(ctx, storage.AllAuthenticatedUsers); err != nil {
		return err
	}
	return nil
}

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

func deleteObjectACL(client *storage.Client, bucket, object string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).Object(object).ACL()
	if err := acl.Delete(ctx, storage.AllAuthenticatedUsers); err != nil {
		return err
	}
	return nil
}

Java

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

boolean deleted = storage.deleteAcl(bucketName, User.ofAllAuthenticatedUsers());
if (deleted) {
  // the acl entry was deleted
} else {
  // the acl entry was not found
}

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
boolean deleted = storage.deleteAcl(blobId, User.ofAllAuthenticatedUsers());
if (deleted) {
  // the acl entry was deleted
} else {
  // the acl entry was not found
}

Node.js

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to remove, e.g. developer@company.com';

// Removes the user from the access control list of the bucket. You can use
// deleteAllUsers(), deleteDomain(), deleteProject(), deleteGroup(), and
// deleteAllAuthenticatedUsers() to remove access for different types of entities.
await storage.bucket(bucketName).acl.owners.deleteUser(userEmail);

console.log(`Removed user ${userEmail} from bucket ${bucketName}.`);

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

async function removeFileOwner(bucketName, filename, userEmail) {
  // Imports the Google Cloud client library
  const {Storage} = require('@google-cloud/storage');

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

  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const bucketName = 'Name of a bucket, e.g. my-bucket';
  // const filename = 'Name of file to access, e.g. file.txt';
  // const userEmail = 'Email of user to remove, e.g. developer@company.com';

  // Removes the user from the access control list of the file. You can use
  // deleteAllUsers(), deleteDomain(), deleteProject(), deleteGroup(), and
  // deleteAllAuthenticatedUsers() to remove access for different types of entities.
  await storage
    .bucket(bucketName)
    .file(filename)
    .acl.owners.deleteUser(userEmail);

  console.log(`Removed user ${userEmail} from file ${filename}.`);

PHP

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from a bucket's default ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity the name of the entity to remove from the ACL.
 * @param array $options
 *
 * @return void
 */
function delete_bucket_acl($bucketName, $entity, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->acl();
    $acl->delete($entity, $options);
    printf('Deleted %s from gs://%s ACL' . PHP_EOL, $entity, $bucketName);
}

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from an object's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $entity The entity to update access controls for.
 * @param array $options
 *
 * @return void
 */
function delete_object_acl($bucketName, $objectName, $entity, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    $acl->delete($entity, $options);
    printf('Deleted %s from gs://%s/%s ACL' . PHP_EOL, $entity, $bucketName, $objectName);
}

Python

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

def remove_bucket_owner(bucket_name, user_email):
    """Removes a user from the access control list of the given bucket."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # remove access for different types of entities.
    bucket.acl.user(user_email).revoke_read()
    bucket.acl.user(user_email).revoke_write()
    bucket.acl.user(user_email).revoke_owner()
    bucket.acl.save()

    print('Removed user {} from bucket {}.'.format(
        user_email, bucket_name))

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

def remove_blob_owner(bucket_name, blob_name, user_email):
    """Removes a user from the access control list of the given blob in the
    given bucket."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # remove access for different types of entities.
    blob.acl.user(user_email).revoke_read()
    blob.acl.user(user_email).revoke_write()
    blob.acl.user(user_email).revoke_owner()
    blob.acl.save()

    print('Removed user {} from blob {} in bucket {}.'.format(
        user_email, blob_name, bucket_name))

Ruby

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

Im folgenden Beispiel wird eine ACL aus einem Bucket entfernt:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.acl.delete email

puts "Removed ACL permissions for #{email} from #{bucket_name}"

Im folgenden Beispiel wird eine ACL aus einem Objekt entfernt:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Storage bucket"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.delete email

puts "Removed ACL permissions for #{email} from #{file_name}"

JSON API

  1. Definieren Sie die ACLs in einer JSON-Datei.

  2. Senden Sie eine patch-Anfrage mit der JSON-Datei und geben Sie das Objekt an, für das die ACLs gelten sollen.

Mit folgendem cURL-Befehl wird zum Beispiel eine JSON-Nutzlast aus dem Dokument acls.json auf das Objekt paris.jpg im Bucket example-travel-maps angewendet:

curl -X PATCH --data @acls.json -H "Content-Type: application/json" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg

Wenn die Inhaber des Projekts 867489160491 und der Nutzer jane@gmail.com durch die ACL die Berechtigung OWNER erhalten und die Mitglieder der Gruppe gs-announce die Berechtigung READER, dann sieht die Anfrage so aus:

PATCH /storage/v1/b/example-travel-maps/o/paris.jpg HTTP/1.1
Host: www.googleapis.com
Content-Type: application/json
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
Content-Length: 597
Date: Wed, 08 Oct 2014 22:37:58 GMT
{
"acl": [
{
"entity": "project-owners-867489160491",
"role": "OWNER",
"projectTeam": {
    "projectNumber": "867489160491",
    "team": "owners"
},
{
"entity": "user-jane@gmail.com",
"role": "OWNER",
"email": "jane@gmail.com"
},
{
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com"
}
]
}

XML API

  1. Definieren Sie die ACLs in einem XML-Dokument.

  2. Senden Sie eine PUT Object-Anfrage mit dem acl-Abfragestringparameter und dem entsprechenden XML-Dokument.

Mit dem folgenden cURL-Befehl wird die XML-Nutzlast im Dokument acls.xml auf das Objekt paris.jpg im Bucket example-travel-maps angewendet:

curl -X PUT --data-binary @acls.xml 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg?acl

Wenn der Nutzer jane@gmail.com die Berechtigung FULL_CONTROL und die Mitglieder der Gruppe gs-announce von der ACL die Berechtigung READ erhalten, dann sieht die Anfrage so aus:

PUT /paris.jpg?acl HTTP/1.1
Host: example-travel-maps.storage.googleapis.com
Date: Sat, 20 Feb 2010 08:31:08 GMT
Content-Length: 589
Content-Type=application/xml
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<?xml version='1.0' encoding='utf-8'?>
<AccessControlList>
<Owner>
<ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
</Owner>
<Entries>
<Entry>
<Permission>FULL_CONTROL</Permission>
<Scope type="UserById">
  <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
</Scope>
</Entry>
<Entry>
<Scope type="UserByEmail">
  <EmailAddress>jane@gmail.com</EmailAddress>
  <Name>Jane</Name>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
<Scope type="GroupByEmail">
  <EmailAddress>gs-announce@googlegroups.com</EmailAddress>
</Scope>
<Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...