Quando provo a implementare un bucket Amazon Simple Storage Service (Amazon S3) tramite uno stack AWS CloudFormation, ricevo un errore.
Breve descrizione
Per i bucket appena creati, Amazon S3 attiva ObjectOwnership e lo imposta su BucketOwnerEnforced per impostazione predefinita. Questa impostazione disattiva le liste di controllo degli accessi (ACL) e il proprietario del bucket automaticamente ottiene la titolarità e il pieno controllo su tutti gli oggetti nel bucket. Pertanto, le implementazioni che tentano di richiamare gli ACL con questa impostazione genereranno il seguente errore:
Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting (Service: Amazon S3; Status Code: 400; Error Code: InvalidBucketAclWithObjectOwnership; Request ID: VCC82DDB; S3 Extended Request ID: itIVupTUTYxdhtOqXHTRxiwthYK4I/AvFqgNCWSqs8=; Proxy: null)
Ad esempio, il seguente modello di implementazione genera questo errore:
AWSTemplateFormatVersion: "2010-09-09"
Resources:
PortalBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: LogDeliveryWrite
VersioningConfiguration:
Status: Enabled
WebsiteConfiguration:
IndexDocument: 'index.html'
ErrorDocument: 'error.html'
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
Per risolvere questo problema, modifica il valore di ObjectOwnership per il bucket per consentire gli ACL.
Importante: Non è consigliabile utilizzare gli ACL per Amazon S3. Se il tuo caso d'uso richiede ACL, consulta i seguenti passaggi per la risoluzione dei problemi per consentirli.
Risoluzione
- Imposta il valore di ObjectOwnership su ObjectWriter o BucketOwnerPreferred.
- Per implementare il tuo bucket S3, usa il seguente modello:
AWSTemplateFormatVersion: "2010-09-09"
Resources:
PortalBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: LogDeliveryWrite
VersioningConfiguration:
Status: Enabled
WebsiteConfiguration:
IndexDocument: 'index.html'
ErrorDocument: 'error.html'
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
OwnershipControls:
Rules:
- ObjectOwnership: ObjectWriter
Ciò consente di attivare gli ACL sul bucket.
Per ulteriori informazioni sul comportamento predefinito di Amazon S3 con gli ACL, consulta la sezione Avviso: le modifiche alla sicurezza di Amazon S3 saranno implementate nell'aprile del 2023.