Utilizzo della crittografia lato server con chiavi AWS KMS (SSE-KMS) nei bucket di directory - Amazon Simple Storage Service

Utilizzo della crittografia lato server con chiavi AWS KMS (SSE-KMS) nei bucket di directory

I controlli della sicurezza in AWS KMS possono essere d'aiuto per soddisfare i requisiti di conformità correlati alla crittografia. È possibile scegli di configurare i bucket di directory per utilizzare la crittografia lato server con chiavi AWS Key Management Service (AWS KMS) (SSE-KMS) e utilizzare queste chiavi KMS per proteggere i dati nei bucket di directory Amazon S3. Per ulteriori informazioni su SSE-KMS, consulta Utilizzo della crittografia lato server con chiavi AWS KMS (SSE-KMS).

Autorizzazioni

Per caricare o scaricare un oggetto crittografato con AWS KMS key su o da Amazon S3, sono necessari i permessi kms:GenerateDataKey e kms:Decrypt sulla chiave. Per ulteriori informazioni, consulta l'argomento relativo all'autorizzazione concessa agli utenti delle chiavi di utilizzare una chiave KMS per le operazioni di crittografia nella Guida per gli sviluppatori di AWS Key Management Service. Per informazioni sulle autorizzazioni AWS KMS richieste per i caricamenti in più parti, consulta Autorizzazioni e API per il caricamento in più parti.

Per ulteriori informazioni sulle chiavi KMS per SSE-KMS, consulta Specifica della crittografia lato server con AWS KMS (SSE-KMS).

AWS KMS keys

La configurazione di SSE-KMS può supportare solo 1 chiave gestita dal cliente per ogni bucket di directory per tutta la durata del bucket. Chiave gestita da AWS (aws/s3) non è supportato. Inoltre, dopo aver specificato una chiave gestita dal cliente per SSE-KMS, non è possibile sovrascrivere la chiave gestita dal cliente per la configurazione SSE-KMS del bucket.

È possibile identificare la chiave gestita dal cliente specificata per la configurazione SSE-KMS del bucket, nel modo seguente:

  • Si effettua una richiesta di operazione API HeadObject per trovare il valore di x-amz-server-side-encryption-aws-kms-key-id nella risposta.

Per utilizzare una nuova chiave gestita dal cliente per i propri dati, si consiglia di copiare gli oggetti esistenti in un nuovo bucket della directory con una nuova chiave gestita dal cliente.

Quando si specifica una chiave gestita dal cliente AWS KMS per la crittografia nel bucket della directory, utilizzare solo l'ID chiave o l'ARN chiave. Il formato alias della chiave KMS non è supportato.

Per ulteriori informazioni sulle chiavi KMS per SSE-KMS, consulta AWS KMS keys.

Utilizzo di SSE-KMS per le operazioni tra account

Quando si utilizza la crittografia per le operazioni tra account nei bucket della directory, tieni presente quanto segue:

  • Se desideri garantire l'accesso multi-account agli oggetti S3, configura una policy di una chiave gestita dal cliente per consentire l'accesso da un altro account.

  • Per specificare una chiave gestita dal cliente, è necessario utilizzare un ARN di chiave KMS completamente qualificato.

Chiavi bucket Amazon S3

Le S3 Bucket Keys sono sempre abilitate per le operazioni GET e PUT in un bucket di directory e non possono essere disabilitate. Le chiavi dei bucket S3 non sono supportate quando si copiano oggetti con crittografia SSE-KMS da bucket per uso generico a bucket di directory, da bucket di directory a bucket per uso generico o tra bucket di directory, tramite CopyObject, UploadPartCopy, l'operazione Copy in Operazioni in batch o i processi import. In questo caso, Amazon S3 effettua una chiamata a AWS KMS ogni volta che viene effettuata una richiesta di copia per un oggetto crittografato da KMS.

Per le operazioni API di endpoint di zona (a livello di oggetto), ad eccezione di CopyObject e UploadPartCopy, si autenticano e autorizzano le richieste tramite CreateSession per ottenere una bassa latenza. Si consiglia di utilizzare la configurazione di crittografia predefinita del bucket e di non sovrascrivere la crittografia predefinita del bucket nelle richieste CreateSession o nelle richieste di oggetti PUT. I nuovi oggetti vengono quindi crittografati automaticamente con le impostazioni di crittografia desiderate. Per crittografare i nuovi oggetti in un bucket di directory con SSE-KMS, è necessario specificare SSE-KMS come configurazione di crittografia predefinita del bucket di directory con una chiave KMS (in particolare, una chiave gestita dal cliente). Quindi, quando viene creata una sessione per le operazioni API dell'endpoint di zona, i nuovi oggetti vengono automaticamente crittografati e decrittografati con SSE-KMS e S3 Bucket Keys durante la sessione. Per ulteriori informazioni sui comportamenti di sovrascrittura della crittografia nei bucket di directory, consulta Specifica della crittografia lato server con AWS KMS per il caricamento di nuovi oggetti.

Le chiavi S3 Bucket vengono utilizzate per un periodo di tempo limitato all'interno di Amazon S3, riducendo ulteriormente la necessità di Amazon S3 di effettuare richieste a AWS KMS per completare le operazioni di crittografia. Per ulteriori informazioni sull'uso delle chiavi S3 Bucket, consulta Chiavi bucket Amazon S3 e Riduzione del costo di SSE-KMS con le chiavi bucket Amazon S3.

Richiesta di SSE-KMS

Per richiedere SSE-KMS a tutti gli oggetti di un particolare bucket di directory, è possibile utilizzare una policy di bucket. Ad esempio, quando si utilizza l'operazione API CreateSession per concedere il permesso di caricare un nuovo oggetto (PutObject, CopyObject e CreateMultipartUpload), la seguente policy del bucket nega il permesso di caricare l'oggetto (s3express:CreateSession) a tutti se la richiesta CreateSession non include un'intestazione x-amz-server-side-encryption-aws-kms-key-id che richiede SSE-KMS.

JSON
{ "Version":"2012-10-17", "Id":"UploadObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3express:CreateSession", "Resource":"arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3", "Condition":{ "Null":{ "s3express:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

Per richiedere l'utilizzo di una specifica AWS KMS key per crittografare gli oggetti in un bucket, puoi utilizzare la chiave di condizione s3express:x-amz-server-side-encryption-aws-kms-key-id. Per specificare la chiave KMS, è necessario utilizzare un nome della risorsa Amazon (ARN) chiave nel formato arn:aws:kms:region:acct-id:key/key-id. AWS Identity and Access Management non viene convalidato se la stringa per s3express:x-amz-server-side-encryption-aws-kms-key-id esiste. L'ID della chiave AWS KMS che Amazon S3 utilizza per la crittografia degli oggetti deve corrispondere all'ID della chiave AWS KMS nella policy, altrimenti Amazon S3 nega la richiesta.

Per ulteriori informazioni su come utilizzare SSE-KMS per il caricamento di nuovi oggetti, consulta Specifica della crittografia lato server con AWS KMS (SSE-KMS) per i caricamenti di nuovi oggetti nei bucket della directory.

Per un elenco completo delle chiavi di condizione specifiche per i bucket di directory, consulta Autorizzazione delle operazioni API dell'endpoint regionale con IAM.

Contesto di crittografia

Per i bucket di directory, un contesto di crittografia è un insieme di coppie chiave-valore che contiene informazioni contestuali sui dati. Non è supportato un valore aggiuntivo del contesto di crittografia. Per ulteriori informazioni sul contesto di crittografia, consulta Contesto di crittografia.

Per impostazione predefinita, se si utilizza SSE-KMS su un bucket di directory, Amazon S3 utilizza il nome della risorsa Amazon (ARN) del bucket come coppia di contesto di crittografia:

arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3

Assicurati che le policy IAM o le policy delle chiavi AWS KMS utilizzino l'ARN del bucket come contesto di crittografia.

È possibile fornire facoltativamente una coppia di contesti di crittografia esplicita utilizzando l'intestazione x-amz-server-side-encryption-context in una richiesta API endpoint di zona, come CreateSession. Il valore di questa intestazione è una stringa codificata Base64 di un JSON codificato UTF-8, che contiene il contesto di crittografia come coppie chiave-valore. Per i bucket di directory, il contesto di crittografia deve corrispondere al contesto di crittografia predefinito: il nome della risorsa Amazon (ARN) del bucket. Inoltre, poiché il contesto di crittografia non è criptato, assicurarsi che non contenga informazioni sensibili.

È possibile utilizzare il contesto di crittografia per identificare e categorizzare le operazioni di crittografia. È inoltre possibile utilizzare il valore ARN del contesto di crittografia predefinito per tracciare le richieste pertinenti in AWS CloudTrail, visualizzando quale ARN del bucket della directory è stato utilizzato con quale chiave di crittografia.

Nel campo requestParameters di un file di log CloudTrail, se si utilizza SSE-KMS su un bucket di directory, il valore del contesto di crittografia è l'ARN del bucket.

"encryptionContext": { "aws:s3express:arn": "arn:aws:s3:::arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3" }

Inoltre, per la crittografia degli oggetti con SSE-KMS in un bucket di directory, gli eventi di AWS KMS CloudTrail registrano l'ARN del bucket invece dell'ARN dell'oggetto.

Invio di richieste per oggetti crittografati mediante AWS KMS

È possibile accedere ai bucket di directory solo tramite HTTPS (TLS). Inoltre, i bucket di directory firmano le richieste utilizzando AWS Signature Version 4 (SigV4). Per ulteriori informazioni sull'invio di richieste di oggetti criptati AWS KMS, consulta Invio di richieste per oggetti crittografati mediante AWS KMS.

Se l'oggetto utilizza SSE-KMS, non inviare intestazioni di richiesta di crittografia per le richieste GET e HEAD. In caso contrario, riceverai un errore HTTP 400 Bad Request (HTTP 400 - Richiesta non valida).

Verifica della crittografia SSE-KMS nei bucket di directory

Per verificare l'utilizzo delle chiavi AWS KMS per i dati crittografati SSE-KMS, è possibile utilizzare i log di AWS CloudTrail. È possibile ottenere informazioni sulle operazioni crittografiche, come ad esempio GenerateDataKey e Decrypt. CloudTrail supporta numerosi valori di attributo per filtrare la ricerca, tra cui nome dell'evento, nome utente e origine dell'evento.