Controllo degli accessi S3: policy dei bucket e ACL
Scriverete policy dei bucket, le confronterete con le ACL e configurerete le impostazioni di blocco dell'accesso pubblico per un hosting sicuro.
Controllo degli accessi S3: policy dei bucket e ACL è una lezione Cloud & IT Cert Prep gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.
Panoramica del controllo degli accessi S3
S3 offre diversi meccanismi sovrapposti di controllo degli accessi: policy IAM (basate sull'identità, controllano ciò che i principal possono fare), policy dei bucket (policy JSON basate sulle risorse e applicate al bucket), Access Control Lists (ACL) (concessioni legacy a livello di oggetto o bucket) e S3 Block Public Access (override a livello di account o bucket che blocca qualsiasi accesso pubblico indipendentemente dalle altre policy). Per la maggior parte dei casi d'uso attuali, l'approccio consigliato consiste nell'utilizzare le policy dei bucket insieme a Block Public Access; gli ACL sono considerati legacy.
Policy dei bucket: JSON basato sulle risorse
Una bucket policy è un documento JSON associato direttamente al bucket S3. Specifica quali principal (utenti IAM, ruoli, account AWS, servizi o il pubblico) possono eseguire quali azioni su quali risorse (il bucket e/o specifici prefissi di chiavi). Le bucket policy supportano l'accesso tra account senza dover utilizzare ruoli IAM: è possibile concedere direttamente, nella bucket policy, a un ruolo IAM di un altro account AWS l'accesso in lettura a oggetti specifici del bucket. Ogni bucket può avere una sola policy e la dimensione massima è di 20 KB.
# Allow a specific IAM role from another account to read objects
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::999999999999:role/PartnerReadRole'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/partner-data/*'
}]
}Rendere gli oggetti leggibili pubblicamente
Per distribuire contenuti pubblici (ad esempio risorse di un sito web statico o dataset pubblici), è possibile rendere gli oggetti leggibili pubblicamente tramite una bucket policy. Per prima cosa, disabiliti Block Public Access a livello di bucket, quindi aggiunga una dichiarazione nella bucket policy con Principal: '*' e Action: s3:GetObject. Sono necessari entrambi: la disabilitazione dell'impostazione Block Public Access e l'Allow nella bucket policy; abilitarne solo uno non è sufficiente. Limiti sempre Resource a un prefisso specifico anziché all'intero bucket, a meno che non desideri intenzionalmente rendere pubblici tutti gli oggetti.
# Public read policy for static website assets
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': '*',
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-website-bucket/public/*'
}]
}Impostazioni S3 Block Public Access
S3 Block Public Access è una rete di sicurezza con quattro impostazioni che prevalgono sulle bucket policy e sulle ACL: BlockPublicAcls (rifiuta le richieste di impostazione di ACL pubbliche), IgnorePublicAcls (ignora le ACL pubbliche esistenti), BlockPublicPolicy (rifiuta le bucket policy che concedono l'accesso pubblico) e RestrictPublicBuckets (limita l'accesso in base alla policy pubblica). Tutte e quattro le impostazioni sono abilitate per impostazione predefinita. È inoltre possibile abilitare Block Public Access a livello di account, bloccandolo per tutti i bucket indipendentemente dalle impostazioni dei singoli bucket: una soluzione ideale per prevenire l'esposizione accidentale al pubblico.
# Enable all Block Public Access settings on a bucket
aws s3api put-public-access-block \
--bucket my-private-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=trueAccess Control List (ACL): meccanismo legacy
Le ACL S3 sono il meccanismo di controllo degli accessi originale, precedente a IAM. Un'ACL concede autorizzazioni predefinite (READ, WRITE, FULL_CONTROL) ad account AWS o gruppi predefiniti (tutti gli utenti, utenti AWS autenticati, distribuzione dei log). Le ACL possono essere applicate a livello di bucket o di singolo oggetto. AWS ora raccomanda di disabilitare le ACL (l'impostazione S3 'Bucket Owner Enforced' fa sì che il proprietario del bucket possieda tutti gli oggetti, disabilitando le ACL) e di utilizzare invece bucket policy e IAM. Le ACL vengono ancora trattate nell'esame SAA-C03 come concetto legacy.
# Disable ACLs by setting ownership to BucketOwnerEnforced
aws s3api put-bucket-ownership-controls \
--bucket my-bucket \
--ownership-controls '{"Rules":[{"ObjectOwnership":"BucketOwnerEnforced"}]}'Origin Access Control per CloudFront
Quando distribuisce contenuti S3 tramite CloudFront, desidera mantenere privato il bucket consentendo a CloudFront di recuperare gli oggetti. Utilizzi Origin Access Control (OAC), il sostituto moderno di Origin Access Identity (OAI). OAC crea un'identità CloudFront a cui concede l'autorizzazione s3:GetObject nella bucket policy, mantenendo abilitato Block Public Access. In questo modo, gli utenti devono passare da CloudFront (per caching, WAF e HTTPS) e non possono accedere direttamente al bucket: un comune modello di architettura sicura nell'esame SAA-C03.
# Bucket policy granting CloudFront OAC access
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'Service': 'cloudfront.amazonaws.com'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/*',
'Condition': {
'StringEquals': {
'AWS:SourceArn': 'arn:aws:cloudfront::123456789012:distribution/EDFDVBD6EXAMPLE'
}
}
}]
}Accesso S3 tra account
Esistono due modi per concedere a un altro account AWS l'accesso al bucket S3. Opzione 1 — Bucket policy: aggiunga una dichiarazione con l'ARN dell'account esterno come Principal e le azioni S3 desiderate. Gli utenti e i ruoli IAM dell'account esterno devono comunque disporre delle autorizzazioni IAM per chiamare S3, oltre al fatto che la bucket policy deve concedere loro l'Allow. Opzione 2 — Ruolo IAM con trust policy: crei nel proprio account un ruolo considerato attendibile dall'account esterno; le identità dell'account esterno assumono il ruolo e ottengono le autorizzazioni sul bucket. La bucket policy è più semplice negli scenari di sola lettura; i ruoli sono preferibili per l'accesso operativo.
Configurazione CORS per applicazioni web
Cross-Origin Resource Sharing (CORS) consente a un'applicazione web ospitata su un dominio di effettuare richieste fetch JavaScript a un bucket S3 situato su un dominio diverso. Senza una configurazione CORS, i browser bloccano queste richieste per motivi di sicurezza. Aggiunga al bucket una configurazione CORS che specifichi le origini, i metodi HTTP e le intestazioni consentiti. CORS è comunemente necessario quando una SPA React ospitata su example.com recupera immagini o file direttamente dall'URL di un bucket S3.
# Apply a CORS configuration
aws s3api put-bucket-cors \
--bucket my-website-bucket \
--cors-configuration '{"CORSRules":[{"AllowedOrigins":["https://example.com"],"AllowedMethods":["GET"],"AllowedHeaders":["*"],"MaxAgeSeconds":3600}]}'URL pre-firmati per l'accesso temporaneo
Un pre-signed URL concede l'accesso a tempo limitato a un oggetto S3 privato (per GET o PUT) senza modificare le autorizzazioni del bucket o dell'oggetto. L'URL incorpora le credenziali e una scadenza: chiunque disponga dell'URL può accedere all'oggetto fino alla scadenza. Utilizzi i pre-signed URL per consentire agli utenti autenticati dell'app di scaricare file privati, permettere ai client di caricare direttamente su S3 senza passare dal backend oppure condividere temporaneamente dei report. La scadenza può variare da 1 secondo a 7 giorni (quando si utilizzano credenziali temporanee STS, il massimo è 12 ore).
# Generate a pre-signed GET URL valid for 24 hours
aws s3 presign s3://my-private-bucket/reports/invoice.pdf \
--expires-in 86400
# Generate a pre-signed PUT URL (for client uploads)
aws s3 presign s3://my-private-bucket/uploads/new-file.pdf \
--expires-in 3600 \
--method PUTCondizioni delle bucket policy per la sicurezza
Utilizzi le condizioni delle bucket policy per aggiungere una sicurezza basata sul contesto. Modelli comuni: aws:SourceIp limita l'accesso a intervalli IP specifici (ad esempio endpoint VPC o reti aziendali); aws:SecureTransport: true impone HTTPS negando le richieste HTTP (una best practice per tutti i bucket che archiviano dati sensibili); s3:x-amz-server-side-encryption garantisce che gli oggetti vengano caricati con la crittografia lato server; e aws:PrincipalOrgID limita l'accesso ai principal all'interno della propria Organizzazione AWS, impedendo l'esfiltrazione dei dati verso account esterni.
# Deny non-HTTPS access to the bucket
{
'Effect': 'Deny',
'Principal': '*',
'Action': 's3:*',
'Resource': [
'arn:aws:s3:::my-secure-bucket',
'arn:aws:s3:::my-secure-bucket/*'
],
'Condition': {
'Bool': {'aws:SecureTransport': 'false'}
}
}Endpoint VPC S3 per l'accesso privato
Per impostazione predefinita, le istanze EC2 in una subnet privata accedono a S3 tramite Internet (attraverso un NAT gateway), sostenendo costi NAT ed esponendo il traffico a Internet pubblico. Gli S3 Gateway Endpoint forniscono connettività privata a S3 dall'interno di una VPC senza un NAT gateway e senza costi aggiuntivi. Aggiunga il Gateway Endpoint alla tabella di routing: il traffico verso S3 viene instradato automaticamente attraverso la rete privata di AWS. È inoltre possibile aggiungere condizioni alla bucket policy usando aws:SourceVpce per limitare l'accesso alle sole richieste che passano dall'endpoint.
# Create an S3 gateway endpoint and associate with route tables
aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--service-name com.amazonaws.us-east-1.s3 \
--route-table-ids rtb-12345678Verifica rapida
Verifichi la propria comprensione dei concetti di AWS Solutions Architect (SAA-C03) presentati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: le bucket policy sono documenti JSON basati sulle risorse che controllano l'accesso tra account e l'accesso dei servizi a S3, S3 Block Public Access è un meccanismo di sicurezza che impedisce l'esposizione accidentale al pubblico e pre-signed URL, endpoint VPC e configurazioni CORS rispondono in modo sicuro a specifici modelli di accesso. Nella prossima lezione tratteremo il versioning S3, MFA Delete e la replica.
Domande Frequenti
La lezione «Controllo degli accessi S3: policy dei bucket e ACL» è gratuita?
Sì — il testo completo di «Controllo degli accessi S3: policy dei bucket e ACL» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.
Cosa imparerò in «Controllo degli accessi S3: policy dei bucket e ACL»?
Scriverete policy dei bucket, le confronterete con le ACL e configurerete le impostazioni di blocco dell'accesso pubblico per un hosting sicuro. Eserciti Cloud & IT Cert Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cloud & IT Cert Prep?
Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Controllo degli accessi S3: policy dei bucket e ACL»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cloud & IT Cert Prep?
Sì. Ogni lezione Cloud & IT Cert Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Bucket, oggetti e Regions
- Controllo degli accessi S3: policy dei bucket e ACL
- Versioning, MFA Delete e replica
- Classi di storage e policy del ciclo di vita