Creare e gestire elenchi di controllo dell'accesso (ACL)

Panoramica

In questa pagina viene descritto come controllare l'accesso ai bucket e agli oggetti utilizzando gli elenchi di controllo di accesso (ACL). Gli ACL sono un meccanismo che puoi utilizzare per definire chi ha accesso ai tuoi bucket e agli oggetti, nonché il relativo livello di accesso.

Per saperne di più sull'utilizzo degli ACL per controllare l'accesso alle risorse, consulta la panoramica ACL.

Impostare o modificare gli ACL

Console

  1. Vai al browser Cloud Storage nella console Google Cloud.
    Vai al browser Cloud Storage

  2. Vai all'oggetto di cui vuoi modificare l'ACL.

  3. Scegli Modifica accesso dal menu Altre azioni () associato all'oggetto.

    Dovresti visualizzare una finestra di dialogo delle autorizzazioni con l'ACL attuale dell'oggetto. Ad esempio:

    Questo screenshot mostra un ACL con quattro voci:

    • Nella prima voce, tutti i proprietari di un progetto specifico (il cui numero di progetto è 867489140601) ricevono l'accesso/l'autorizzazione "Proprietario" per questo oggetto.
    • Nella seconda voce, tutti gli editor di un progetto specifico (quello il cui numero di progetto è 867489140601) ricevono anche l'accesso/autorizzazione "Proprietario" per questo oggetto.
    • Nella terza voce, tutti i visualizzatori di un progetto specifico (il cui numero di progetto è 867489140601) ricevono l'accesso/autorizzazione "Lettore" per questo oggetto.
    • Nella quarta voce, l'utente che ha caricato l'oggetto riceve l'accesso/l'autorizzazione "Proprietario" per l'oggetto. Gli uploader di oggetti sono sempre impostati come "Proprietario" e non possono essere rimossi.
  4. Fai clic su Aggiungi elemento.

  5. Scegli il tipo di Entità a cui concedere l'autorizzazione.

    Entità specifica il tipo di elementi che ricevono l'autorizzazione, ad esempio un utente o un gruppo. Consulta Ambiti del controllo dell'accesso per un elenco dei valori supportati per Entità.

  6. Inserisci un valore in Nome.

    Nome identifica un utente, un gruppo o un altro tipo di entità specifico. Consulta Ambiti del controllo dell'accesso per un elenco dei valori supportati per Nome.

    Entità e Nome insieme definiscono a chi si applica l'autorizzazione.

  7. Scegli un valore in Accesso.

    Access definisce l'autorizzazione che vuoi impostare per l'oggetto. Consulta Autorizzazioni di controllo dell'accesso per un elenco dei valori supportati per Accesso.

  8. Fai clic su Salva.

L'esempio seguente mostra le voci per la concessione dell'autorizzazione OWNER dell'utente jane@gmail.com e dei membri dell'autorizzazione READER del gruppo gs-announce per l'oggetto paris.jpg:

Impostazione ACL sull'oggetto paris.jpg.

Per informazioni su come ottenere informazioni dettagliate sugli errori delle operazioni di Cloud Storage non riuscite nella console Google Cloud, consulta Risoluzione dei problemi.

Riga di comando

gcloud

Per aggiungere, modificare o rimuovere una concessione individuale per un oggetto, utilizza il comando objects update con il flag desiderato:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME FLAG

Dove:

  • BUCKET_NAME è il nome del bucket che contiene l'oggetto a cui si applica la modifica. Ad esempio, example-travel-maps.

  • OBJECT_NAME è il nome dell'oggetto a cui viene applicata la modifica. Ad esempio, paris.jpg.

  • FLAG è uno dei seguenti:

    • --add-acl-grant, insieme alla concessione che vuoi aggiungere o modificare. Ad esempio: --add-acl-grant=entity=user-jane@gmail.com,role=READER.

    • --remove-acl-grant e l'entità di cui vuoi rimuovere l'accesso. Ad esempio: --remove-acl-grant=user-jane@gmail.com.

Per sostituire tutti gli ACL di un oggetto:

  1. Definisci gli ACL in un file in formato JSON o YAML.

  2. Utilizza il comando objects update con il flag --acl-file:

    gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --acl-file=FILE_LOCATION

    Dove:

    • BUCKET_NAME è il nome del bucket che contiene l'oggetto a cui si applicano gli ACL. Ad esempio, example-travel-maps.

    • OBJECT_NAME è il nome dell'oggetto a cui si applicano gli ACL. Ad esempio, paris.jpg.

    • FILE_LOCATION è il percorso locale del file contenente gli ACL che hai definito. Ad esempio, Desktop/acls.json.

Di seguito sono riportati i contenuti di un file ACL di esempio. Questi ACL concedono ai proprietari del progetto 867489160491 insieme all'autorizzazione jane@gmail.com OWNER dell'utente per l'oggetto paris.jpg e ai membri del gruppo gs-announce dell'autorizzazione READER per questo oggetto:

[
  {
    "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"
  }
]

gsutil

Per aggiungere, modificare o rimuovere una concessione individuale per un oggetto, utilizza il comando gsutil acl ch:

gsutil acl ch GRANT gs://BUCKET_NAME/OBJECT_NAME

Dove:

  • GRANT è l'entità il cui accesso viene modificato. Ad esempio, -u jane@gmail.com:READ

  • BUCKET_NAME è il nome del bucket che contiene l'oggetto a cui si applica la modifica. Ad esempio, example-travel-maps.

  • OBJECT_NAME è il nome dell'oggetto a cui viene applicata la modifica. Ad esempio, paris.jpg.

Per sostituire tutti gli ACL di un oggetto:

  1. Definisci gli ACL in un file.

  2. Passa il file degli ACL a gsutil acl set e specifica l'oggetto su cui impostare gli ACL:

    gsutil acl set JSON_FILE gs://BUCKET_NAME/OBJECT_NAME

    Dove:

    • JSON_FILE è il percorso di un file in formato JSON contenente gli ACL che hai definito. Ad esempio, Desktop/acls.json.

    • BUCKET_NAME è il nome del bucket che contiene l'oggetto a cui si applicano gli ACL. Ad esempio, example-travel-maps.

    • OBJECT_NAME è il nome dell'oggetto a cui si applicano gli ACL. Ad esempio, paris.jpg.

Di seguito sono riportati i contenuti di un file ACL di esempio. Questi ACL concedono ai proprietari del progetto 867489160491 insieme all'autorizzazione jane@gmail.com OWNER dell'utente per l'oggetto paris.jpg e ai membri del gruppo gs-announce dell'autorizzazione READER per questo oggetto:

[
{
"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"
}
]

Librerie client

C++

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage C++.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:

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

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

L'esempio seguente rimuove un ACL da un oggetto:

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

  std::vector<gcs::ObjectAccessControl> original_acl =
      original_metadata->acl();
  auto it = std::find_if(original_acl.begin(), original_acl.end(),
                         [entity](gcs::ObjectAccessControl const& 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#

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage C#.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:


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

public class AddFileOwnerSample
{
    public Google.Apis.Storage.v1.Data.Object AddFileOwner(
        string bucketName = "your-unique-bucket-name",
        string objectName = "my-file-name",
        string userEmail = "dev@iam.gserviceaccount.com")
    {
        var storage = StorageClient.Create();
        var storageObject = storage.GetObject(bucketName, objectName, new GetObjectOptions
        {
            Projection = Projection.Full
        });

        storageObject.Acl.Add(new ObjectAccessControl
        {
            Bucket = bucketName,
            Entity = $"user-{userEmail}",
            Role = "OWNER",
        });
        var updatedObject = storage.UpdateObject(storageObject);
        Console.WriteLine($"Added user { userEmail} as an owner on file { objectName}.");
        return updatedObject;
    }
}

L'esempio seguente rimuove un ACL da un oggetto:


using Google.Cloud.Storage.V1;
using System;
using System.Linq;

public class RemoveFileOwnerSample
{
    public void RemoveFileOwner(
        string bucketName = "your-unique-bucket-name",
        string objectName = "your-object-name",
        string userEmail = "dev@iam.gserviceaccount.com")
    {
        var storage = StorageClient.Create();
        var storageObject = storage.GetObject(bucketName, objectName, new GetObjectOptions { Projection = Projection.Full });
        if (storageObject.Acl == null)
        {
            Console.WriteLine("No owner to remove");
        }
        else
        {
            storageObject.Acl = storageObject.Acl.Where((acl) => !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")).ToList();
            var updatedObject = storage.UpdateObject(storageObject);
            Console.WriteLine($"Removed user {userEmail} from file {objectName}.");
        }
    }
}

Go

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Go.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:

import (
	"context"
	"fmt"

	"cloud.google.com/go/storage"
)

// addFileOwner adds ACL to the specified object.
func addFileOwner(bucket, object string, entity storage.ACLEntity) error {
	// bucket := "bucket-name"
	// object := "object-name"
	// entity := storage.AllUsers
	role := storage.RoleOwner

	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	acl := client.Bucket(bucket).Object(object).ACL()
	if err := acl.Set(ctx, entity, role); err != nil {
		return fmt.Errorf("ACLHandle.Set: %w", err)
	}
	return nil
}

L'esempio seguente rimuove un ACL da un oggetto:

import (
	"context"
	"fmt"

	"cloud.google.com/go/storage"
)

// removeFileOwner removes default ACL from the given object.
func removeFileOwner(bucket, object string, entity storage.ACLEntity) error {
	// bucket := "bucket-name"
	// object := "object-name"
	// entity := storage.AllUsers
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	acl := client.Bucket(bucket).Object(object).ACL()
	if err := acl.Delete(ctx, entity); err != nil {
		return fmt.Errorf("ACLHandle.Delete: %w", err)
	}
	return nil
}

Java

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:


import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class AddFileOwner {

  public static void addFileOwner(
      String projectId, String bucketName, String userEmail, String blobName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

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

    // Email of the user you wish to add as a file owner
    // String userEmail = "someuser@domain.com"

    // The name of the blob/file that you wish to modify permissions on
    // String blobName = "your-blob-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Blob blob = storage.get(BlobId.of(bucketName, blobName));
    Acl newOwner = Acl.of(new User(userEmail), Role.OWNER);

    blob.createAcl(newOwner);
    System.out.println(
        "Added user "
            + userEmail
            + " as an owner on file "
            + blobName
            + " in bucket "
            + bucketName);
  }
}

L'esempio seguente rimuove un ACL da un oggetto:


import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class RemoveFileOwner {

  public static void removeFileOwner(
      String projectId, String bucketName, String userEmail, String blobName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

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

    // Email of the user you wish to remove as a file owner
    // String userEmail = "someuser@domain.com"

    // The name of the blob/file that you wish to modify permissions on
    // String blobName = "your-blob-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Blob blob = storage.get(BlobId.of(bucketName, blobName));
    User ownerToRemove = new User(userEmail);

    boolean success = blob.deleteAcl(ownerToRemove);
    if (success) {
      System.out.println(
          "Removed user "
              + userEmail
              + " as an owner on file "
              + blobName
              + " in bucket "
              + bucketName);
    } else {
      System.out.println("User " + userEmail + " was not found");
    }
  }
}

Node.js

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Node.js.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:

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

// The name of the file to access
// const fileName = 'file.txt';

// The email address of the user to add
// const userEmail = 'user-email-to-add';

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

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

async function addFileOwner() {
  await storage
    .bucket(bucketName)
    .file(fileName)
    .acl.owners.addUser(userEmail);

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

addFileOwner().catch(console.error);

L'esempio seguente rimuove un ACL da un oggetto:

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

// The ID of your GCS file
// const fileName = 'your-file-name';

// The email address of the user to remove
// const userEmail = 'user-email-to-remove';

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

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

async function removeFileOwner() {
  // 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}.`);
}

removeFileOwner().catch(console.error);

PHP

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage PHP.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:

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.
 *        (e.g. 'my-bucket')
 * @param string $objectName The name of your Cloud Storage object.
 *        (e.g. 'my-object')
 * @param string $entity The entity for which to update access controls.
 *        (e.g. 'user-example@domain.com')
 * @param string $role The permissions to add for the specified entity.
 *        (e.g. 'OWNER')
 */
function add_object_acl(string $bucketName, string $objectName, string $entity, string $role): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    $acl->add($entity, $role);
    printf('Added %s (%s) to gs://%s/%s ACL' . PHP_EOL, $entity, $role, $bucketName, $objectName);
}

L'esempio seguente rimuove un ACL da un oggetto:

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from an object's ACL.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 * @param string $objectName The name of your Cloud Storage object.
 *        (e.g. 'my-object')
 * @param string $entity The entity for which to update access controls.
 *        (e.g. 'user-example@domain.com')
 */
function delete_object_acl(string $bucketName, string $objectName, string $entity): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    $acl->delete($entity);
    printf('Deleted %s from gs://%s/%s ACL' . PHP_EOL, $entity, $bucketName, $objectName);
}

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Python.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:

from google.cloud import storage

def add_blob_owner(bucket_name, blob_name, user_email):
    """Adds a user as an owner on the given blob."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # user_email = "name@example.com"

    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
        )
    )

L'esempio seguente rimuove un ACL da un oggetto:

from google.cloud import storage

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."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # user_email = "name@example.com"

    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(
        f"Removed user {user_email} from blob {blob_name} in bucket {bucket_name}."
    )

Ruby

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Ruby.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL a un oggetto:

# The ID of your GCS bucket
# bucket_name = "your-unique-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
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.add_owner email

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

L'esempio seguente rimuove un ACL da un oggetto:

# The ID of your GCS bucket
# bucket_name = "your-unique-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
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.delete email

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

API REST

API JSON

Quando crei un oggetto, puoi specificare la proprietà acl[] nel corpo della richiesta o il parametro di query predefinedAcl in una richiesta insert. Per un oggetto esistente, specifica la proprietà acl[] o il parametro di query predefinedAcl in una richiesta patch o update.

Per la definizione della proprietà ACL dell'oggetto, consulta la risorsa ObjectAccessControls.

  1. Definisci gli ACL in un file JSON.

  2. Invia una richiesta patch con il file JSON e specifica l'oggetto su cui impostare gli ACL.

Ad esempio, il seguente comando cURL applica un payload JSON dal documento acls.json a un oggetto denominato paris.jpg nel bucket example-travel-maps:

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

Se l'ACL concede ai proprietari del progetto 867489160491 e all'autorizzazione OWNER dell'utente jane@gmail.com, oltre a concedere ai membri del gruppo gs-announce l'autorizzazione READER, la richiesta sarà simile al seguente esempio:

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"
  }
]
}

API XML

Nell'API XML, puoi utilizzare gli ACL in formato XML. Devi allegare un documento XML al corpo delle richieste di modifica degli ACL di bucket e oggetti. Quando ricevi ACL di bucket e oggetti, viene restituito un documento XML. Il documento XML contiene le singole voci ACL di bucket o oggetti.

  • Dopo aver creato un bucket con una richiesta Bucket PUT, utilizza una seconda richiesta PUT Bucket con il parametro ?acl per modificare l'ACL del bucket.

  • Dopo aver caricato un oggetto con una richiesta PUT Object, cambia l'ACL con un'altra richiesta PUT utilizzando il parametro ?acl o l'intestazione della richiesta x-googl-acl.

Ad esempio, il seguente comando cURL applica un payload XML dal documento acls.xml a un oggetto denominato paris.jpg nel bucket example-travel-maps:

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

Utilizza la seguente sintassi ACL per il documento XML:

Elemento Descrizione
AccessControlList Contenitore per gli elementi Entries e Owner.
Owner Contenitore per gli elementi DisplayName e ID. Questo elemento non è obbligatorio per gli oggetti poiché un oggetto è sempre di proprietà dell'utente che lo ha caricato. Questo elemento viene utilizzato quando la sintassi ACL di Amazon S3 in uno scenario di migrazione.

Amazon Simple Storage Serviceries e Amazon S3 carichi sono marchi di Amazon.com, Inc. o delle sue società consociate negli Stati Uniti e/o in altri paesi.
ID ID Google Cloud Storage del proprietario del bucket.
DisplayName Attualmente non implementato. Il valore è sempre una stringa vuota.
Entries Contenitore per zero o più elementi Entry.
Entry Contenitore per gli elementi Scope e Permission. Un elemento Entry deve contenere solo un elemento Scope e un elemento Permission.
Scope Contenitore di un elemento ID, EmailAddress o Domain che definisce l'ambito ACL. Questo elemento deve avere un attributo type contenente uno dei seguenti valori: UserByID, UserByEmail, GroupByID, GroupByEmail, GroupByDomain, AllUsers o AllAuthenticatedUsers.
ID Un identificatore del beneficiario quando la voce dell'autorizzazione viene specificata tramite ID.
EmailAddress L'identificatore email del beneficiario quando la voce dell'autorizzazione viene specificata tramite email.
Domain L'identificatore di dominio del beneficiario quando la voce dell'autorizzazione è specificata dal dominio.
Name Elemento facoltativo che può essere specificato o aggiunto automaticamente se l'ambito è UserByEmail o GroupByEmail.
Permission L'autorizzazione concessa READ, WRITE o FULL_CONTROL.

Quando si utilizzano gli ACL utilizzando l'API XML:

  • Puoi utilizzare soltanto il formato XML descritto sopra.
  • Non puoi impostare ambiti duplicati.

    Il tuo XML ACL contiene molte voci, ma non puoi avere voci con ambiti duplicati. Ad esempio, non puoi avere due voci con lo stesso elemento di ambito jane@example.com.

L'esempio seguente mostra voci ACL diverse dei bucket:

<?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="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>

Imposta l'elemento Name in ACL XML

Quando recuperi un ACL da un bucket o da un oggetto, potresti notare un elemento <Name> aggiuntivo aggiunto ad alcune voci. Ad esempio, potresti visualizzare una voce simile alla seguente:

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

Questi elementi facoltativi <Name> vengono compilati in due circostanze:

  1. Quando gli ACL del bucket o dell'oggetto includono <Name> come elemento.

    Quando imposti gli ACL, puoi scegliere di includere l'elemento <Name> nelle voci ACL. Puoi fornire qualsiasi valore nell'elemento <Name> e Cloud Storage li memorizza finché l'ACL non viene rimosso o sostituito. Questo approccio può essere utile se utilizzi identificatori non facilmente identificabili, come gli ID di Google Cloud Storage.

  2. Quando un ambito UserByEmail o GroupByEmail contiene un profilo Google pubblico.

    Se utilizzi uno di questi ambiti ma non fornisci un elemento <Name>, Cloud Storage controlla se l'utente o il gruppo Google associato all'indirizzo email ha un profilo Google pubblico con un nome pubblico. In questo caso, Cloud Storage completa automaticamente l'elemento <Name> con il nome pubblico.

Applica un ACL predefinito

Anziché specificare l'intero ACL una voce alla volta, come mostrato sopra, puoi utilizzare un ACL predefinito, che applica automaticamente una serie di voci personalizzate in base a uno scenario specifico. Puoi applicare un ACL predefinito a un bucket o a un oggetto utilizzando Google Cloud CLI, l'API JSON o l'API XML.

Su nuovi oggetti

Per applicare un ACL predefinito a un oggetto durante il caricamento:

Console

Non puoi applicare un ACL predefinito utilizzando la console Google Cloud. Utilizza invece gcloud storage.

riga di comando

gcloud

Utilizza il comando gcloud storage cp con il flag --predefined-acl:

gcloud storage cp OBJECT gs://BUCKET_NAME --predefined-acl=PREDEFINED_ACL

Ad esempio, per applicare l'ACL predefinito bucketOwnerRead durante il caricamento di un oggetto paris.jpg in un bucket example-travel-maps:

gcloud storage cp paris.jpg gs://example-travel-maps --predefined-acl=bucketOwnerRead

gsutil

Utilizza il comando gsutil cp con il flag -a:

gsutil cp -a PREDEFINED_ACL OBJECT gs://BUCKET_NAME

Ad esempio, per applicare l'ACL predefinito bucket-owner-read durante il caricamento di un oggetto paris.jpg in un bucket example-travel-maps:

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

API REST

API JSON

Utilizza il parametro della stringa di query predefinedAcl in una richiesta insert per applicare l'ACL predefinito.

Ad esempio, per applicare l'ACL predefinito bucketOwnerRead durante il caricamento di un oggetto paris.jpg in un bucket example-travel-maps:

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

La richiesta è simile all'esempio seguente:

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

API XML

Utilizza l'intestazione x-goog-acl in una richiesta Metti oggetto per applicare l'ACL predefinito.

Ad esempio, per applicare l'ACL predefinito bucket-owner-read durante il caricamento di un oggetto paris.jpg in un bucket example-travel-maps:

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

La richiesta è simile all'esempio seguente:

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*

Su bucket o oggetti esistenti

Puoi anche applicare un ACL predefinito a un bucket o a un oggetto esistente. Questa soluzione è utile se vuoi passare da un ACL predefinito a un altro o se vuoi aggiornare gli ACL personalizzati in un ACL predefinito.

Console

Non puoi applicare un ACL predefinito utilizzando la console Google Cloud. Utilizza invece gcloud storage.

Riga di comando

gcloud

Utilizza il comando objects update con il flag --predefined-acl:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --predefined-acl=PREDEFINED_ACL_NAME

Ad esempio, per applicare l'ACL predefinito private all'oggetto paris.jpg nel bucket example-travel-maps:

gcloud storage objects update gs://example-travel-maps/paris.jpg --predefined-acl=private

gsutil

Utilizza il comando gsutil acl set per applicare l'ACL predefinito:

gsutil acl set PREDEFINED_ACL gs://BUCKET_NAME/OBJECT_NAME

Ad esempio, per applicare l'ACL predefinito private all'oggetto paris.jpg nel bucket example-travel-maps:

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

API REST

API JSON

Utilizza il parametro della stringa di query predefinedAcl e specifica una proprietà acl vuota in una richiesta patch per applicare l'ACL predefinito.

Ad esempio, per applicare l'ACL predefinito private all'oggetto paris.jpg nel bucket example-travel-maps:

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

La richiesta è simile all'esempio seguente:

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

API XML

Utilizza l'intestazione x-goog-acl con il parametro della stringa di query acl in una richiesta Metti oggetto, ma non includere un documento XML nella richiesta.

Ad esempio, per applicare l'ACL predefinito private all'oggetto paris.jpg nel bucket example-travel-maps:

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

La richiesta è simile all'esempio seguente:

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*

Imposta ACL degli oggetti predefiniti

Per evitare di impostare ACL ogni volta che crei un nuovo oggetto, puoi impostare un ACL dell'oggetto predefinito su un bucket. Dopo aver eseguito questa operazione, a ogni nuovo oggetto aggiunto al bucket a cui non è esplicitamente applicato un ACL verrà applicato il valore predefinito. Ad esempio, potresti voler specificare che solo un determinato gruppo di utenti ha accesso alla maggior parte degli oggetti in un determinato bucket. Puoi modificare l'ACL predefinito dell'oggetto, quindi aggiungere oggetti al bucket. A questi oggetti aggiunti viene applicato automaticamente l'ACL dell'oggetto predefinito che hai specificato. Tuttavia, puoi assegnare ACL diversi a oggetti specifici, nel qual caso a questi oggetti non è applicato l'ACL predefinito.

Per visualizzare e modificare l'ACL predefinito degli oggetti per un bucket:

Console

Non puoi impostare ACL degli oggetti predefiniti utilizzando la console Google Cloud. Utilizza invece gcloud storage.

Riga di comando

gcloud

  1. Utilizza il comando buckets describe con il flag --format per recuperare l'ACL dell'oggetto predefinito per il bucket:

    gcloud storage buckets describe gs://BUCKET_NAME --format="default(default_acl)"

    dove BUCKET_NAME è il nome del bucket di cui vuoi visualizzare l'ACL dell'oggetto predefinito. Ad esempio, my-bucket.

  2. Utilizza il comando buckets update con il flag desiderato per modificare l'ACL dell'oggetto predefinito per il bucket:

    gcloud storage buckets update gs://BUCKET_NAME FLAG

    Dove:

    • BUCKET_NAME è il nome del bucket per il quale l'oggetto predefinito ACL vuoi modificare. Ad esempio, my-bucket.

    • FLAG è uno dei seguenti:

      • --add-default-object-acl-grant e una concessione che vuoi aggiungere all'ACL generale dell'oggetto predefinito per il bucket.

      • --default-object-acl-file e il percorso di un file locale che definisce un nuovo ACL di oggetto predefinito per il bucket.

      • --predefined-default-object-acl e il nome di un ACL dell'oggetto predefinito con cui vuoi sostituire l'ACL dell'oggetto predefinito esistente per il bucket.

      • --remove-default-object-acl-grant e un'entità che vuoi rimuovere dall'ACL generale dell'oggetto predefinito per il bucket.

gsutil

  1. Utilizza gsutil defacl per recuperare l'ACL predefinito dell'oggetto:

    gsutil defacl get gs://BUCKET_NAME
  2. Utilizza gsutil defacl ch o gsutil defacl set per modificare l'ACL predefinito dell'oggetto.

    Ad esempio, il seguente comando aggiunge jane@gmail.com all'ACL dell'oggetto predefinito per un bucket example-travel-maps:

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

    Puoi anche specificare l'ACL dell'oggetto predefinito da un file. Per ulteriori informazioni, consulta la guida per gsutil defacl.

Librerie client

C++

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage C++.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:

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

  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";
}

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:

namespace gcs = ::google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& 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#

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage C#.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene stampato l'ACL dell'oggetto predefinito per un bucket:


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

public class PrintBucketDefaultAclSample
{
    public IEnumerable<ObjectAccessControl> PrintBucketDefaultAcl(string bucketName = "your-unique-bucket-name")
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName, new GetBucketOptions { Projection = Projection.Full });

        foreach (var acl in bucket.DefaultObjectAcl)
        {
            Console.WriteLine($"{acl.Role}:{acl.Entity}");
        }

        return bucket.DefaultObjectAcl;
    }
}

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:


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

public class AddBucketDefaultOwnerSample
{
    public Bucket AddBucketDefaultOwner(
        string bucketName = "your-unique-bucket-name",
        string userEmail = "dev@iam.gserviceaccount.com")
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName, new GetBucketOptions { Projection = Projection.Full });

        bucket.DefaultObjectAcl.Add(new ObjectAccessControl
        {
            Bucket = bucketName,
            Entity = $"user-{userEmail}",
            Role = "OWNER",
        });
        var updatedBucket = storage.UpdateBucket(bucket);
        Console.WriteLine($"Added user {userEmail} as a default owner on bucket {bucketName}.");
        return updatedBucket;
    }
}

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:


using Google.Cloud.Storage.V1;
using System;
using System.Linq;

public class RemoveBucketDefaultOwnerSample
{
    public void RemoveBucketDefaultOwner(
        string bucketName = "your-unique-bucket-name",
        string userEmail = "user@iam.gserviceaccount.com")
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName, new GetBucketOptions { Projection = Projection.Full });
        if (bucket.DefaultObjectAcl == null)
        {
            Console.WriteLine("No default owner to remove");
        }
        else
        {
            bucket.DefaultObjectAcl = bucket.DefaultObjectAcl.Where(acl => !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")).ToList();
            var updatedBucket = storage.UpdateBucket(bucket);
            Console.WriteLine($"Removed user {userEmail} from bucket {bucketName}.");
        }
    }
}

Go

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Go.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:

import (
	"context"
	"fmt"

	"cloud.google.com/go/storage"
)

// addBucketDefaultOwner adds default ACL to the specified bucket.
func addBucketDefaultOwner(bucket string, entity storage.ACLEntity) error {
	// bucket := "bucket-name"
	// entity := storage.AllUsers
	role := storage.RoleOwner

	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	acl := client.Bucket(bucket).DefaultObjectACL()
	if err := acl.Set(ctx, entity, role); err != nil {
		return fmt.Errorf("ACLHandle.Set: %w", err)
	}
	return nil
}

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:

import (
	"context"
	"fmt"

	"cloud.google.com/go/storage"
)

// deleteDefaultBucketACL removes default ACL from a bucket.
func removeBucketDefaultOwner(bucket string, entity storage.ACLEntity) error {
	// bucket := "bucket-name"
	// entity := storage.AllUsers
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	acl := client.Bucket(bucket).DefaultObjectACL()
	if err := acl.Delete(ctx, entity); err != nil {
		return fmt.Errorf("ACLHandle.Delete: %w", err)
	}
	return nil
}

Java

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:


import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class AddBucketDefaultOwner {

  public static void addBucketDefaultOwner(String bucketName, String userEmail) {

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

    // The email of the user you wish to add as a default owner
    // String userEmail = "someuser@domain.com"

    Storage storage = StorageOptions.newBuilder().build().getService();
    Bucket bucket = storage.get(bucketName);
    Acl newDefaultOwner = Acl.of(new User(userEmail), Role.OWNER);

    bucket.createDefaultAcl(newDefaultOwner);
    System.out.println("Added user " + userEmail + " as an owner on " + bucketName);
  }
}

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:


import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class RemoveBucketDefaultOwner {

  public static void removeBucketDefaultOwner(String bucketName, String userEmail) {

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

    // The email of the user you wish to remove as a default owner
    // String userEmail = "someuser@domain.com"

    Storage storage = StorageOptions.newBuilder().build().getService();
    Bucket bucket = storage.get(bucketName);
    User userToRemove = new User(userEmail);

    boolean success = bucket.deleteDefaultAcl(userToRemove);
    if (success) {
      System.out.println("Removed user " + userEmail + " as an owner on " + bucketName);
    } else {
      System.out.println("User " + userEmail + " was not found");
    }
  }
}

Node.js

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Node.js.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:

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

// The email address of the user to add
// const userEmail = 'user-email-to-add';

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

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

async function addBucketDefaultOwner() {
  // 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}.`);
}

addBucketDefaultOwner().catch(console.error);

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:

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

// The email address of the user to remove
// const userEmail = 'user-email-to-remove';

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

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

async function removeBucketDefaultOwner() {
  // 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}.`);
}

removeBucketDefaultOwner().catch(console.error);

PHP

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage PHP.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:

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.
 *        (e.g. 'my-bucket')
 * @param string $entity The entity for which to update access controls.
 *        (e.g. 'user-example@domain.com')
 * @param string $role The permissions to add for the specified entity.
 *        (e.g. 'OWNER')
 */
function add_bucket_default_acl(string $bucketName, string $entity, string $role): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->defaultAcl();
    $acl->add($entity, $role);
    printf('Added %s (%s) to gs://%s default ACL' . PHP_EOL, $entity, $role, $bucketName);
}

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from a bucket's default ACL.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 * @param string $entity The entity for which to update access controls.
 *        (e.g. 'user-example@domain.com')
 */
function delete_bucket_default_acl(string $bucketName, string $entity): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->defaultAcl();
    $acl->delete($entity);
    printf('Deleted %s from gs://%s default ACL' . PHP_EOL, $entity, $bucketName);
}

Python

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Python.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:

from google.cloud import storage

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."""
    # bucket_name = "your-bucket-name"
    # user_email = "name@example.com"

    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
        )
    )

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:

from google.cloud import storage

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."""
    # bucket_name = "your-bucket-name"
    # user_email = "name@example.com"

    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(
        f"Removed user {user_email} from the default acl of bucket {bucket_name}."
    )

Ruby

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Ruby.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene aggiunto un ACL di oggetto predefinito a un bucket:

# The ID of your GCS bucket
# bucket_name = "your-unique-bucket-name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.default_acl.add_owner email

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

L'esempio seguente elimina un ACL di un oggetto predefinito da un bucket:

# The ID of your GCS bucket
# bucket_name = "your-unique-bucket-name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.default_acl.delete email

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

API REST

API JSON

  1. Recupera l'ACL dell'oggetto predefinito con una richiesta GET. Ecco alcuni esempi:

    curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \
        https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?projection=full
    
  2. Utilizza una richiesta patch per sostituire l'ACL dell'oggetto predefinito. Ad esempio, la seguente richiesta sostituisce l'ACL dell'oggetto predefinito con l'ACL specificato in defacls.json per un bucket example-travel-maps:

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

    Esempio di defacls.json:

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

API XML

  1. Recupera l'ACL dell'oggetto predefinito con una richiesta GET limitata al tuo bucket e al parametro ?defaultObjectAcl. Ecco alcuni esempi:

    curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \
        https://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
    
  2. Utilizza una richiesta PUT limitata al tuo bucket con il parametro ?defaultObjectAcl per sostituire l'ACL predefinito dell'oggetto con l'ACL specificato in acls.xml. Ecco alcuni esempi:

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

    Esempio di acls.xml:

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

La sintassi degli ACL viene trattata in Impostazione degli ACL. Puoi inoltre specificare un ACL predefinito come ACL dell'oggetto predefinito.

Per impostare l'ACL dell'oggetto predefinito per un bucket su un ACL predefinito:

Console

Non puoi impostare ACL degli oggetti predefiniti utilizzando la console Google Cloud. Utilizza invece gcloud storage.

Riga di comando

gcloud

Utilizza il comando buckets update con il flag --predefined-default-object-acl:

gcloud storage buckets update gs://BUCKET_NAME --predefined-default-object-acl=PREDEFINED_ACL

Dove:

  • BUCKET_NAME è il nome del bucket per il quale l'oggetto predefinito ACL vuoi modificare. Ad esempio, my-bucket.

  • PREDEFINED_ACL è il nome di un ACL predefinito valido. Ad esempio, projectPrivate.

gsutil

Utilizza il comando gsutil defacl con il nome dell'ACL predefinito.

Ad esempio, per impostare l'ACL predefinito dell'oggetto su project-private per il bucket example-travel-maps:

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

API REST

API JSON

Utilizza una richiesta PUT e il parametro predefinedAcl.

Ecco alcuni esempi:

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

API XML

Utilizza una richiesta PUT limitata al tuo bucket con il parametro ?defaultObjectAcl e l'intestazione x-goog-acl.

Ecco alcuni esempi:

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

ACL degli oggetti predefiniti per i bucket appena creati:

Gli esempi riportati di seguito mostrano gli ACL degli oggetti predefiniti che si applicano automaticamente ai bucket appena creati quando non specifichi gli ACL degli oggetti predefiniti come parte della richiesta. Per verificare se gli ACL degli oggetti predefiniti del bucket sono stati modificati, confronta gli ACL attuali degli oggetti predefiniti del bucket con gli esempi riportati di seguito.

Console

Non puoi utilizzare gli ACL predefiniti degli oggetti utilizzando la console Google Cloud. Usa invece il criterio gcloud storage.

Riga di comando

gcloud

Nell'esempio seguente, l'ID progetto è "123412341234"; l'ID progetto sarà diverso.

defaultObjectAcl:
– entity: project-owners-123412341234
  etag: CAE=
  kind: storage#objectAccessControl
  projectTeam:
    projectNumber: '123412341234'
    team: owners
  role: OWNER
– entity: project-editors-123412341234
  etag: CAE=
  kind: storage#objectAccessControl
  projectTeam:
    projectNumber: '123412341234'
    team: editors
  role: OWNER
– entity: project-viewers-123412341234
  etag: CAE=
  kind: storage#objectAccessControl
  projectTeam:
    projectNumber: '123412341234'
    team: viewers
  role: READER

gsutil

Nell'esempio seguente, l'ID progetto è "123412341234"; l'ID progetto sarà diverso.

[
{
"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"
}
]

API REST

API JSON

Nell'esempio seguente, l'ID progetto è "123412341234"; l'ID progetto sarà diverso.

"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"
    }
  }
]

API XML

Nell'esempio che segue, gli ID del ruolo del progetto iniziano con "00b4903a97..."; gli ID progetto saranno diversi.

<?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>

Tieni presente che l'ACL dell'oggetto predefinito per un bucket appena creato è equivalente all'ACL projectPrivate predefinito.

Recupero degli ACL

Per ottenere l'ACL di una risorsa esistente:

Console

  1. Vai al browser Cloud Storage nella console Google Cloud.
    Vai al browser Cloud Storage

  2. Vai all'oggetto di cui vuoi visualizzare l'ACL.

  3. Scegli Modifica accesso dal menu a discesa relativo all'oggetto.

    Dovresti visualizzare una finestra di dialogo delle autorizzazioni con le autorizzazioni dell'oggetto.

Per informazioni su come ottenere informazioni dettagliate sugli errori delle operazioni di Cloud Storage non riuscite nella console Google Cloud, consulta Risoluzione dei problemi.

Riga di comando

gcloud

  1. Utilizza il comando objects describe con il flag --format per recuperare l'ACL di un oggetto:

    gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME --format="default(acl)"

    Dove:

    • BUCKET_NAME è il nome del bucket contenente l'oggetto di cui vuoi visualizzare l'ACL. Ad esempio, my-bucket.

    • OBJECT_NAME è il nome dell'oggetto di cui vuoi visualizzare l'ACL. Ad esempio, paris.jpg.

gsutil

Utilizza gsutil acl get per restituire l'ACL di un oggetto.

Ad esempio, per restituire l'ACL dell'oggetto paris.jpg nel bucket example-travel-maps:

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

Esempio di risposta:

[
{
    "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"
}
]

Quando gsutil restituisce gli ACL per gli oggetti con gsutil acl get, hanno lo stesso formato JSON che puoi utilizzare per impostare gli ACL. Gli ACL in formato JSON utilizzano i nomi delle proprietà dell'API JSON, come entity e role.

Consulta la sintassi dell'API JSON per ulteriori informazioni su come interpretare l'output o eseguire gsutil help acls.

Librerie client

C++

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage C++.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:

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

  if (!items) throw std::move(items).status();
  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#

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage C#.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:


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

public class PrintFileAclSample
{
    public IEnumerable<ObjectAccessControl> PrintObjectAcl(
        string bucketName = "your-unique-bucket-name",
        string objectName = "your-object-name")
    {
        var storage = StorageClient.Create();
        var storageObject = storage.GetObject(bucketName, objectName, new GetObjectOptions
        {
            Projection = Projection.Full
        });

        foreach (var acl in storageObject.Acl)
        {
            Console.WriteLine($"{acl.Role}:{acl.Entity}");
        }

        return storageObject.Acl;
    }
}

Go

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Go.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/storage"
)

// printFileACL lists ACL of the specified object.
func printFileACL(w io.Writer, bucket, object string) error {
	// bucket := "bucket-name"
	// object := "object-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

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

Java

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:


import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.List;

public class PrintFileAcl {

  public static void printFileAcl(String bucketName, String blobName) {

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

    // The name of the blob/file that you wish to view Acls of
    // String blobName = "your-blob-name";

    Storage storage = StorageOptions.newBuilder().build().getService();
    Blob blob = storage.get(BlobId.of(bucketName, blobName));
    List<Acl> blobAcls = blob.getAcl();

    for (Acl acl : blobAcls) {

      // This will give you the role.
      // See https://cloud.google.com/storage/docs/access-control/lists#permissions
      String role = acl.getRole().name();

      // This will give you the Entity type (i.e. User, Group, Project etc.)
      // See https://cloud.google.com/storage/docs/access-control/lists#scopes
      String entityType = acl.getEntity().getType().name();

      System.out.printf("%s: %s %n", role, entityType);
    }
  }
}

Node.js

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Node.js.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:

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

// The ID of your GCS file
// const fileName = 'your-file-name';

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

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

async function printFileAcl() {
  // 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}`);
  });
}

printFileAcl().catch(console.error);

PHP

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage PHP.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:

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.
 *        (e.g. 'my-bucket')
 * @param string $objectName The name of your Cloud Storage object.
 *        (e.g. 'my-object')
 */
function get_object_acl(string $bucketName, string $objectName): void
{
    $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

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Python.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:

from google.cloud import storage

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(f"{entry['role']}: {entry['entity']}")

Ruby

Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Cloud Storage Ruby.

Per l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta la pagina Configurare l'autenticazione per un ambiente di sviluppo locale.

Nell'esempio seguente viene recuperato un ACL di oggetto:

# The ID of your GCS bucket
# bucket_name = "your-unique-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
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

API REST

API JSON

  1. Assicurati di disporre dell'autorizzazione OWNER per l'oggetto.

  2. Recupera l'ACL dell'oggetto con una richiesta GET.

    L'oggetto ACL viene restituito in formato JSON, allegato al corpo della risposta.

Ad esempio, per restituire l'ACL per l'oggetto paris.jpg nel bucket example-travel-maps:

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

Dovresti vedere una risposta simile al seguente:

{
  "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"
  },
  ...
}

Puoi anche utilizzare il metodo della risorsa objectAccessControls GET per restituire singole voci nell'ACL di un oggetto.

API XML

  1. Assicurati di disporre dell'autorizzazione FULL_CONTROL per il bucket o l'oggetto.

  2. Recupera l'ACL del bucket o dell'oggetto utilizzando il parametro della stringa di query acl in una richiesta GET Object.

Gli ACL sono descritti in XML, allegati al corpo della risposta.

Ad esempio, per restituire l'ACL per l'oggetto paris.jpg nel bucket example-travel-maps:

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

Dovresti vedere una risposta simile al seguente:

<?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>

Puoi anche utilizzare il metodo JSON GET della risorsa ObjectAccessControls per restituire una voce ACL specifica.

Passaggi successivi