Specifica della crittografia lato server con AWS KMS (SSE-KMS) - Amazon Simple Storage Service

Specifica della crittografia lato server con AWS KMS (SSE-KMS)

Tutti i bucket Amazon S3 hanno la crittografia configurata per impostazione predefinita e tutti i nuovi oggetti caricati in un bucket S3 vengono automaticamente crittografati quando sono a riposo. La crittografia lato server con le chiavi gestite da Amazon S3 (SSE-S3) è la configurazione predefinita della crittografia per ogni bucket di Amazon S3. Per utilizzare un diverso tipo di crittografia, puoi specificare il tipo di crittografia lato server da utilizzare nelle richieste PUT S3 oppure aggiornare la configurazione di crittografia predefinita nel bucket di destinazione.

Se desideri specificare un tipo di crittografia diverso nelle richieste PUT, puoi utilizzare la crittografia lato server con chiavi AWS Key Management Service (AWS KMS) (SSE-KMS), la crittografia lato server a doppio livello con chiavi AWS KMS (DSSE-KMS) o la crittografia lato server con chiavi fornite dal cliente (SSE-C). Per impostare una configurazione di crittografia predefinita diversa nel bucket di destinazione puoi utilizzare SSE-KMS o DSSE-KMS.

Per ulteriori informazioni su come modificare la configurazione di crittografia predefinita per i bucket per uso generico, consulta Configurazione della crittografia predefinita.

Quando modifichi la configurazione di crittografia predefinita del bucket in SSE-KMS, il tipo di crittografia degli oggetti Amazon S3 esistenti nel bucket non viene modificato. Per modificare il tipo di crittografia degli oggetti preesistenti dopo aver aggiornato la configurazione di crittografia predefinita a SSE-KMS, puoi utilizzare Operazioni in batch Amazon S3. Si fornisce a Operazioni in batch S3 un elenco di oggetti e Operazioni in batch richiama la rispettiva operazione API. È possibile utilizzare l’azione Copia oggetti per copiare gli oggetti esistenti, scrivendoli nello stesso bucket degli oggetti crittografati SSE-KMS. Un solo processo di operazioni in batch può eseguire l'operazione specificata su miliardi di oggetti. Per ulteriori informazioni, consulta Esecuzione di operazioni sugli oggetti in blocco con le operazioni in batch e il post Come crittografare retroattivamente gli oggetti esistenti in Amazon S3 utilizzando Inventario S3, Amazon Athena e Operazioni in batch S3 nel Blog dell’archiviazione AWS.

È possibile specificare SSE-KMS utilizzando la console Amazon S3, le operazioni REST API, gli SDK AWS e la AWS Command Line Interface (AWS CLI). Per ulteriori informazioni, consulta i seguenti argomenti.

Nota

In Amazon S3 è possibile utilizzare le AWS KMS keys multi-regione. Tuttavia, Amazon S3 attualmente tratta le chiavi multiregionali come se fossero chiavi monoregionali e non utilizza le caratteristiche multiregionali della chiave. Per ulteriori informazioni, consulta Utilizzo delle chiavi multiregione nella Guida per gli sviluppatori di AWS Key Management Service.

Nota

Se si desidera utilizzare una chiave KMS di proprietà di un altro account, è necessario avere l'autorizzazione a utilizzarla. Per ulteriori informazioni sulle autorizzazioni tra account per le chiavi KMS, vedi Creazione di chiavi KMS utilizzabili da altri account nella Guida per gli sviluppatori di AWS Key Management Service.

Questo argomento illustra come impostare o modificare il tipo di crittografia di un oggetto in modo da utilizzare la crittografia lato server con chiavi AWS Key Management Service (AWS KMS) (SSE-KMS) utilizzando la console Amazon S3.

Nota
  • È possibile modificare la crittografia di un oggetto se l'oggetto è inferiore a 5 GB. Se l'oggetto è superiore a 5 GB, è necessario utilizzare gli SDK AWS CLI o AWS per modificare la crittografia di un oggetto.

  • Per un elenco delle autorizzazioni aggiuntive necessarie per modificare la crittografia di un oggetto, consulta Autorizzazioni necessarie per le operazioni API di Amazon S3. Per esempi di policy che concedono questa autorizzazione, consulta Esempi di policy basate sull'identità per Amazon S3.

  • Se si modifica la crittografia di un oggetto, viene creato un nuovo oggetto per sostituire quello precedente. Se è abilitata la funzione Versioni multiple di S3, viene creata una nuova versione dell'oggetto e l'oggetto esistente diventa una versione precedente. Il ruolo che modifica la proprietà diventa anche il proprietario del nuovo oggetto o della versione dell'oggetto.

Per aggiungere o modificare la crittografia di un oggetto
  1. Accedi alla Console di gestione AWS e apri la console Amazon S3 all’indirizzo https://console.aws.amazon.com/s3/.

  2. Nel riquadro di navigazione, scegli Bucket, quindi scegli la scheda Bucket per uso generico. Naviga al bucket o alla cartella Amazon S3 che contiene gli oggetti da modificare.

  3. Seleziona la casella di controllo degli oggetti da modificare.

  4. Nel menu Azioni, scegli Modifica crittografia lato server dall'elenco di opzioni visualizzato.

  5. Scorrere fino alla sezione Crittografia lato server.

  6. In Impostazioni di crittografia, scegli Utilizza le impostazioni del bucket per la crittografia predefinita o Ignora le impostazioni del bucket per la crittografia predefinita.

    Importante

    Se usi l'opzione SSE-KMS per la configurazione della crittografia predefinita, vengono applicati i limiti di richieste al secondo (RPS) pari a AWS KMS. Per ulteriori informazioni sulle quote AWS KMS e su come richiedere un aumento delle quote, consulta Quote nella Guida per gli sviluppatori di AWS Key Management Service.

  7. Se scegli Sostituisci impostazioni del bucket per la crittografia predefinita, configura le seguenti impostazioni di crittografia.

    1. In Tipo di crittografia, scegli Crittografia lato server con chiavi AWS Key Management Service (SSE-KMS).

    2. In AWS KMS key, esegui una delle seguenti operazioni per scegliere la chiave KMS:

      • Per scegliere da un elenco di chiavi KMS disponibili, seleziona Scegli tra le chiavi AWS KMS keys, quindi scegli la chiave KMS dall'elenco delle chiavi disponibili.

        In questo elenco vengono visualizzate sia le chiavi Chiave gestita da AWS (aws/s3) che quelle gestite dal cliente. Per ulteriori informazioni sulle chiavi gestite dal cliente, consulta Chiavi gestite dal cliente e chiavi AWS nella Guida per gli sviluppatori di AWS Key Management Service.

      • Per inserire la chiave KMS ARN, scegli Inserisci l'ARN della AWS KMS key, quindi inserisci l'ARN della tua chiave KMS nel campo visualizzato.

      • Per creare una chiave gestita dal cliente nella console, scegli Crea una chiave KMS nella console AWS KMS.

        Per ulteriori informazioni sulla creazione di una AWS KMS key, consulta Creazione di chiavi nella Guida per Developer di AWS Key Management Service.

      Importante

      Puoi utilizzare solo le chiavi KMS disponibili nella stessa Regione AWS del bucket. La console Amazon S3 elenca solo le prime 100 chiavi KMS nella stessa Regione del bucket. Per utilizzare una chiave KMS non elencata, devi inserire l'ARN della chiave KMS. Se desideri utilizzare una chiave KMS di proprietà di un account diverso, è necessario innanzitutto disporre dell'autorizzazione necessaria per l'uso della chiave e quindi inserire l'ARN della chiave KMS.

      Amazon S3 supporta solo chiavi KMS di crittografia simmetriche e non chiavi KMS asimmetriche. Per ulteriori informazioni, consulta Identificazione delle chiavi KMS simmetriche e asimmetriche nella Guida per gli sviluppatori di AWS Key Management Service.

  8. In Impostazioni di copia aggiuntive, scegli se eseguire Copia impostazioni dell'origine, Non specificare le impostazioni o Specifica le impostazioni. Copia impostazioni dell'origine è l'opzione predefinita. Se desideri copiare solo l'oggetto senza gli attributi delle impostazioni dell'origine, scegli Non specificare le impostazioni. Scegli Specifica le impostazioni per specificare le impostazioni per la classe di storage, le ACL, i tag degli oggetti, i metadati, la crittografia lato server e i checksum aggiuntivi.

  9. Scegli Save changes (Salva modifiche).

Nota

Questa azione applica la crittografia a tutti gli oggetti specificati. Durante la crittografia delle cartelle, attendere il completamento dell'operazione di salvataggio prima di aggiungere nuovi oggetti alla cartella.

Quando crei un oggetto, ovvero quando carichi un nuovo oggetto o copi un oggetto esistente, puoi specificare l'uso della crittografia lato server con le AWS KMS keys (SSE-KMS) per crittografare i dati. Per fare ciò, aggiungi l'intestazione x-amz-server-side-encryption alla richiesta. Impostare il valore dell'intestazione sull'algoritmo di crittografia aws:kms. Amazon S3 conferma che l'oggetto è stato archiviato utilizzando SSE-KMS restituendo l'intestazione della risposta x-amz-server-side-encryption.

Se specifichi l'intestazione x-amz-server-side-encryption con il valore aws:kms, puoi anche utilizzare le intestazioni di richiesta seguenti:

  • x-amz-server-side-encryption-aws-kms-key-id

  • x-amz-server-side-encryption-context

  • x-amz-server-side-encryption-bucket-key-enabled

Operazioni REST API di Amazon S3 che supportano SSE-KMS

Le operazioni REST API seguenti accettano le intestazioni di richiesta x-amz-server-side-encryption, x-amz-server-side-encryption-aws-kms-key-id e x-amz-server-side-encryption-context.

  • PutObject: quando carichi i dati utilizzando l'operazione API PUT, è possibile specificare queste intestazioni di richiesta.

  • CopyObject – Quando si copia un oggetto, si ha un oggetto di origine e un oggetto di destinazione. Quando si passano le intestazioni SSE-KMS con l'operazione CopyObject, queste vengono applicate solo all'oggetto di destinazione. Quando si copia un oggetto esistente, indipendentemente dal fatto che l'oggetto di partenza sia criptato o meno, l'oggetto di destinazione non viene criptato, a meno che non si richieda esplicitamente la crittografia lato server.

  • POST Object - Quando si usa un'operazione POST per caricare un oggetto, invece delle intestazioni della richiesta, si forniscono le stesse informazioni nei campi del modulo.

  • CreateMultipartUpload – Quando si caricano oggetti di grandi dimensioni utilizzando l'operazione API di caricamento multiparte, è possibile specificare queste intestazioni. Queste intestazioni vengono specificate nella richiesta CreateMultipartUpload.

Le intestazioni di risposta delle seguenti operazioni REST API restituiscono l'intestazione x-amz-server-side-encryption quando un oggetto viene memorizzato utilizzando la crittografia lato server.

Importante
  • Tutte le richieste di GET e PUT per un oggetto protetto da AWS KMS falliscono se non si effettuano queste richieste utilizzando Secure Sockets Layer (SSL), Transport Layer Security (TLS) o Signature Version 4.

  • Se l'oggetto utilizza le chiavi SSE-KMS, non inviare intestazioni di richiesta di crittografia per le richieste GET e HEAD per evitare di ricevere un errore HTTP 400 BadRequest.

Contesto di crittografia (x-amz-server-side-encryption-context)

Se si specifica x-amz-server-side-encryption:aws:kms, l'API Amazon S3 supporta un contesto di crittografia con l'intestazione x-amz-server-side-encryption-context. Un contesto di crittografia è un set di coppie chiave-valore che possono contenere ulteriori informazioni contestuali sui dati.

Amazon S3 utilizza automaticamente l'oggetto o il bucket Amazon Resource Name (ARN) come coppia di contesto di crittografia. Se utilizzi SSE-KMS senza abilitare una chiave bucket S3, usa l'ARN dell'oggetto come contesto di crittografia, ad esempio arn:aws:s3:::object_ARN. Se invece utilizzi SSE-KMS e abiliti una chiave bucket S3, usa l'ARN del bucket per il contesto di crittografia, ad esempio arn:aws:s3:::bucket_ARN.

Facoltativamente, è possibile fornire una coppia di contesto di crittografia aggiuntiva utilizzando l'intestazione x-amz-server-side-encryption-context. Tuttavia, poiché il contesto di crittografia non è criptato, assicurarsi che non contenga informazioni sensibili. Amazon S3 archivia questa coppia di chiavi aggiuntiva insieme al contesto di crittografia predefinito.

Per informazioni sul contesto di crittografia in Amazon S3, consulta la sezione Contesto di crittografia. Per informazioni generali sul contesto di crittografia, consulta Concetti di AWS Key Management Service: Contesto di crittografia nella Guida per gli sviluppatori di AWS Key Management Service.

ID chiave AWS KMS (x-amz-server-side-encryption-aws-kms-key-id)

Puoi utilizzare l'intestazione x-amz-server-side-encryption-aws-kms-key-id per specificare l'ID della chiave gestita dal cliente utilizzata per proteggere i dati. Se specifichi l'intestazione x-amz-server-side-encryption:aws:kms, ma non fornisci l'intestazione x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 utilizza la Chiave gestita da AWS (aws/s3) per proteggere i dati. Se desideri utilizzare una chiave gestita dal cliente, devi fornire l'intestazione x-amz-server-side-encryption-aws-kms-key-id della chiave gestita dal cliente.

Importante

Quando utilizzi una AWS KMS key per la crittografia lato server in Amazon S3, devi scegliere una chiave KMS di crittografia simmetrica. Amazon S3 supporta solo chiavi KMS di crittografia simmetrica. Per ulteriori informazioni sulle chiavi, consulta Chiavi KMS di crittografia simmetrica nella Guida per gli sviluppatori di AWS Key Management Service.

Chiavi bucket S3 (x-amz-server-side-encryption-aws-bucket-key-enabled)

È possibile utilizzare l'intestazione della richiesta x-amz-server-side-encryption-aws-bucket-key-enabled per abilitare o disabilitare un bucket S3 Key a livello di oggetto. Le chiavi bucket S3 riducono i costi di richiesta di AWS KMS diminuendo il traffico di richieste da Amazon S3 a AWS KMS. Per ulteriori informazioni, consulta Riduzione del costo di SSE-KMS con le chiavi bucket Amazon S3.

Se specifichi l'intestazione x-amz-server-side-encryption:aws:kms ma non fornisci l'intestazione x-amz-server-side-encryption-aws-bucket-key-enabled, per crittografare l'oggetto saranno utilizzate le impostazioni della chiave bucket S3 per il bucket di destinazione. Per ulteriori informazioni, consulta Configurazione di una chiave bucket S3 a livello di oggetto.

Per utilizzare i seguenti esempi di comandi AWS CLI, sostituisci user input placeholders con le tue informazioni.

Quando carichi un nuovo oggetto o copi un oggetto esistente, puoi specificare l'uso della crittografia lato server con chiavi AWS KMS per crittografare i dati. Per fare ciò, aggiungi l'intestazione --server-side-encryption aws:kms alla richiesta. Usa--ssekms-key-id example-key-id per aggiungere la chiave AWS KMS gestita dal cliente che hai creato. Se si specifica --server-side-encryption aws:kms, ma non si fornisce un ID chiave AWS KMS, Amazon S3 utilizzerà una chiave gestita da AWS.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath

Puoi inoltre abilitare o disabilitare le chiavi di bucket Amazon S3 nelle operazioni PUT o COPY aggiungendo --bucket-key-enabled o --no-bucket-key-enabled. Le chiavi di bucket Amazon S3 possono ridurre i costi delle richieste AWS KMS diminuendo il traffico delle richieste da Amazon S3 a AWS KMS. Per ulteriori informazioni, consulta Riduzione del costo di SSE-KMS con le chiavi bucket Amazon S3.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath

È possibile crittografare un oggetto non crittografato con SSE-KMS copiando l'oggetto nella sua posizione.

aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --body filepath --bucket amzn-s3-demo-bucket --key example-object-key --sse aws:kms --sse-kms-key-id example-key-id --body filepath

Quando utilizzi gli SDK AWS puoi richiedere ad Amazon S3 di usare AWS KMS keys per la crittografia lato server. I seguenti esempi mostrano come utilizzare SSE-KMS con gli SDK AWS per Java e .NET. Per informazioni sugli altri SDK, consulta Codice di esempio e librerie nel AWS Developer Center.

Importante

Quando utilizzi una AWS KMS key per la crittografia lato server in Amazon S3, devi scegliere una chiave KMS di crittografia simmetrica. Amazon S3 supporta solo chiavi KMS di crittografia simmetrica. Per ulteriori informazioni sulle chiavi, consulta Chiavi KMS di crittografia simmetrica nella Guida per gli sviluppatori di AWS Key Management Service.

CopyObjectOperazione

Quando copi gli oggetti, puoi aggiungere le stesse proprietà della richiesta (ServerSideEncryptionMethod e ServerSideEncryptionKeyManagementServiceKeyId) per richiedere che Amazon S3 utilizzi una AWS KMS key. Per ulteriori informazioni sulla copia di oggetti, consulta la sezione Copia, spostamento e denominazione di oggetti.

PUTOperazione

Java

Quando si carica un oggetto usando AWS SDK per Java, si può richiedere ad Amazon S3 di usare un AWS KMS key aggiungendo la proprietà SSEAwsKeyManagementParams, come mostrato nella richiesta seguente:

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

In questo caso, Amazon S3 utilizza Chiave gestita da AWS (aws/s3). Per ulteriori informazioni, consulta Utilizzo della crittografia lato server con chiavi AWS KMS (SSE-KMS). È possibile creare facoltativamente una chiave KMS di crittografia simmetrica e specificarla nella richiesta, come mostrato nell'esempio seguente:

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

Per ulteriori informazioni sulla creazione di chiavi gestite dal cliente, consulta Programmazione dell'API (API)AWS KMS nella Guida per Developer di AWS Key Management Service.

Per esempi di codice di utilizzo per il caricamento di un oggetto, consulta gli argomenti elencati di seguito. Per usare questi esempi dovrai aggiornare gli esempi di codice e fornire informazioni sulla crittografia come mostrato nel frammento di codice precedente.

.NET

Quando si carica un oggetto usando AWS SDK per .NET, si può richiedere ad Amazon S3 di usare un AWS KMS key aggiungendo la proprietà ServerSideEncryptionMethod, come mostrato nella richiesta seguente:

PutObjectRequest putRequest = new PutObjectRequest { BucketName = amzn-s3-demo-bucket, Key = keyName, // other properties ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

In questo caso, Amazon S3 utilizza Chiave gestita da AWS. Per ulteriori informazioni, consulta Utilizzo della crittografia lato server con chiavi AWS KMS (SSE-KMS). È possibile creare una propria chiave di crittografia simmetrica gestita dal cliente e specificarla nella richiesta, come mostrato nell'esempio seguente:

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = amzn-s3-demo-bucket, Key = keyName, // other properties ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

Per ulteriori informazioni sulla creazione di chiavi gestite dal cliente, consulta Programmazione dell'API (API)AWS KMS nella Guida per Developer di AWS Key Management Service.

Per esempi di codice di utilizzo per il caricamento di un oggetto, consulta gli argomenti elencati di seguito. Per usare questi esempi dovrai aggiornare gli esempi di codice e fornire informazioni sulla crittografia come mostrato nel frammento di codice precedente.

URL prefirmati

Java

Quando si crea un URL prefirmato per un oggetto crittografato con AWS KMS key, è necessario specificare esplicitamente Signature Version 4, come mostrato nell'esempio seguente:

ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSignerOverride("AWSS3V4SignerType"); AmazonS3Client s3client = new AmazonS3Client( new ProfileCredentialsProvider(), clientConfiguration); ...

Per un esempio di codice, consulta Condivisione di oggetti mediante URL prefirmati.

.NET

Quando si crea un URL prefirmato per un oggetto crittografato con AWS KMS key, è necessario specificare esplicitamente Signature Version 4, come mostrato nell'esempio seguente:

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Per un esempio di codice, consulta Condivisione di oggetti mediante URL prefirmati.