Prerequisiti per la disabilitazione delle ACL - Amazon Simple Storage Service

Prerequisiti per la disabilitazione delle ACL

Una lista di controllo degli accessi (ACL) ai bucket in Amazon S3 è un meccanismo che consente di definire autorizzazioni granulari per singoli oggetti all’interno di un bucket S3, specificando quali account AWS o gruppi possono accedere e modificare tali oggetti. La maggior parte degli attuali casi d'uso in Amazon S3 non richiede più l'uso delle ACL. È consigliabile utilizzare policy di bucket e AWS Identity and Access Management (IAM) per gestire l’accesso e mantenere le ACL disabilitate, tranne nelle circostanze in cui è necessario controllare individualmente l’accesso per ciascun oggetto.

Se le ACL sono già abilitate nel bucket, prima di disabilitarle, verifica i seguenti prerequisiti:

Esamina le ACL di bucket e oggetti e migra le autorizzazioni ACL

Quando si disattivano le ACL, le autorizzazioni concesse dalle ACL di bucket e oggetti non influiranno più sull'accesso. Prima di disabilitare le ACL, rivedere le ACL bucket e oggetto.

Ciascuna delle ACL di bucket e di oggetti esistenti ha un equivalente in una policy IAM. I seguenti esempi di policy di bucket mostrano come le autorizzazioni READ e WRITE per le ACL di bucket e di oggetti sono associate alle autorizzazioni IAM. Per ulteriori informazioni su come ogni ACL si traduce in autorizzazioni IAM, consulta Mappatura delle autorizzazioni ACL e delle autorizzazioni della policy di accesso.

Prima di disabilitare le ACL:

  • Se l’ACL del bucket fornisce l’accesso al di fuori dell’account AWS, per prima cosa è necessario migrare le autorizzazioni ACL del bucket alla policy di bucket.

  • Quindi, ripristina l’ACL del bucket sull’ACL privata predefinita.

  • È inoltre consigliabile rivedere le autorizzazioni ACL a livello di oggetto e di migrarle nella policy di bucket.

Se le ACL del bucket forniscono autorizzazioni di lettura o scrittura ad altri utenti esterni all’account, prima di poter disabilitare le ACL è necessario migrare tali autorizzazioni nella policy di bucket. Dopo aver migrato queste autorizzazioni, è possibile impostare Proprietà dell’oggetto sull’impostazione Proprietario del bucket applicato. Se non esegui la migrazione delle ACL del bucket che concedono l'accesso in lettura o scrittura al di fuori del tuo account, la richiesta di applicare l'impostazione Proprietario del bucket applicato non va a buon fine e restituisce il codice di errore InvalidBucketAclWithObjectOwnership.

Se l'ACL del tuo bucket garantisce l'accesso al di fuori del tuo Account AWS, prima di disabilitare le ACL, è necessario migrare le autorizzazioni ACL del bucket alla policy di bucket e reimpostare l'ACL del bucket all'ACL privato predefinito. Se non si esegue la migrazione e il ripristino, la richiesta di applicare l’impostazione Proprietario del bucket applicato per disabilitare le ACL non riesce e restituisce il codice di errore InvalidBucketAclWithObjectOwnership. Ti consigliamo inoltre di rivedere le autorizzazioni ACL dell'oggetto e di migrarle alla policy di bucket.

Per esaminare e migrare le autorizzazioni ACL alle policy di bucket, consultare i seguenti argomenti.

Esempi di policy di bucket

Queste policy di bucket esemplificative mostrano come migrare le autorizzazioni ACL READ e WRITE di bucket e di oggetti per un Account AWS di terze parti ad una policy di bucket. Le ACL READ_ACP e WRITE_ACP sono meno rilevanti per le policy perché concedono autorizzazioni relative all'ACL (s3:GetBucketAcl,s3:GetObjectAcl,s3:PutBucketAcl, es3:PutObjectAcl).

Esempio — READ ACL per un bucket

Se il tuo bucket ha una ACL di lettura che concede all'READ l'autorizzazione Account AWS per elencare il contenuto del bucket, puoi scrivere una policy di bucket che conceda le autorizzazioni 111122223333, s3:ListBucket, per il tuo bucket.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Permission to list the objects in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" } ] }
Esempio — ACL READ per ogni oggetto in un bucket

Se ogni oggetto nel bucket ha una ACL READ che consente l'accesso a Account AWS 111122223333, è possibile scrivere una policy di bucket che conceda le autorizzazioni s3:GetObject e s3:GetObjectVersion  a questo account per ogni oggetto nel tuo bucket.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Read permission for every object in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

Questo elemento di risorsa esemplificativo consente l'accesso a un oggetto specifico.

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"
Esempio — WRITE ACL che concede le autorizzazioni per scrivere oggetti su un bucket

Se il tuo bucket ha una WRITE ACL di scrittura che concede all'autorizzazione Account AWS 111122223333 per scrivere oggetti nel bucket, è possibile scrivere una policy di bucket che conceda l'autorizzazione s3:PutObject per il tuo bucket.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Permission to write objects to a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

Utilizzo della console S3 per esaminare e migrare le autorizzazioni ACL

Per esaminare le autorizzazioni ACL di un bucket
  1. Accedi alla Console di gestione AWS e apri la console di Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Nell'elenco Bucket, seleziona il nome del bucket.

  3. Scegli la scheda Autorizzazioni.

  4. Alla voce Lista di controllo accessi (ACL), controlla le autorizzazioni ACL del bucket.

Per esaminare le autorizzazioni ACL di un oggetto
  1. Accedi alla Console di gestione AWS e apri la console di Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Nell'elenco Buckets (Bucket), scegli il nome del bucket contenente l'oggetto.

  3. Nell'elenco Oggetti scegli il nome dell'oggetto.

  4. Scegli la scheda Autorizzazioni.

  5. Alla voce Lista di controllo accessi (ACL), controlla le autorizzazioni ACL dell'oggetto.

Per migrare le autorizzazioni ACL e aggiornare l'ACL del bucket
  1. Accedi alla Console di gestione AWS e apri la console di Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Nell'elenco Bucket, seleziona il nome del bucket.

  3. Nella sezione Autorizzazioni, alla voce Policy del bucket, scegliere Modifica.

  4. Nella casella Policy, aggiungi o aggiorna la policy del bucket.

    Per le policy di bucket di esempio, consulta Esempi di policy di bucket e Casi d'uso di esempio.

  5. Scegli Save changes (Salva modifiche).

  6. Aggiorna l'ACL del bucket per rimuovere le autorizzazioni ACL ad altri gruppi o Account AWS.

  7. Applica l'impostazione Proprietario del bucket applicato per Proprietà dell'oggetto.

Utilizzo della AWS CLI per esaminare e migrare le autorizzazioni ACL

  1. Per restituire l'ACL del bucket al tuo bucket, utilizza il comando AWS CLI get-bucket-acl:

    aws s3api get-bucket-acl --bucket amzn-s3-demo-bucket

    Ad esempio, questa ACL di bucket concede l'accesso WRITE e READ a un account di terze parti. In questa ACL, l'account di terze parti è identificato dall'ID utente canonico. Per applicare l'impostazione Proprietario del bucket applicato e disabilitare le ACL, è necessario migrare queste autorizzazioni per l'account di terze parti a una policy del bucket.

    { "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "WRITE" } ] }

    Per altre ACL di esempio, consultare Casi d'uso di esempio.

  2. Migrazione delle autorizzazioni ACL del bucket a una policy di bucket:

    Questo esempio di policy di bucket concede autorizzazioni s3:PutObject e s3:ListBucket per un account di terze parti. Nella policy di bucket, l'account di terze parti è identificato dall'ID dell'Account AWS (111122223333).

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { "Version": "2012-10-17" , TCX5-2025-waiver;, "Statement": [ { "Sid": "PolicyForCrossAccountAllowUpload", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

    Per ulteriori policy di bucket esemplificative, consulta Esempi di policy di bucket e Casi d'uso di esempio.

  3. Per restituire l'ACL per un oggetto specifico, utilizza il comando AWS CLI get-object-acl.

    aws s3api get-object-acl --bucket amzn-s3-demo-bucket --key EXAMPLE-OBJECT-KEY
  4. Se necessario, migrare le autorizzazioni ACL degli oggetti alla policy del bucket.

    Questo elemento di risorsa esemplificativo concede l'accesso a un oggetto specifico in una policy di bucket.

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-OBJECT-KEY"
  5. Ripristina l'ACL per il bucket sull'ACL predefinito.

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  6. Applica l'impostazione Proprietario del bucket applicato per Proprietà dell'oggetto.

Identifica tutte le richieste che richiedono una ACL per l'autorizzazione

Per identificare le richieste Amazon S3 che richiedono le ACL per l'autorizzazione, puoi utilizzare il valore aclRequired nei log degli accessi del server Amazon S3 oppure AWS CloudTrail. Se la richiesta richiede un ACL per l'autorizzazione o se sono presenti richieste PUT che specificano un ACL, la stringa è Yes. Se non sono richiesti ACL, se stai impostando un bucket-owner-full-control ACL predefinito o se le richieste sono consentite dalla tua policy del bucket, la stringa di valore aclRequired è "-" nei log di accesso al server Amazon S3 ed è assente in CloudTrail. Per ulteriori informazioni sui valori aclRequired attesi, consulta Valori aclRequired per le richieste di Amazon S3.

Se hai richieste PutBucketAcl o PutObjectAcl con intestazioni che concedono autorizzazioni basate sugli ACL, ad eccezione degli ACL bucket-owner-full-control predefiniti, devi rimuovere tali intestazioni prima di poter disabilitare gli ACL. In caso contrario, le tue richieste non avranno esito positivo.

Per tutte le altre richieste che richiedevano un ACL per l'autorizzazione, migra tali autorizzazioni ACL alle policy dei bucket. Quindi, rimuovi tutti gli ACL del bucket prima di abilitare l'impostazione forzata del proprietario del bucket.

Nota

Non rimuovere gli ACL degli oggetti. In caso contrario, le applicazioni che si basano sugli ACL degli oggetti per le autorizzazioni perderanno l'accesso.

Se vedi che nessuna richiesta richiedeva un ACL per l'autorizzazione, puoi procedere alla disattivazione degli ACL. Per ulteriori informazioni sull'identificazione delle richieste, vedere Utilizzo dei log degli accessi al server Amazon S3 per identificare le richieste eUtilizzo di CloudTrail per identificare le richieste di Amazon S3.

Esamina e aggiorna le policy del bucket che utilizzano chiavi di condizione relative all'ACL

Dopo aver applicato l'impostazione Proprietario del bucket applicato per disabilitare le ACL, i nuovi oggetti possono essere caricati nel bucket solo se la richiesta utilizza ACL di controllo completo del proprietario del bucket o se non specifica un'ACL. Prima di disabilitare le ACL, consulta la policy del bucket per le chiavi di condizione relative all'ACL.

Se la policy del bucket utilizza una chiave di condizione relativa all'ACL per richiedere l'ACL predefinita bucket-owner-full-control (ad esempio s3:x-amz-acl), non è necessario aggiornare la policy del bucket. La seguente policy di bucket utilizza il codice s3:x-amz-acl per richiedere l'ACL predefinita bucket-owner-full-control per le richieste PutObject di S3. Questa policy richiede ancora all'object writer di specificare l'ACL predefinita bucket-owner-full-control. Tuttavia, i bucket con ACL disabilitate accettano ancora questa ACL, quindi le richieste continuano ad avere successo senza bisogno di modifiche sul lato client.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "OnlyAllowWritesToMyBucketWithBucketOwnerFullControl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Tuttavia, se la policy di bucket utilizza una chiave di condizione relativa all'ACL che richiede un'ACL diversa, è necessario rimuovere questa chiave di condizione. Questo esempio di policy di bucket richiede l'ACL public-read per le richieste PutObject di S3 e quindi deve essere aggiornata prima di disabilitare le ACL.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with public read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

Casi d'uso di esempio

Negli esempi seguenti viene illustrato come migrare le autorizzazioni ACL alle policy di bucket per casi d'uso specifici.

Concedere l'accesso al gruppo di consegna di log S3 per la registrazione di log degli accessi al server

Se desideri applicare l'impostazione Proprietario del bucket applicato per disabilitare le ACL per un bucket di destinazione di registrazione di log degli accessi a un server (noto anche come bucket target), è necessario migrare le autorizzazioni ACL bucket per il gruppo di consegna di log S3 al principale del servizio di registrazione di log (logging.s3.amazonaws.com) in una policy del bucket. Per ulteriori informazioni sulle autorizzazioni della distribuzione dei registri, consultare Autorizzazioni per la distribuzione dei registri.

Questa ACL del bucket concede l'accesso WRITE e READ_ACP al gruppo di distribuzione di registri S3:

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "WRITE" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "READ_ACP" } ] }
Per migrare le autorizzazioni ACL del bucket per il gruppo di distribuzione di registri S3 al principale del servizio di registrazione in una policy di bucket
  1. Aggiungi la seguente policy di bucket al bucket di destinazione, sostituendo i valori di esempio.

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { { "Version": "2012-10-17" , TCX5-2025-waiver;, "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-LOGGING-PREFIX*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID" } } } ] }
  2. Ripristina l'ACL per il bucket di destinazione all'ACL predefinita.

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  3. Applica l'impostazione Proprietario del bucket applicato per Proprietà dell'oggetto al bucket di destinazione.

Concedere l'accesso pubblico in lettura agli oggetti nel bucket

Se le ACL di oggetto consentono l'accesso pubblico in lettura a tutti gli oggetti del bucket, è possibile migrare queste autorizzazioni ACL a una policy di bucket.

Questa ACL di oggetto concede l'accesso pubblico in lettura a un oggetto in un bucket:

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }
Per migrare le autorizzazioni ACL di lettura pubblica a una policy di bucket
  1. Per concedere l'accesso in lettura pubblica a tutti gli oggetti nel bucket, aggiungere la seguente policy di bucket, sostituendo i valori di esempio.

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { "Version": "2012-10-17" , TCX5-2025-waiver;, "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

    Per concedere l'accesso pubblico a un oggetto specifico in una policy di bucket, utilizzare il seguente formato per l'elemento Resource.

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"

    Per concedere l'accesso pubblico a tutti gli oggetti con un prefisso specifico, utilizzare il seguente formato per l'elemento Resource.

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/PREFIX/*"
  2. Applica l'impostazione Proprietario del bucket applicato per Proprietà dell'oggetto.

Concedere ad Amazon ElastiCache (Redis OSS) l'accesso al proprio bucket S3

È possibile esportare il backup di ElastiCache (Redis OSS) in un bucket S3, che consente di accedere al backup dall'esterno di ElastiCache. Per esportare il backup in un bucket S3, è necessario concedere ad ElastiCache le autorizzazioni per copiare uno snapshot nel bucket. Se hai concesso le autorizzazioni a ElastiCache in un ACL bucket, è necessario migrare queste autorizzazioni a una policy del bucket prima di applicare l'impostazione Proprietario del bucket applicato per disabilitare le ACL. Per ulteriori informazioni, consulta Concedi a ElastiCache l'accesso al bucket Amazon S3 nella Guida per l'utente di Amazon ElastiCache.

L'esempio seguente mostra le autorizzazioni ACL di bucket che concedono le autorizzazioni a ElastiCache.

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "WRITE" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ_ACP" } ] }
Per migrare le autorizzazioni ACL del bucket per ElastiCache (Redis OSS) a una policy del bucket
  1. Aggiungere la seguente policy di bucket al bucket di destinazione, sostituendo i valori di esempio.

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { "Version": "2012-10-17" , TCX5-2025-waiver;, "Statement": [ { "Sid": "Stmt15399483", "Effect": "Allow", "Principal": { "Service": "Region.elasticache-snapshot.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:GetBucketAcl", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }
  2. Resettare l'ACL per il bucket all'ACL di default:

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  3. Applica l'impostazione Proprietario del bucket applicato per Proprietà dell'oggetto.