Questa pagina fornisce una panoramica degli elenchi di controllo dell'accesso (ACL), che ti consentono di controllare l'accesso a singoli bucket o oggetti. Per scoprire altri modi per controllare l'accesso a bucket e oggetti, leggi Panoramica del controllo dell'accesso.
Devi utilizzare gli elenchi di controllo dell'accesso?
Nella maggior parte dei casi, devi evitare di utilizzare gli ACL e devi attivare l'accesso uniforme a livello di bucket per i tuoi bucket, il che impedisce l'utilizzo degli ACL:
- Gli ACL non possono essere utilizzati esclusivamente per controllare l'accesso alle tue risorse Google Cloud, perché non possono essere impostati sul progetto complessivo o sulle risorse al di fuori di Cloud Storage.
- L'attivazione dell'accesso uniforme a livello di bucket crea una superficie di controllo dell'accesso più semplice e consente di utilizzare funzionalità Google Cloud aggiuntive. Per saperne di più, consulta la sezione Quando utilizzare l'accesso uniforme a livello di bucket.
- Il criterio dell'organizzazione Condivisione limitata dei domini e i criteri dell'organizzazione personalizzati non impediscono l'accesso concesso dagli elenchi di controllo dell'accesso, il che potrebbe portare a un accesso non intenzionale.
- Quando utilizzi gli elenchi di controllo degli accessi in progetti in cui sono impostate condizioni IAM a livello di progetto o superiore, possono verificarsi comportamenti e accessi imprevisti.
Probabilmente vorrai utilizzare gli ACL nei seguenti casi:
- Devi personalizzare l'accesso ai singoli oggetti all'interno di un bucket, ad esempio se vuoi che chi carica un oggetto abbia il controllo completo su quell'oggetto, ma meno accesso ad altri oggetti nel bucket.
- Utilizzi esclusivamente l'API XML o richiedi l'interoperabilità con Amazon S3.
Che cos'è un elenco di controllo dell'accesso?
Un elenco di controllo dell'accesso (ACL) è un meccanismo che puoi utilizzare per definire chi ha accesso ai tuoi bucket e ai tuoi oggetti, nonché il livello di accesso. In Cloud Storage, applichi gli ACL a singoli bucket e oggetti. Ogni ACL è composta da una o più voci. Una voce concede a un utente (o gruppo) specifico la possibilità di eseguire azioni specifiche. Ogni voce è composta da due tipi di informazioni:
Un'autorizzazione, che definisce quali azioni possono essere eseguite (ad esempio, lettura o scrittura).
Un ambito (a volte chiamato beneficiario), che definisce chi può eseguire le azioni specificate (ad esempio, un utente o un gruppo di utenti specifico).
Ad esempio, supponiamo di avere un bucket da cui vuoi che chiunque possa accedere agli oggetti, ma vuoi anche che il tuo collaboratore possa aggiungere o rimuovere oggetti dal bucket. In questo caso, la tua ACL sarà composta da due voci:
In una voce, concedi l'autorizzazione
READER
a un ambito diallUsers
.Nell'altra voce, concedi l'autorizzazione
WRITER
all'ambito del tuo collaboratore (esistono diversi modi per specificare questa persona, ad esempio tramite il suo indirizzo email).
Il numero massimo di voci ACL che puoi creare per un bucket o un oggetto è 100. Quando l'ambito della voce è un gruppo o un dominio, viene conteggiato come una voce ACL indipendentemente dal numero di utenti nel gruppo o nel dominio.
Quando un utente richiede l'accesso a un bucket o a un oggetto, il sistema Cloud Storage legge l'ACL del bucket o dell'oggetto e determina se consentire o rifiutare la richiesta di accesso. Se la ACL concede all'utente l'autorizzazione per l'operazione richiesta, la richiesta viene consentita. Se la ACL non concede all'utente l'autorizzazione
per l'operazione richiesta, la richiesta non va a buon fine e viene restituito un errore 403 Forbidden
.
Tieni presente che, sebbene gli ACL possano essere utilizzati per gestire la maggior parte delle azioni che coinvolgono bucket e oggetti, la possibilità di creare un bucket deriva dall'autorizzazione di progetto appropriata.
Autorizzazioni
Le autorizzazioni descrivono cosa può essere fatto a un determinato oggetto o bucket.
Cloud Storage consente di assegnare le seguenti autorizzazioni concentriche per i bucket e gli oggetti, come mostrato nella tabella seguente:
Bucket | Oggetti | |
---|---|---|
READER |
Consente a un utente di elencare i contenuti di un bucket. Consente inoltre a un utente di leggere i metadati del bucket, esclusi gli ACL. | Consente a un utente di scaricare i dati di un oggetto. |
WRITER |
Concede a un utente tutto l'accesso concesso dall'autorizzazione
READER . Consente inoltre a un utente di creare, sostituire ed eliminare
oggetti in un bucket, inclusa la creazione di oggetti utilizzando caricamenti
multiparte. |
N/D. Non puoi applicare questa autorizzazione agli oggetti. |
OWNER |
Concede a un utente tutto l'accesso concesso dall'autorizzazione
WRITER . Consente inoltre a un utente di leggere e scrivere i metadati del bucket,
inclusi gli ACL, e di lavorare con i tag sul bucket. |
Concede a un utente tutto l'accesso concesso dall'autorizzazione
READER . Consente inoltre a un utente di leggere e scrivere i metadati degli oggetti,
inclusi gli ACL. |
Predefinito | I bucket hanno l'ACL project-private predefinita applicata al momento della creazione. I bucket sono sempre di proprietà del gruppo project-owners . |
Agli oggetti viene applicato l'ACL project-private predefinito al momento del caricamento. Gli oggetti sono sempre di proprietà del richiedente originale che li ha caricati. |
In questa pagina, in genere ci riferiamo alle autorizzazioni come READER
, WRITER
e OWNER
, che sono il modo in cui vengono specificate nell'API JSON e nella
consoleGoogle Cloud . Se utilizzi l'API XML, le autorizzazioni equivalenti
sono rispettivamente READ
, WRITE
e FULL_CONTROL
.
Ambiti
Gli ambiti specificano chi dispone di una determinata autorizzazione.
Un ACL è costituito da una o più voci, dove ogni voce concede autorizzazioni a un ambito. Puoi specificare un ambito ACL utilizzando una delle seguenti entità:
Ambito ("beneficiario") | Tipo/i di entità | Esempio |
---|---|---|
Identificatore speciale per tutte le entità | Utente | allUsers |
Identificatore speciale per tutti gli account validi | Utente | allAuthenticatedUsers |
Indirizzo email dell'account utente | Utente | jeffersonloveshiking@gmail.com |
Indirizzo email dell'account di servizio | Utente | my-service-account@my-project.iam.gserviceaccount.com |
Indirizzo email del gruppo Google | Gruppo | work-group@googlegroups.com |
Valori di convenienza per i progetti | Progetto | owners-123456789012 |
Dominio Google Workspace | Dominio | dana@example.com |
Dominio Cloud Identity | Dominio | dana@example.com |
Identificatore speciale per tutte le entità:
L'identificatore di ambito speciale
allUsers
rappresenta qualsiasi entità su internet. Tieni presente che, sebbene questo identificatore sia un tipo di entitàUser
, quando utilizzi la console Google Cloud viene etichettato come tipo di entitàPublic
.Identificatore speciale per tutti gli account validi:
L'identificatore di ambito speciale
allAuthenticatedUsers
rappresenta la maggior parte degli account autenticati, inclusi i service account. Per ulteriori informazioni, consulta Entità IAM. Tieni presente che, sebbene questo identificatore sia un tipo di entitàUser
, quando utilizzi la console Google Cloud viene etichettato come tipo di entitàPublic
.Indirizzo email dell'account utente:
Ogni utente che dispone di un account utente deve avere un indirizzo email univoco associato a quell'account. Puoi specificare un ambito utilizzando qualsiasi indirizzo email associato a un account utente.
Cloud Storage memorizza gli indirizzi email così come vengono forniti nelle ACL finché le voci non vengono rimosse o sostituite. Se un utente modifica gli indirizzi email, devi aggiornare le voci ACL in modo che riflettano queste modifiche.
Indirizzo email dell'account di servizio:
Ogni service account ha un indirizzo email univoco associato. Puoi specificare un ambito utilizzando l'indirizzo email associato al service account.
Indirizzo email del gruppo Google:
Ogni gruppo Google ha un indirizzo email univoco associato al gruppo. Ad esempio, il gruppo Cloud Storage Announce ha il seguente indirizzo email: gs-announce@googlegroups.com. Puoi trovare l'indirizzo email associato a un gruppo Google facendo clic su Informazioni nella home page di ogni gruppo Google.
Come gli indirizzi email degli account utente, Cloud Storage memorizza gli indirizzi email di gruppo così come vengono forniti negli ACL finché le voci non vengono rimosse. Non devi preoccuparti di aggiornare gli indirizzi email di Google Gruppi, perché sono permanenti e difficilmente cambiano.
Valori di convenienza per i progetti:
I valori di praticità ti consentono di concedere l'accesso collettivo a visualizzatori, editor e proprietari del tuo progetto. I valori di praticità combinano un ruolo del progetto e un numero di progetto associato. Ad esempio, nel progetto
867489160491
, gli editor sono identificati comeeditors-867489160491
. Puoi trovare il numero del tuo progetto nella home page di Google Cloud console.In genere, è consigliabile evitare di utilizzare valori di convenienza negli ambienti di produzione, perché richiedono la concessione di ruoli di base, una pratica sconsigliata negli ambienti di produzione.
Google Workspace o Cloud Identity:
I clienti di Google Workspace e Cloud Identity possono associare i propri account email a un nome di dominio internet. In questo modo, ogni account email assume la forma USERNAME@YOUR_DOMAIN.com. Puoi specificare un ambito utilizzando qualsiasi nome di dominio internet associato a Google Workspace o Cloud Identity.
Autorizzazioni e ambiti concentrici
Quando specifichi gli ACL in Cloud Storage, non devi elencare più ambiti per concedere più autorizzazioni. Cloud Storage utilizza autorizzazioni
concentriche, quindi quando concedi l'autorizzazione WRITER
, concedi anche l'autorizzazione READER
e se concedi l'autorizzazione OWNER
, concedi anche le autorizzazioni READER
e
WRITER
.
Quando specifichi un ACL, la maggior parte degli strumenti ti consente di
specificare più ambiti per la stessa voce. L'autorizzazione più permissiva è
l'accesso concesso all'ambito. Ad esempio, se fornisci due voci per un utente, una con l'autorizzazione READER
e una con l'autorizzazione WRITER
su un bucket, l'utente avrà l'autorizzazione WRITER
sul bucket.
Nell'API XML non è possibile fornire due voci ACL con lo stesso
ambito. Ad esempio, la concessione delle autorizzazioni READ
e WRITE
per un bucket genera un errore. Concedi invece all'utente l'autorizzazione WRITE
, che
concede anche l'autorizzazione READ
.
ACL e IAM
Identity and Access Management (IAM) e gli ACL funzionano in tandem per concedere l'accesso ai bucket e agli oggetti, il che significa che un utente ha bisogno solo dell'autorizzazione pertinente di uno di questi sistemi per accedere a un bucket o a un oggetto. In generale, le autorizzazioni concesse dai criteri IAM non vengono visualizzate negli ACL e le autorizzazioni concesse dagli ACL non vengono visualizzate nei criteri IAM. Per saperne di più, consulta la sezione Relazione tra IAM e ACL.
Comportamento con il rifiuto IAM
Un criterio di negazione IAM sostituisce qualsiasi accesso applicabile che altrimenti verrebbe concesso da un ACL che hai impostato, quando il criterio di negazione e l'ACL hanno come target la stessa autorizzazione.
Ad esempio, se un bucket ha un criterio di negazione che impedisce a un utente di disporre
dell'autorizzazione storage.objects.get
e crei un ACL che concede all'utente
il ruolo READER
su un oggetto all'interno del bucket, l'utente non
potrà visualizzare l'oggetto nel bucket. Tuttavia, se il criterio di negazione
specifica l'autorizzazione storage.buckets.get
e l'ACL concede il
ruolo WRITER
sul bucket, l'utente non potrà recuperare i
metadati del bucket, ma potrà comunque elencare, creare ed eliminare oggetti nel bucket.
ACL predefinite
Un ACL predefinito, a volte noto anche come ACL preimpostato, è un alias per un insieme di voci ACL specifiche che puoi utilizzare per applicare rapidamente molte voci ACL contemporaneamente a un bucket o a un oggetto.
La tabella seguente elenca gli ACL predefiniti e mostra quali voci ACL vengono applicate per ogni ACL predefinito. Quando utilizzi la tabella riportata di seguito, tieni presente che:
Il gruppo dei proprietari del progetto è proprietario dei bucket del progetto e l'utente che crea un oggetto ne è proprietario. Se un oggetto è stato creato da un utente anonimo, il gruppo dei proprietari del progetto ne ha la proprietà.
Nella tabella vengono utilizzate le descrizioni delle autorizzazioni dell'API JSON,
OWNER
,WRITER
eREADER
. Gli ambiti API XML equivalenti sonoFULL_CONTROL
,WRITE
eREAD
.API JSON/ gcloud storage
API XML Descrizione private
private
Concede al proprietario del bucket o dell'oggetto l'autorizzazione OWNER
per un bucket o un oggetto.bucketOwnerRead
bucket-owner-read
Concede l'autorizzazione OWNER
al proprietario dell'oggetto e l'autorizzazioneREADER
al proprietario del bucket. Questo viene utilizzato solo con gli oggetti.bucketOwnerFullControl
bucket-owner-full-control
Concede l'autorizzazione OWNER
ai proprietari dell'oggetto e del bucket. Questo viene utilizzato solo con gli oggetti.projectPrivate
project-private
Concede l'autorizzazione al team del progetto in base ai suoi ruoli. Chiunque faccia parte del team dispone dell'autorizzazione READER
. I proprietari e gli editor dei progetti dispongono dell'autorizzazioneOWNER
. Questo è l'elenco di controllo degli accessi predefinito per i bucket appena creati. Questo è anche l'ACL predefinito per gli oggetti appena creati, a meno che l'ACL oggetto predefinito per quel bucket non sia stato modificato.authenticatedRead
authenticated-read
Concede l'autorizzazione OWNER
al proprietario del bucket o dell'oggetto e l'autorizzazioneREADER
a tutti i titolari di account utente autenticati.publicRead
public-read
Concede l'autorizzazione OWNER
al proprietario del bucket o dell'oggetto e l'autorizzazioneREADER
a tutti gli utenti, autenticati e anonimi. Quando lo applichi a un oggetto, chiunque su internet può leggere l'oggetto senza autenticarsi. Quando lo applichi a un bucket, chiunque su internet può elencare gli oggetti senza autenticarsi.* Consulta la nota alla fine della tabella relativa alla memorizzazione nella cache.
publicReadWrite
public-read-write
Concede al proprietario del bucket l'autorizzazione OWNER
e a tutti gli utenti, autenticati e anonimi, le autorizzazioniREADER
eWRITER
. Questo ACL si applica solo ai bucket. Quando lo applichi a un bucket, chiunque su internet può elencare, creare, sostituire ed eliminare oggetti senza autenticarsi.
* Consulta la nota alla fine della tabella relativa alla memorizzazione nella cache.
* Per impostazione predefinita, gli oggetti leggibili pubblicamente vengono pubblicati con un'intestazione Cache-Control
che consente di memorizzare nella cache gli oggetti per 3600 secondi. Se devi assicurarti che gli aggiornamenti diventino immediatamente visibili, devi impostare i metadati Cache-Control
per gli oggetti su Cache-Control:private, max-age=0, no-transform
.
ACL predefiniti
Quando vengono creati bucket o caricati oggetti, se non assegni esplicitamente un ACL, viene assegnato l'ACL predefinito. Puoi modificare l'ACL predefinito assegnato a un oggetto. La procedura per farlo è descritta in Modificare gli ACL degli oggetti predefiniti. Tieni presente che quando modifichi l'ACL predefinito, gli ACL degli oggetti già esistenti nel bucket o nei bucket già esistenti nel progetto rimangono invariati.
ACL bucket predefinite
Tutti i bucket sono di proprietà del gruppo dei proprietari del progetto. Inoltre, ai proprietari del progetto
viene concessa l'autorizzazione OWNER
per tutti i bucket all'interno del progetto che utilizzano un elenco
di controllo dell'accesso (ACL) predefinito.
Se crei un bucket con l'ACL bucket predefinita, ovvero non
specifichi un'ACL predefinita quando crei il
bucket, al bucket viene applicata l'ACL projectPrivate
predefinita.
ACL oggetto predefiniti
Per impostazione predefinita, chiunque disponga dell'autorizzazione OWNER
o WRITER
per un bucket
può caricare oggetti in quel bucket. Quando carichi un oggetto, puoi fornire
un'ACL predefinita o non specificare alcuna ACL. Se non
specifichi un ACL, Cloud Storage applica all'oggetto l'ACL oggetto predefinito del bucket. Ogni bucket ha un ACL oggetto predefinito, che viene applicato a tutti gli oggetti caricati nel bucket senza un ACL predefinito o un ACL specificato nella richiesta (solo API JSON). Il valore iniziale della ACL oggetto predefinita di
ogni bucket è projectPrivate
.
In base alla modalità di caricamento degli oggetti, gli ACL degli oggetti vengono applicati di conseguenza:
Caricamenti autenticati
Se effettui una richiesta autenticata per caricare un oggetto e non specifichi alcun ACL oggetto durante il caricamento, il tuo nome viene visualizzato come proprietario dell'oggetto e l'ACL
projectPrivate
predefinito viene applicato all'oggetto per impostazione predefinita. Ciò significa che:Tu (la persona che ha caricato l'oggetto) risulti come proprietario dell'oggetto. La proprietà degli oggetti non può essere modificata modificando gli ACL. Puoi modificare la proprietà di un oggetto solo sostituendolo.
A te (il proprietario dell'oggetto) viene concessa l'autorizzazione
OWNER
sull'oggetto. Se tenti di concedere un'autorizzazione inferiore aOWNER
al proprietario, Cloud Storage aumenta automaticamente l'autorizzazione aOWNER
.Il gruppo di proprietari e editor del progetto dispone dell'autorizzazione
OWNER
sull'oggetto.Il gruppo dei membri del team di progetto dispone dell'autorizzazione
READER
per l'oggetto.
Caricamenti anonimi
Se un utente non autenticato (anonimo) carica un oggetto, il che è possibile se un bucket concede al gruppo
allUsers
l'autorizzazioneWRITER
oOWNER
, allora all'oggetto vengono applicate le ACL bucket predefinite come descritto sopra.Gli utenti anonimi non possono specificare un ACL predefinito durante il caricamento dell'oggetto.
Comportamento dell'ACL
Cloud Storage ti aiuta a rispettare le best practice applicando alcune regole di modifica delle ACL, che ti impediscono di impostare ACL che rendono i dati inaccessibili:
Non puoi applicare un ACL che specifica un bucket o un proprietario dell'oggetto diverso.
La proprietà del bucket e dell'oggetto non può essere modificata modificando gli ACL. Se applichi un nuovo ACL a un bucket o a un oggetto, assicurati che il proprietario del bucket o dell'oggetto rimanga invariato nel nuovo ACL.
Il proprietario del bucket o dell'oggetto ha sempre l'autorizzazione
OWNER
del bucket o dell'oggetto.Il proprietario di un bucket è il gruppo di proprietari del progetto, mentre il proprietario di un oggetto è l'utente che ha caricato l'oggetto o il gruppo di proprietari del progetto se l'oggetto è stato caricato da un utente anonimo.
Quando applichi un nuovo ACL a un bucket o a un oggetto, Cloud Storage aggiunge rispettivamente l'autorizzazione
OWNER
al proprietario del bucket o dell'oggetto se ometti le concessioni. Non concede al gruppo di proprietari del progettoOWNER
l'autorizzazione per un oggetto (a meno che l'oggetto non sia stato creato da un utente anonimo), quindi devi includerlo esplicitamente.
Non puoi applicare ACL che modificano la proprietà di un bucket o di un oggetto (che
non deve essere confusa con l'autorizzazione OWNER
). Una volta creata in
Cloud Storage, la proprietà del bucket e dell'oggetto è permanente. Tuttavia, puoi modificare in modo efficace la proprietà degli oggetti (ma non dei bucket) sostituendoli. La sostituzione è fondamentalmente un'operazione di eliminazione seguita immediatamente
da un'operazione di caricamento. Durante un'operazione di caricamento, la persona che esegue
il caricamento diventa proprietaria dell'oggetto. Tieni presente che per sostituire un oggetto, la persona che esegue la sostituzione (e che acquisisce la proprietà dell'oggetto in questo modo) deve disporre dell'autorizzazione WRITER
o OWNER
per il bucket in cui viene caricato l'oggetto.
Passaggi successivi
- Scopri come utilizzare le ACL.
- Scopri come semplificare il controllo dell'accesso utilizzando l'accesso uniforme a livello di bucket.
- Scopri di più sulle best practice per l'utilizzo delle ACL.