ACL (Access Control List)
ACL è l'acronimo di Access Control List, utilizzato per impostare le autorizzazioni su bucket e oggetti ed è pienamente supportato da Cubbit.
Le ACL sono utilizzate per concedere le autorizzazioni a specifici account o gruppi AWS per eseguire azioni specifiche su un bucket o un oggetto. Si possono usare due tipi di ACL:
- ACL per bucket: queste ACL sono utilizzate per concedere le autorizzazioni per le azioni su un bucket.
- ACL per oggetti: queste ACL sono utilizzate per concedere autorizzazioni per azioni su un singolo oggetto all'interno di un bucket.
Concetti principali
Passiamo rapidamente in rassegna alcuni concetti e terminologia principali delle ACL. Parleremo di cosa sono i grantee e di come possono essere identificati, di quali permessi possono essere concessi e di cosa è una canned ACL.
Grantee
Un grantee è l'account o il gruppo AWS a cui viene concessa l'autorizzazione da una ACL. Esistono due modi per identificare un grantee quando si imposta una ACL:
ID di un Progetto Cubbit: è possibile specificare il grantee come ID del Progetto Cubbit, utilizzando il parametro id. Ad esempio:
id=111122223333
.Gruppo predefinito: è possibile specificare il destinatario come gruppo predefinito, utilizzando il parametro uri. Il protocollo S3 fornisce i seguenti gruppi predefiniti:
AuthenticatedUsers
: qualsiasi Progetto Cubbit autenticato.AllUsers
: qualsiasi utente su Internet.
Per specificare un gruppo predefinito, si può usare il parametro uri e l'URL del gruppo. Ad esempio:
uri=http://acs.amazonaws.com/groups/global/AllUsers
.
Permessi che possono essere concessi
Le ACL possono essere utilizzate per concedere i seguenti permessi:
READ
: consente al beneficiario di elencare il contenuto del bucket e di leggere il contenuto degli oggetti.WRITE
: permette di creare, sovrascrivere e cancellare gli oggetti nel bucket.READ_ACP
: permette di leggere l'ACL del bucket.WRITE_ACP
: consente di scrivere l'ACL del bucket.FULL_CONTROL
: consente all'assegnatario di avere tutti i permessi di cui sopra.
WRITE
non può essere applicato agli oggettiIl permesso WRITE
non ha conseguenze sugli oggetti: una volta caricati, nessuna operazione di scrittura può essere effettuata su di loro.
Esempio: una richiesta PutObject
rimpiazzerebbe l'oggetto, o creerebbe una nuova versione in caso di Bucket versionati.
Canned ACL
Il protocollo S3 fornisce anche una serie di ACL predefinite, note come "canned ACL", che possono essere utilizzate per impostare rapidamente autorizzazioni comuni su un bucket o un oggetto. Le ACL predefinite disponibili sono:
private
: concede i permessi solo al proprietario.public-read
: concede i permessi di lettura al gruppo AllUsers, che consiste in qualsiasi utente su Internet.public-read-write
: concede i permessi di lettura e scrittura al gruppo AllUsers, che consiste in qualsiasi utente su Internet.authenticated-read
: concede le autorizzazioni di lettura al gruppo AuthenticatedUsers, che consiste in qualsiasi Progetto Cubbit autenticato.bucket-owner-read
: concede le autorizzazioni di lettura al proprietario del bucket.bucket-owner-full-control
: concede il controllo completo al proprietario del bucket.
API coinvolte
Diverse API S3 sono collegate alle ACL:
GetBucketAcl
: utilizzata per recuperare l'ACL di un bucket.PutBucketAcl
: usato per impostare l'ACL di un bucket.GetObjectAcl
: usato per recuperare l'ACL di un oggetto.PutObjectAcl
: usato per impostare l'ACL di un oggetto.
Limitazioni delle ACL
L'uso delle ACL presenta alcune limitazioni:
- Solo il proprietario di un bucket o di un oggetto può impostare l'ACL. Ciò significa che gli altri utenti non possono concedere autorizzazioni a se stessi o ad altri utilizzando le ACL.
- Le ACL possono concedere autorizzazioni solo a specifici Progetti Cubbit o gruppi predefiniti (come
AuthenticatedUsers
oAllUsers
). - Le ACL si applicano al bucket o all'oggetto nel suo complesso e non possono essere utilizzate per concedere autorizzazioni su base individuale all'interno di un bucket.
Per superare queste limitazioni, è possibile utilizzare l'Ownership Controls per abilitare i controlli di proprietà degli oggetti su un bucket.
Utilizzo
Ecco alcuni esempi di utilizzo delle ACL con la CLI s3api
.
Notare bene che utilizzando l'operazione PutBucketAcl
(o PutObjectAcl
), si sta sovrascrivendo la configurazione esistente.
Se si desidera preservare la configurazione esistente, leggere prima il suo contenuto con l'operazione di GetBucketAcl
(o GetObjectAcl
), annotare i valori desiderati e fornirli in fase di creazione della nuova configurazione.
Leggere l'attuale configurazione collegata ad un Bucket, o un Oggetto
Bucket
aws s3api get-bucket-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket | cat
L'ultima parte del comando (| cat
) è opzionale: permette di stampare il risultato come standard output del terminale
Object
aws s3api get-object-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --key my-object | cat
L'ultima parte del comando (| cat
) è opzionale: permette di stampare il risultato come standard output del terminale
Concessione dei permessi di lettura e scrittura a uno specifico Progetto Cubbit per un bucket
aws s3api put-bucket-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --grant-read id=1111222233 --grant-write id=1111222233
In questo esempio, il comando put-bucket-acl
viene usato per impostare l'ACL per il bucket my-cubbit-bucket
. Il parametro --acl
è impostato su private
, il che significa che solo il proprietario del bucket ha il permesso di accedervi. I parametri --grant-read
e --grant-write
sono usati per concedere i permessi di lettura e scrittura al Progetto Cubbit con ID 111122223333
.
Concessione dei permessi di lettura e scrittura al gruppo di utenti autenticati per un bucket
aws s3api put-bucket-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --grant-read uri=<http://acs.amazonaws.com/groups/global/AuthenticatedUsers> --grant-write uri=<http://acs.amazonaws.com/groups/global/AuthenticatedUsers>
In questo esempio, il comando put-bucket-acl
è usato per impostare l'ACL per il bucket my-bucket
. Il parametro --acl
è impostato su private
, il che significa che solo il proprietario del bucket ha il permesso di accedervi. I parametri --grant-read
e --grant-write
sono usati per concedere i permessi di lettura e scrittura al gruppo AuthenticatedUsers
, che consiste in tutti i Progetti Cubbit autenticati.
Concessione dei permessi di lettura e scrittura al gruppo tutti gli utenti per un oggetto
aws s3api put-object-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --key my-object --acl public-read-write
In questo esempio, il comando put-object-acl
è usato per impostare l'ACL per l'oggetto my-object
nel bucket my-bucket
. Il parametro --acl
corrispondente alla canned ACL è impostato su public-read-write
, il che significa che qualsiasi utente può leggere e scrivere l'oggetto.
Un comando equivalente è il seguente:
aws s3api put-object-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --key my-object --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers --grant-write uri=http://acs.amazonaws.com/groups/global/AllUsers
I parametri --grant-read
e --grant-write
sono usati per concedere i permessi di lettura e scrittura al gruppo AllUsers
, che consiste in qualsiasi utente su Internet.
FAQ
Come posso cambiare nuovamente le ACL di un bucket/oggetto?
Per cambiare le ACL di un bucket o di un oggetto basterà sovrascriverle.
Posso dare lo stesso permesso allo stesso Grantee più volte?
Sì, è possibile dare lo stesso permesso allo stesso Grantee più volte.
Vedi l'utente Luigi dell'esempio sotto.
aws s3api get-bucket-acl --endpoint https://s3.cubbit.eu --profile cubbit --bucket my-cubbit-bucket | cat
{
"Owner": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971"
},
"Grants": [
{
"Grantee": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}
Posso dare i permessi READ
, WRITE
e FULL_CONTROL
allo stesso Grantee?
Sì, è possibile dare i permessi READ
, WRITE
e FULL_CONTROL
allo stesso Grantee.
Vedi l'utente Luigi dell'esempio sotto.
{
"Owner": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971"
},
"Grants": [
{
"Grantee": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "READ"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "WRITE"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}