Panoramica delle liste di controllo accessi (ACL) - Amazon Simple Storage Service

Panoramica delle liste di controllo accessi (ACL)

Le liste di controllo accessi (ACL) di Amazon S3 permettono di gestire l'accesso ai bucket e agli oggetti. A ogni bucket e oggetto è associata una ACL come sottorisorsa. Essa definisce a quali Account AWS o gruppi è garantito l'accesso e il tipo di accesso. Quando viene ricevuta una richiesta relativa a una risorsa, Amazon S3 controlla la lista ACL corrispondente per verificare che il richiedente disponga delle autorizzazioni di accesso necessarie.

Per impostazione predefinita, quando un altro Account AWS carica un oggetto nel bucket S3, tale account (l'object writer) possiede l'oggetto, ne ha accesso e può concedere ad altri utenti l'accesso tramite ACL. È possibile utilizzare Object Ownership per modificare questo comportamento di default in modo che le ACL siano disabilitate e che tu, in qualità di proprietario del bucket, possieda automaticamente ogni oggetto nel tuo bucket. Di conseguenza, il controllo degli accessi per i tuoi dati è basato su policy, come policy IAM, policy bucket S3, policy endpoint del cloud privato virtuale (VPC) e policy di controllo dei servizi (SCP) di AWS Organizations.

La maggior parte dei casi d'uso moderni in Amazon S3 non richiede più l'uso di ACL ed è consigliabile disabilitarle tranne in circostanze straordinarie in cui è necessario controllare l'accesso individualmente per ciascun oggetto. Con Object Ownership, è possibile disabilitare le ACL e fare affidamento sulle policy per il controllo degli accessi. Quando si disabilitano le ACL, è possibile mantenere facilmente un bucket con oggetti caricati da diversi Account AWS. In qualità di proprietario del bucket, possiedi tutti gli oggetti nel bucket e puoi gestirne l'accesso utilizzando le policy. Per ulteriori informazioni, consulta Controllo della proprietà degli oggetti e disabilitazione degli ACL per il bucket.

Importante

Se il bucket utilizza l'impostazione proprietario del bucket applicato per S3 Object Ownership, è necessario utilizzare le policy per concedere l'accesso al bucket e agli oggetti in esso contenuti. Le richieste di configurazione o di aggiornamento delle ACL sono respinte e restituiscono il codice di errore AccessControlListNotSupported. Le richieste di lettura delle ACL sono ancora supportate.

Quando crei un bucket o un oggetto, Amazon S3 crea una lista ACL predefinita che concede al proprietario della risorsa il controllo completo su di essa. Questa situazione è illustrata nella seguente ACL del bucket di esempio (l'oggetto ACL predefinito ha la medesima struttura):

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

L'ACL di esempio include un elemento Owner che identifica il proprietario tramite l'ID utente canonico dell'Account AWS. Per istruzioni sulla ricerca dell'ID utente canonico, consulta Ricerca di un ID utente canonico di un Account AWS. L'elemento Grant identifica l'assegnatario (un Account AWS o un gruppo predefinito) e l'autorizzazione concessa. Questa ACL predefinita possiede un elemento Grant per il proprietario. Per concedere le autorizzazioni aggiungere elementi Grant; ognuno di questi elementi identifica l'assegnatario e l'autorizzazione.

Nota

Un ACL può avere fino a 100 di questi elementi.

Che cosa si intende per assegnatario?

Un assegnatario può essere un Account AWS o uno dei gruppi Amazon S3 predefiniti. Per concedere un'autorizzazione a un Account AWS, si utilizza l'indirizzo e-mail o l'ID utente canonico. Se tuttavia specifichi un indirizzo e-mail nella richiesta di concessione, Amazon S3 recupera l'ID utente canonico di tale account e lo aggiunge alla lista ACL. Le ACL risultanti contengono sempre l'ID utente canonico dell'Account AWS e non l'indirizzo e-mail dell'Account AWS.

Quando si concedono i diritti di accesso, si specifica ogni assegnatario come coppia tipo=valore in cui il tipo è uno dei seguenti:

  • id: se il valore specificato è l'ID utente canonico di un Account AWS

  • uri - Se si concedono autorizzazioni a un gruppo predefinito

  • emailAddress: se il valore specificato è l'indirizzo e-mail di un Account AWS

Importante

L'utilizzo di indirizzi e-mail per specificare un assegnatario è supportato soltanto nelle seguenti Regioni AWS:

  • Stati Uniti orientali (Virginia settentrionale)

  • Stati Uniti occidentali (California settentrionale)

  • Stati Uniti occidentali (Oregon)

  • Asia Pacifico (Singapore)

  • Asia Pacifico (Sydney)

  • Asia Pacifico (Tokyo)

  • Europa (Irlanda)

  • Sud America (San Paolo)

Per un elenco di tutti gli endpoint e le regioni Amazon S3 supportati, consulta Regioni ed endpoint nei Riferimenti generali di Amazon Web Services.

Esempio: indirizzo e-mail

Ad esempio, l'intestazione x-amz-grant-read seguente concede agli Account AWS identificati dagli indirizzi e-mail le autorizzazioni per leggere i dati degli oggetti e i relativi metadati:

x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com"
avvertimento

Quando concedi l'accesso alle tue risorse ad altri Account AWS, tieni presente che tutti gli Account AWS possono delegare le autorizzazioni agli utenti sotto i loro account. Questa operazione è nota con il nome di accesso multiaccount. Per informazioni sull'utilizzo dell'accesso multiaccount, consulta Creazione di un ruolo per delegare le autorizzazioni a un utente IAM nella Guida per l'utente di IAM.

Ricerca di un ID utente canonico di un Account AWS

L'ID utente canonico è associato al tuo Account AWS. Questo ID è una stringa di caratteri lunga, ad esempio 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be. Per informazioni su come trovare l'ID utente canonico per l'account, consulta Ricerca dell'ID utente canonico per l'Account AWS.

Puoi inoltre cercare l'ID utente canonico di un Account AWS leggendo l'ACL di un bucket o di un oggetto per cui l'Account AWS dispone delle autorizzazioni di accesso. Quando si concedono autorizzazioni a un singolo Account AWS tramite una richiesta di concessione, una voce apposita viene aggiunta all'ACL con l'ID utente canonico dell'account.

Nota

Se rendi pubblico il bucket (non consigliato) qualsiasi utente non autenticato può caricare oggetti nel bucket. Questi utenti anonimi non dispongono di un Account AWS. Quando un utente anonimo carica un oggetto nel tuo bucket Amazon S3 aggiunge un ID utente canonico speciale (65a011a29cdf8ec533ec3d1ccaae921c) in quanto proprietario dell'oggetto nell'ACL. Per ulteriori informazioni, consulta Proprietà di bucket e oggetti di Amazon S3.

Gruppi predefiniti di Amazon S3

Amazon S3 include un set di gruppi predefiniti. Quando si concede l'accesso a un gruppo a livello di account, viene specificato uno dei nostri URI anziché un ID utente canonico. Forniamo i seguenti gruppi predefiniti:

  • Gruppo Authenticated Users – Rappresentato da http://acs.amazonaws.com/groups/global/AuthenticatedUsers.

    Questo gruppo rappresenta tutti gli Account AWS. L'autorizzazione di accesso per questo gruppo consente a qualsiasi Account AWS di accedere alla risorsa. Tuttavia, tutte le richieste devono essere firmate (autenticate).

    avvertimento

    Quando si concede l'accesso al gruppo Utenti autenticati, qualsiasi utente autenticato AWS al mondo può accedere alla risorsa.

  • Gruppo All Users – Rappresentato da http://acs.amazonaws.com/groups/global/AllUsers.

    L'autorizzazione di accesso per questo gruppo consente a qualsiasi persona al mondo di accedere alla risorsa. Le richieste possono essere firmate (autenticate) o non firmate (anonime). Le richieste non firmate mancano dell'intestazione di autenticazione.

    avvertimento

    È vivamente consigliato non concedere mai al gruppo All Users autorizzazioni WRITE, WRITE_ACP o FULL_CONTROL. Ad esempio, mentre le autorizzazioni WRITE non consentono ai non proprietari di sovrascrivere o eliminare oggetti esistenti, le autorizzazioni WRITE consentono comunque a chiunque di memorizzare oggetti nel bucket, per i quali vengono fatturati. Per ulteriori dettagli su queste autorizzazioni, consulta la sezione Quali autorizzazioni è possibile concedere?.

  • Gruppo Log Delivery – Rappresentato da http://acs.amazonaws.com/groups/s3/LogDelivery.

    L'autorizzazione WRITE per un bucket consente a questo gruppo di scriver log di credenziali d'accesso al server (consulta Registrazione delle richieste con registrazione dell'accesso al server) per il bucket.

Nota

Quando utilizzi le ACL, un assegnatario può essere un Account AWS o uno dei gruppi predefiniti di Amazon S3. Tuttavia, l'assegnatario non può essere un utente IAM. Per ulteriori informazioni sugli utenti AWS e sulle autorizzazioni in IAM, consulta Utilizzo di AWS Identity and Access Management.

Quali autorizzazioni è possibile concedere?

La seguente tabella elenca il set di autorizzazioni che Amazon S3 supporta in una lista ACL. L'insieme di autorizzazioni ACL è lo stesso per le ACL degli oggetti e dei bucket. Tuttavia, a seconda del contesto (bucket ACL o oggetto ACL), queste autorizzazioni si riferiscono a specifiche operazioni sui bucket o sugli oggetti. La tabella elenca le autorizzazioni e ne descrive il significato nel contesto degli oggetti e dei bucket.

Per ulteriori informazioni sulle autorizzazioni ACL nella console Amazon S3, consulta Configurazione delle ACL.

Autorizzazioni ACL
Autorizzazione Concessione a livello di bucket Concessione a livello di oggetto
READ Consente all'assegnatario di elencare gli oggetti del bucket. Consente all'assegnatario di leggere i dati dell'oggetto e i relativi metadata
WRITE Consente all'assegnatario di creare nuovi oggetti del bucket. Per i proprietari di bucket e oggetti di oggetti esistenti, consente anche di eliminare e sovrascrivere tali oggetti. Non applicabile.
READ_ACP Consente all'assegnatario di leggere l'ACL del bucket Consente all'assegnatario di leggere l'ACL dell'oggetto
WRITE_ACP Consente all'assegnatario di scrivere l'ACL del bucket interessato Consente all'assegnatario di scrivere l'ACL dell'oggetto interessato
FULL_CONTROL Concede all'assegnatario le autorizzazioni READ, WRITE, READ_ACP e WRITE_ACP sul bucket Concede all'assegnatario le autorizzazioni READ, READ_ACP e WRITE_ACP sull'oggetto
avvertimento

Prestare attenzione a concedere le autorizzazioni di accesso ai bucket e agli oggetti S3. Ad esempio, la concessione dell'accesso WRITE a un bucket consente all'assegnatario di creare oggetti nel bucket. È vivamente consigliato di leggere tutta questa sezione Panoramica delle liste di controllo accessi (ACL) prima di concedere autorizzazioni.

Mappatura delle autorizzazioni ACL e delle autorizzazioni della policy di accesso

Come illustrato nella tabella precedente, un'ACL concede solo un insieme finito di autorizzazioni rispetto al numero di autorizzazioni che possono essere definite in una policy d'accesso predefinita (consulta Operazioni di Amazon S3). Ognuna di queste autorizzazioni permette di eseguire una o più operazioni di Amazon S3.

La seguente tabella mostra come ogni autorizzazione ACL è mappata sulle autorizzazioni corrispondenti della policy d'accesso predefinita. Come si può vedere, la policy di accesso predefinita concede un numero maggiore di autorizzazioni rispetto all'ACL. Le ACL possono essere utilizzate principalmente per concedere autorizzazioni di base di lettura/scrittura, analogamente alle autorizzazioni sul file system. Per ulteriori informazioni su quando utilizzare una lista ACL, consulta Linee guida per le policy di accesso.

Per ulteriori informazioni sulle autorizzazioni ACL nella console Amazon S3, consulta Configurazione delle ACL.

Autorizzazione ACL Autorizzazioni corrispondenti della policy d'accesso predefinita quando l'autorizzazione ACL viene concessa su un bucket Autorizzazioni corrispondenti della policy d'accesso predefinita quando l'autorizzazione ACL viene concessa su un oggetto
READ s3:ListBucket, s3:ListBucketVersions e s3:ListBucketMultipartUploads s3:GetObject e s3:GetObjectVersion
WRITE

s3:PutObject

Il proprietario del bucket può creare, sovrascrivere ed eliminare qualsiasi oggetto nel bucket e il proprietario dell'oggetto ha FULL_CONTROL sull'oggetto.

Inoltre, quando l'assegnatario è il proprietario del bucket, la concessione dell'autorizzazione WRITE nell'ACL di un bucket consente l'esecuzione dell'operazione s3:DeleteObjectVersion su qualsiasi versione del bucket.

Non applicabile.
READ_ACP s3:GetBucketAcl s3:GetObjectAcl e s3:GetObjectVersionAcl
WRITE_ACP s3:PutBucketAcl s3:PutObjectAcl e s3:PutObjectVersionAcl
FULL_CONTROL Equivale alla concessione delle autorizzazioni ACL READ, WRITE, READ_ACP e WRITE_ACP. Di conseguenza, questa autorizzazione ACL è mappata su una combinazione delle autorizzazioni corrispondenti della policy d'accesso predefinita. Equivale alla concessione delle autorizzazioni ACL READ, READ_ACP e WRITE_ACP. Di conseguenza, questa autorizzazione ACL è mappata su una combinazione delle autorizzazioni corrispondenti della policy d'accesso predefinita.

Chiavi di condizione

Quando si concedono autorizzazioni per le policy di accesso, è possibile utilizzare le chiavi di condizione per limitare il valore dell'ACL su un oggetto utilizzando una policy del bucket. Le chiavi di contesto riportate di seguito corrispondono alle ACL. È possibile utilizzare queste chiavi di contesto per richiedere l'utilizzo di un'ACL specifica in una richiesta:

  • s3:x-amz-grant-read – Richiedere l'accesso in lettura.

  • s3:x-amz-grant-write – Richiedere l'accesso in scrittura.

  • s3:x-amz-grant-read-acp – Richiedere l'accesso in lettura alla lista ACL del bucket.

  • s3:x-amz-grant-write-acp ‐ Richiedere l'accesso in scrittura alla lista ACL del bucket.

  • s3:x-amz-grant-full-control – Richiedere il controllo completo.

  • s3:x-amz-acl – Richiedere una lista ACL predefinita.

Per policy di esempio con intestazioni specifiche delle liste ACL, consulta Esempio 1: assegnazione di autorizzazione s3:PutObject con la condizione che richiede che il proprietario del bucket abbia il controllo completo. Per un elenco completo delle chiavi di condizione specifiche di Amazon S3, consulta Operazioni, risorse e chiavi di condizione per Amazon S3.

ACL di esempio

La seguente ACL di esempio su un bucket identifica il proprietario della risorsa e un insieme di concessioni. Il suo formato è la rappresentazione XML di una lista ACL in REST API di Amazon S3. Il proprietario del bucket ha il FULL_CONTROL della risorsa. La lista ACL mostra inoltre come vengono concesse le autorizzazioni per una risorsa a due Account AWS, identificati dall'ID utente canonico, e a due gruppi predefiniti di Amazon S3, illustrati nella sezione precedente.

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user1-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>WRITE</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user2-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

ACL predefinita

Amazon S3 supporta un set di concessioni predefinite, dette liste ACL predefinite. Ogni ACL predefinita ha un insieme predefinito di assegnatari e autorizzazioni. La seguente tabella elenca l'insieme di ACL predefinite e le concessioni predefinite associate.

ACL predefinita Si applica a Autorizzazioni aggiunte a un'ACL
private Bucket e oggetto Il proprietario ottiene il FULL_CONTROL. Nessun altro ha diritti di accesso (impostazione predefinita).
public-read Bucket e oggetto Il proprietario ottiene il FULL_CONTROL. Il gruppo AllUsers (consulta Che cosa si intende per assegnatario?) ottiene l'accesso READ.
public-read-write Bucket e oggetto Il proprietario ottiene il FULL_CONTROL. Il gruppo AllUsersottiene l'accesso READ e WRITE. In genere la concessione di queste autorizzazioni su un bucket non è consigliata.
aws-exec-read Bucket e oggetto Il proprietario ottiene il FULL_CONTROL. Amazon EC2 ottiene l'accesso di tipo READ per la richiesta GET con cui ottenere un bundle Amazon Machine Image (AMI) da Amazon S3.
authenticated-read Bucket e oggetto Il proprietario ottiene il FULL_CONTROL. Il gruppo AuthenticatedUsers ottiene l'accesso READ.
bucket-owner-read Oggetto Il proprietario dell'oggetto ottiene il FULL_CONTROL. Il proprietario del bucket ottiene l'accesso READ. Se specifichi questa lista ACL predefinita durante la creazione di un bucket, Amazon S3 la ignora.
bucket-owner-full-control Oggetto Sia il proprietario dell'oggetto che il proprietario del bucket ottengono il FULL_CONTROL dell'oggetto. Se specifichi questa lista ACL predefinita durante la creazione di un bucket, Amazon S3 la ignora.
log-delivery-write Bucket Il gruppo LogDelivery ottiene le autorizzazioni WRITE e READ_ACP sul bucket. Per ulteriori informazioni sui log, consulta (Registrazione delle richieste con registrazione dell'accesso al server).
Nota

È possibile specificare solo una di queste ACL predefinite nella richiesta.

Per specificare un'ACL predefinita nella richiesta si utilizza l'intestazione di richiesta x-amz-acl. Quando Amazon S3 riceve una richiesta contenente una lista ACL predefinita, aggiunge le concessioni predefinite alla lista ACL della risorsa.