

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Uso della crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3)
<a name="UsingServerSideEncryption"></a>

**Importante**  
Amazon S3 ora applica la crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3) come livello di base della crittografia per ogni bucket di Amazon S3. A partire dal 5 gennaio 2023, tutti i caricamenti di nuovi oggetti su Amazon S3 vengono crittografati automaticamente senza costi aggiuntivi e senza alcun impatto sulle prestazioni. Lo stato di crittografia automatico per la configurazione di crittografia predefinita del bucket S3 e per il caricamento di nuovi oggetti è disponibile nei CloudTrail log, in S3 Inventory, S3 Storage Lens, nella console Amazon S3 e come intestazione di risposta dell'API Amazon S3 aggiuntiva nella e. AWS CLI AWS SDKs Per ulteriori informazioni, consulta [Domande frequenti sulla crittografia predefinita](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Tutti i nuovi caricamenti di oggetti su bucket Amazon S3 vengono crittografati per impostazione predefinita con la crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3).

La crittografia lato server protegge i dati inattivi. Amazon S3 crittografa ogni oggetto con una chiave univoca. Come ulteriore tutela, crittografa la chiave con una chiave che ruota con regolarità. La crittografia lato server di Amazon S3 utilizza la modalità AES-GCM (Advanced Encryption Standard Galois/Counter Mode) a 256 bit per crittografare tutti gli oggetti caricati.

Non sono previsti costi aggiuntivi per l'utilizzo della crittografia lato server con le chiavi gestite da Amazon S3 (SSE-S3). Tuttavia, per le richieste di configurare la funzione di crittografia predefinita vengono applicati i costi delle richieste Amazon S3 standard. Per informazioni sui prezzi, consulta [Prezzi di Amazon S3](https://aws.amazon.com/s3/pricing/).

Se desideri che i tuoi caricamenti di dati siano crittografati utilizzando solo le chiavi gestite da Amazon S3, puoi utilizzare la seguente policy dei bucket. Ad esempio, la seguente policy del bucket rifiuta le autorizzazioni al caricamento di un oggetto a meno che la richiesta non includa l'intestazione `x-amz-server-side-encryption` per richiedere la codifica lato server:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "PutObjectPolicy",
  "Statement": [
    {
      "Sid": "DenyObjectsThatAreNotSSES3",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
   ]
}
```

------

**Nota**  
La crittografia lato server viene applicata solo ai dati dell'oggetto, non dei metadati dell'oggetto. 

## Supporto API per la crittografia lato server
<a name="APISupportforServer-SideEncryption"></a>

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 tue `PUT` richieste, puoi utilizzare la crittografia lato server con () chiavi (SSE-KMS), la crittografia lato server a doppio livello con chiavi AWS Key Management Service (AWS KMS DSSE-KMS) o la crittografia lato server con chiavi fornite dal cliente (SSE-C). AWS KMS 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](default-bucket-encryption.md). 

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](batch-ops-copy-object.md) 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](batch-ops.md) e il post [Come crittografare retroattivamente gli oggetti esistenti in Amazon S3 utilizzando Inventario S3, Amazon Athena e Operazioni in batch S3](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) nel *Blog dell’archiviazione AWS *. 

Per configurare la crittografia lato server utilizzando il REST per la creazione di oggetti, è necessario fornire l'intestazione della richiesta. APIs `x-amz-server-side-encryption` Per informazioni sul REST, vedere. APIs [Utilizzo della REST API](specifying-s3-encryption.md#SSEUsingRESTAPI)

I seguenti Amazon S3 APIs supportano questa intestazione:
+ **Operazioni PUT**: specifica l'intestazione della richiesta quando si caricano i dati utilizzando l'API `PUT`. Per ulteriori informazioni, consulta [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html).
+ **Avvia caricamento in più parti**: specifica l'intestazione nella richiesta di avvio quando si caricano oggetti di grandi dimensioni utilizzando l'API per il caricamento in più parti. Per ulteriori informazioni, consulta [Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html).
+ **Operazione COPY**: l'operazione di copia di un oggetto coinvolge un oggetto di origine e un oggetto di destinazione. Per ulteriori informazioni, consulta [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html).

**Nota**  
Quando si utilizza un'operazione `POST` per caricare un oggetto anziché l'intestazione della richiesta, si specificano le stesse informazioni nei campi del modulo. Per ulteriori informazioni, consulta [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html). 

Forniscono AWS SDKs anche un wrapper APIs che puoi utilizzare per richiedere la crittografia lato server. È inoltre possibile utilizzare il Console di gestione AWS per caricare oggetti e richiedere la crittografia lato server.

Per ulteriori informazioni generali, consulta [Concetti di AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

**Topics**
+ [Supporto API per la crittografia lato server](#APISupportforServer-SideEncryption)
+ [Specifica della crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3)](specifying-s3-encryption.md)

# Specifica della crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3)
<a name="specifying-s3-encryption"></a>

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 tue `PUT` richieste, puoi utilizzare la crittografia lato server con AWS Key Management Service () chiavi (SSE-KMS AWS KMS), la crittografia lato server a doppio livello con chiavi (DSSE-KMS) o la crittografia lato server con AWS KMS 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](default-bucket-encryption.md). 

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](batch-ops-copy-object.md) 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](batch-ops.md) e il post [Come crittografare retroattivamente gli oggetti esistenti in Amazon S3 utilizzando Inventario S3, Amazon Athena e Operazioni in batch S3](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) nel *Blog dell’archiviazione AWS *. 

Puoi specificare SSE-S3 APIs utilizzando AWS SDKs la console S3, REST e (). AWS Command Line Interface AWS CLI Per ulteriori informazioni, consulta [Impostazione del comportamento predefinito della crittografia lato server per i bucket Amazon S3](bucket-encryption.md).

## Utilizzo della console S3
<a name="add-object-encryption-s3"></a>

Questo argomento descrive in che modo impostare o modificare il tipo di crittografia che viene utilizzato da un oggetto utilizzando la Console di gestione AWS. Quando si copia un oggetto utilizzando la console, l'oggetto viene copiato da Amazon S3 così com'è: Ciò significa che se l'oggetto di origine è crittografato, anche l'oggetto di destinazione sarà crittografato. Puoi usare la console per aggiungere o modificare la crittografia per un oggetto. 

**Nota**  
È possibile modificare la crittografia di un oggetto se l'oggetto è inferiore a 5 GB. Se l'oggetto è più grande di 5 GB, è necessario utilizzare [AWS CLI](mpu-upload-object.md#UsingCLImpUpload)o [AWS SDKs](CopyingObjectsMPUapi.md)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](using-with-s3-policy-actions.md). Per esempi di policy che concedono questa autorizzazione, consulta [Esempi di policy basate sull'identità per Amazon S3](example-policies-s3.md).
Se si modifica la crittografia di un oggetto, viene creato un nuovo oggetto per sostituire quello precedente. Se è abilitata la funzione Controllo delle versioni 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 modificare la crittografia di un oggetto**

1. Accedi Console di gestione AWS e apri la console Amazon S3 all'indirizzo. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. 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.

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

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

1. Scorrere fino alla sezione **Crittografia lato server**.

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

1. 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 gestite da Amazon S3 (SSE-S3)**. Per crittografare gli oggetti, SSE-S3 utilizza una delle cifrature di blocco più complesse, lo standard di crittografia avanzata a 256 bit (AES-256). Per ulteriori informazioni, consulta [Uso della crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

1. 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 **Specificare le impostazioni** per specificare le impostazioni per la classe di archiviazione ACLs, i tag degli oggetti, i metadati, la crittografia lato server e i checksum aggiuntivi.

1. 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.

## Utilizzo della REST API
<a name="SSEUsingRESTAPI"></a>

Al momento della creazione dell'oggetto, ovvero quando si carica un nuovo oggetto o si esegue una copia di un oggetto esistente, è possibile specificare se si desidera che Amazon S3 esegua la crittografia dei dati con le chiavi gestite da Amazon S3 (SSE-S3) aggiungendo alla richiesta l'intestazione `x-amz-server-side-encryption`. Imposta il valore dell'intestazione sull'algoritmo della crittografia `AES256` supportato da Amazon S3. Amazon S3 conferma che l'oggetto è stato archiviato utilizzando SSE-S3 restituendo l'intestazione della risposta `x-amz-server-side-encryption`. 

Le operazioni API per il caricamento REST elencate di seguito accettano l'intestazione della richiesta `x-amz-server-side-encryption`.
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Avvio del caricamento in più parti](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)

Quando si caricano oggetti di grandi dimensioni utilizzando l'operazione API per il caricamento in più parti, è possibile specificare la crittografia lato server aggiungendo l'intestazione `x-amz-server-side-encryption` alla richiesta di avvio del caricamento in più parti. Quando si copia un oggetto esistente, indipendentemente dal fatto che l'oggetto di origine sia stato o meno crittografato, l'oggetto di destinazione non viene crittografato, a meno che non si richieda esplicitamente la crittografia lato server.

Quando un oggetto viene archiviato utilizzando SSE-S3, le intestazioni di risposta delle seguenti operazioni REST API restituiscono l'intestazione `x-amz-server-side-encryption`. 
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Avvio del caricamento in più parti](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Caricamento di parte - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Completamento del caricamento in più parti](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Get Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)
+ [Head Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)

**Nota**  
Non inviare l'intestazione di richiesta di crittografia per richieste `GET` e `HEAD` se l'oggetto utilizza SSE-S3 per evitare di ricevere un errore HTTP 400 (Bad Request).

## Utilizzando il AWS SDKs
<a name="s3-using-sdks"></a>

Durante l'utilizzo AWS SDKs, puoi richiedere ad Amazon S3 di utilizzare la crittografia lato server con le chiavi di crittografia gestite di Amazon S3 (SSE-S3). Questa sezione fornisce esempi di utilizzo di in più lingue. AWS SDKs Per informazioni su altri SDKs, vai a [Codice di esempio e librerie](https://aws.amazon.com/code). 

------
#### [ Java ]

Quando si utilizza il AWS SDK per Java per caricare un oggetto, è possibile utilizzare SSE-S3 per crittografarlo. Per richiedere la crittografia lato server, utilizza la proprietà `ObjectMetadata` della `PutObjectRequest` per impostare l'intestazione della richiesta `x-amz-server-side-encryption`. Quando si utilizza il metodo `putObject()` di `AmazonS3Client`, Amazon S3 cripta i dati e li salva.

È anche possibile richiedere la crittografia SSE-S3 durante il caricamento di oggetti con l'operazione API per il caricamento in più parti: 
+ Quando si utilizza l'operazione API per il caricamento in più parti di alto livello, usi i metodi `TransferManager` per applicare la crittografia lato server agli oggetti durante il loro caricamento. È possibile utilizzare uno qualsiasi dei metodi di caricamento che accetta `ObjectMetadata` come parametro. Per ulteriori informazioni, consulta [Caricamento di un oggetto utilizzando il caricamento in più parti](mpu-upload-object.md).
+ Quando si utilizza l'operazione API per il caricamento in più parti di basso livello, specifichi la crittografia lato server quando avvii il caricamento in più parti. Si aggiungi la proprietà `ObjectMetadata` mediante una chiamata al metodo `InitiateMultipartUploadRequest.setObjectMetadata()`. Per ulteriori informazioni, consulta [Utilizzo dell'API (di basso livello AWS SDKs )](mpu-upload-object.md#mpu-upload-low-level).

Non puoi direttamente modificare lo stato di crittografia di un oggetto (la crittografia di un oggetto non crittografato o la decrittografia dell'oggetto crittografato). Per modificare lo stato di crittografia di un oggetto, effettuare una copia dell'oggetto, specificando lo stato di crittografia per la copia e poi eliminare l'oggetto originale. Amazon S3 esegue la crittografia dell'oggetto copiato solo se hai effettuato una richiesta specifica di crittografia lato server. Per richiedere la crittografia dell'oggetto copiato tramite l'API Java, utilizza la proprietà `ObjectMetadata` per specificare la crittografia lato server in `CopyObjectRequest`, come mostrato nell'esempio di codice Java riportato di seguito.

**Example Esempio**  
L'esempio che segue mostra come impostare la crittografia lato server utilizzando AWS SDK per Java. Mostra come eseguire le seguenti operazioni:  
+ Carica un nuovo oggetto usando SSE-S3.
+ Modifica lo stato di crittografia di un oggetto (in questo esempio, crittografare un oggetto precedentemente non crittografato) eseguendo una copia dell'oggetto.
+ Controlla lo stato di crittografia dell'oggetto.
Per ulteriori informazioni sulla crittografia lato server, consulta [Utilizzo della REST API](#SSEUsingRESTAPI). Per istruzioni su come creare e testare un esempio funzionante, consulta [Getting Started nella Developer Guide](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html). AWS SDK per Java   

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.internal.SSEResultBase;
import com.amazonaws.services.s3.model.*;

import java.io.ByteArrayInputStream;

public class SpecifyServerSideEncryption {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyNameToEncrypt = "*** Key name for an object to upload and encrypt ***";
        String keyNameToCopyAndEncrypt = "*** Key name for an unencrypted object to be encrypted by copying ***";
        String copiedObjectKeyName = "*** Key name for the encrypted copy of the unencrypted object ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Upload an object and encrypt it with SSE.
            uploadObjectWithSSEEncryption(s3Client, bucketName, keyNameToEncrypt);

            // Upload a new unencrypted object, then change its encryption state
            // to encrypted by making a copy.
            changeSSEEncryptionStatusByCopying(s3Client,
                    bucketName,
                    keyNameToCopyAndEncrypt,
                    copiedObjectKeyName);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    private static void uploadObjectWithSSEEncryption(AmazonS3 s3Client, String bucketName, String keyName) {
        String objectContent = "Test object encrypted with SSE";
        byte[] objectBytes = objectContent.getBytes();

        // Specify server-side encryption.
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(objectBytes.length);
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        PutObjectRequest putRequest = new PutObjectRequest(bucketName,
                keyName,
                new ByteArrayInputStream(objectBytes),
                objectMetadata);

        // Upload the object and check its encryption status.
        PutObjectResult putResult = s3Client.putObject(putRequest);
        System.out.println("Object \"" + keyName + "\" uploaded with SSE.");
        printEncryptionStatus(putResult);
    }

    private static void changeSSEEncryptionStatusByCopying(AmazonS3 s3Client,
            String bucketName,
            String sourceKey,
            String destKey) {
        // Upload a new, unencrypted object.
        PutObjectResult putResult = s3Client.putObject(bucketName, sourceKey, "Object example to encrypt by copying");
        System.out.println("Unencrypted object \"" + sourceKey + "\" uploaded.");
        printEncryptionStatus(putResult);

        // Make a copy of the object and use server-side encryption when storing the
        // copy.
        CopyObjectRequest request = new CopyObjectRequest(bucketName,
                sourceKey,
                bucketName,
                destKey);
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        request.setNewObjectMetadata(objectMetadata);

        // Perform the copy operation and display the copy's encryption status.
        CopyObjectResult response = s3Client.copyObject(request);
        System.out.println("Object \"" + destKey + "\" uploaded with SSE.");
        printEncryptionStatus(response);

        // Delete the original, unencrypted object, leaving only the encrypted copy in
        // Amazon S3.
        s3Client.deleteObject(bucketName, sourceKey);
        System.out.println("Unencrypted object \"" + sourceKey + "\" deleted.");
    }

    private static void printEncryptionStatus(SSEResultBase response) {
        String encryptionStatus = response.getSSEAlgorithm();
        if (encryptionStatus == null) {
            encryptionStatus = "Not encrypted with SSE";
        }
        System.out.println("Object encryption status is: " + encryptionStatus);
    }
}
```

------
#### [ .NET ]

Quando carichi un oggetto, puoi indirizzare Amazon S3 per crittografarlo. Per modificare lo stato di crittografia di un oggetto esistente, effettuare una copia dell'oggetto ed eliminare l'oggetto di origine. Per impostazione predefinita, l'operazione di copia crittografa la destinazione solo se si richiede esplicitamente la crittografia lato server dell'oggetto di destinazione. Per specificare SSE-S3 in `CopyObjectRequest`, aggiungi quanto segue:

```
 ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
```

Per un esempio di come copiare un oggetto, consulta [Usando il AWS SDKs](copy-object.md#CopyingObjectsUsingSDKs). 

Nel seguente esempio viene caricato un oggetto. Nella richiesta l'esempio indirizza Amazon S3 per crittografare l'oggetto. L'esempio poi recupera i metadati dell'oggetto e verifica i metodi di crittografia utilizzati. Per informazioni sulla configurazione e l'esecuzione degli esempi di codice, consulta [Getting Started with the AWS SDK for .NET nella AWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET *Developer Guide*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class SpecifyServerSideEncryptionTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for object created ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            WritingAnObjectAsync().Wait();
        }

        static async Task WritingAnObjectAsync()
        {
            try
            {
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    ContentBody = "sample text",
                    ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
                };

                var putResponse = await client.PutObjectAsync(putRequest);

                // Determine the encryption state of an object.
                GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };
                GetObjectMetadataResponse response = await client.GetObjectMetadataAsync(metadataRequest);
                ServerSideEncryptionMethod objectEncryption = response.ServerSideEncryptionMethod;

                Console.WriteLine("Encryption method used: {0}", objectEncryption.ToString());
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------
#### [ PHP ]

Questo argomento mostra come utilizzare le classi della versione 3 di AWS SDK per PHP per aggiungere SSE-S3 agli oggetti caricati su Amazon S3. Per ulteriori informazioni sull'API AWS SDK for Ruby, [AWS vai a SDK for Ruby](https://docs.aws.amazon.com/sdkforruby/api/index.html) - Versione 2.

Per caricare un oggetto su Amazon S3, si utilizza il metodo [Aws\$1S3\$1S3Client::putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject). Per aggiungere l'intestazione di richiesta `x-amz-server-side-encryption` alla richiesta di caricamento, specificare il parametro`ServerSideEncryption` con il valore `AES256`, come mostrato nel seguente esempio di codice. Per ulteriori informazioni sulla crittografia lato server delle richieste, consultare [Utilizzo della REST API](#SSEUsingRESTAPI).

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

// $filepath should be an absolute path to a file on disk.
$filepath = '*** Your File Path ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Upload a file with server-side encryption.
$result = $s3->putObject([
    'Bucket'               => $bucket,
    'Key'                  => $keyname,
    'SourceFile'           => $filepath,
    'ServerSideEncryption' => 'AES256',
]);
```

Nella risposta Amazon S3 restituisce l'intestazione `x-amz-server-side-encryption` con il valore dell'algoritmo di crittografia utilizzato per crittografare i dati dell'oggetto. 

Quando si caricano oggetti di grandi dimensioni utilizzando l'API per il caricamento in più parti, puoi specificare SSE-S3 per gli oggetti che carichi, come segue: 
+ Quando utilizzi l'operazione API di caricamento multiparte di basso livello, specifica la crittografia lato server quando chiami il metodo [Aws\$1 S3\$1 S3Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload):: (). createMultipartUpload Per aggiungere l'intestazione di richiesta `x-amz-server-side-encryption` alla richiesta, specificare la chiave `array` del parametro `ServerSideEncryption` con il valore `AES256`. Per ulteriori informazioni sull'operazione API per il caricamento in più parti di basso livello, consulta [Utilizzo dell'API (di basso livello AWS SDKs )](mpu-upload-object.md#mpu-upload-low-level).
+ Quando utilizzi l'operazione API di caricamento multiparte di alto livello, specifica la crittografia lato server utilizzando il parametro dell'operazione API. `ServerSideEncryption` [CreateMultipartUpload](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload) Per un esempio di utilizzo del metodo `setOption()` con l'operazione API per il caricamento in più parti di alto livello, consulta [Caricamento di un oggetto utilizzando il caricamento in più parti](mpu-upload-object.md).

Per determinare lo stato di crittografia di un oggetto esistente, recuperare i metadati dell'oggetto richiamando il metodo [Aws\$1S3\$1S3Client::headObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#headobject), come mostrato nell'esempio di codice PHP riportato di seguito.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Check which server-side encryption algorithm is used.
$result = $s3->headObject([
    'Bucket' => $bucket,
    'Key'    => $keyname,
]);
echo $result['ServerSideEncryption'];
```

Per modificare lo stato di crittografia di un oggetto esistente, effettuare una copia dell'oggetto utilizzando il metodo [Aws\$1S3\$1S3Client::copyObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#copyobject) ed eliminare l'oggetto di origine. Per impostazione predefinita, `copyObject()` non esegue la crittografia della destinazione, a meno che non si richieda esplicitamente la crittografia lato server dell'oggetto di destinazione utilizzando il parametro `ServerSideEncryption` con il valore `AES256`. Il seguente esempio di codice PHP esegue una copia di un oggetto e aggiunge la crittografia lato server all'oggetto copiato.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';

$targetBucket = '*** Your Target Bucket Name ***';
$targetKeyname = '*** Your Target Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Copy an object and add server-side encryption.
$s3->copyObject([
    'Bucket'               => $targetBucket,
    'Key'                  => $targetKeyname,
    'CopySource'           => "$sourceBucket/$sourceKeyname",
    'ServerSideEncryption' => 'AES256',
]);
```

Per ulteriori informazioni, consulta i seguenti argomenti:
+ [AWS SDK per PHP per la classe Amazon S3 Aws\$1 S3\$1 S3Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html) 
+ [Documentazione di AWS SDK per PHP](https://aws.amazon.com/documentation/sdk-for-php/)

------
#### [ Ruby ]

Quando si utilizza AWS SDK per Ruby per caricare un oggetto, è possibile specificare che l'oggetto venga archiviato crittografato quando è inattivo con SSE-S3. Dopo essere stato letto, l'oggetto viene automaticamente decrittografato.

Il seguente esempio di AWS SDK per Ruby versione 3 dimostra come specificare che un file caricato su Amazon S3 sia crittografato quando è inattivo.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectPutSseWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  def put_object_encrypted(object_content, encryption)
    @object.put(body: object_content, server_side_encryption: encryption)
    true
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't put your content to #{object.key}. Here's why: #{e.message}"
    false
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-encrypted-content"
  object_content = "This is my super-secret content."
  encryption = "AES256"

  wrapper = ObjectPutSseWrapper.new(Aws::S3::Object.new(bucket_name, object_content))
  return unless wrapper.put_object_encrypted(object_content, encryption)

  puts "Put your content into #{bucket_name}:#{object_key} and encrypted it with #{encryption}."
end

run_demo if $PROGRAM_NAME == __FILE__
```

L'esempio di codice seguente dimostra come determinare lo stato di crittografia di un oggetto esistente.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectGetEncryptionWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  # Gets the object into memory.
  #
  # @return [Aws::S3::Types::GetObjectOutput, nil] The retrieved object data if successful; otherwise nil.
  def object
    @object.get
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't get object #{@object.key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-object.txt"

  wrapper = ObjectGetEncryptionWrapper.new(Aws::S3::Object.new(bucket_name, object_key))
  obj_data = wrapper.get_object
  return unless obj_data

  encryption = obj_data.server_side_encryption.nil? ? 'no' : obj_data.server_side_encryption
  puts "Object #{object_key} uses #{encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

Se la crittografia lato server non viene utilizzata per l'oggetto archiviato in Amazon S3, il metodo restituisce `null`.

Per modificare lo stato di crittografia di un oggetto esistente, effettuare una copia dell'oggetto ed eliminare l'oggetto di origine. Per default, i metodi di copia non eseguono la crittografia della destinazione, a meno che non si richieda esplicitamente la crittografia lato server. È possibile richiedere la crittografia dell'oggetto di destinazione specificando il valore `server_side_encryption` nell'argomento hash dell'opzione, come mostrato nel seguente esempio di codice Ruby. L'esempio di codice dimostra come copiare un oggetto e crittografare la copia con SSE-S3. 

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectCopyEncryptWrapper
  attr_reader :source_object

  # @param source_object [Aws::S3::Object] An existing Amazon S3 object. This is used as the source object for
  #                                        copy actions.
  def initialize(source_object)
    @source_object = source_object
  end

  # Copy the source object to the specified target bucket, rename it with the target key, and encrypt it.
  #
  # @param target_bucket [Aws::S3::Bucket] An existing Amazon S3 bucket where the object is copied.
  # @param target_object_key [String] The key to give the copy of the object.
  # @return [Aws::S3::Object, nil] The copied object when successful; otherwise, nil.
  def copy_object(target_bucket, target_object_key, encryption)
    @source_object.copy_to(bucket: target_bucket.name, key: target_object_key, server_side_encryption: encryption)
    target_bucket.object(target_object_key)
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't copy #{@source_object.key} to #{target_object_key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  source_bucket_name = "amzn-s3-demo-bucket1"
  source_key = "my-source-file.txt"
  target_bucket_name = "amzn-s3-demo-bucket2"
  target_key = "my-target-file.txt"
  target_encryption = "AES256"

  source_bucket = Aws::S3::Bucket.new(source_bucket_name)
  wrapper = ObjectCopyEncryptWrapper.new(source_bucket.object(source_key))
  target_bucket = Aws::S3::Bucket.new(target_bucket_name)
  target_object = wrapper.copy_object(target_bucket, target_key, target_encryption)
  return unless target_object

  puts "Copied #{source_key} from #{source_bucket_name} to #{target_object.bucket_name}:#{target_object.key} and "\
       "encrypted the target with #{target_object.server_side_encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

------

## Usando il AWS CLI
<a name="sse-s3-aws-cli"></a>

Per specificare SSE-S3 quando caricate un oggetto utilizzando il AWS CLI, utilizzate il seguente esempio.

```
aws s3api put-object --bucket amzn-s3-demo-bucket1 --key object-key-name --server-side-encryption AES256  --body file path
```

Per ulteriori informazioni, consulta [put-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) in *Riferimenti della AWS CLI *. [Per specificare SSE-S3 quando si copia un oggetto utilizzando il, vedere copy-object. AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html)

## Usando CloudFormation
<a name="ss3-s3-cfn"></a>

*Per esempi di configurazione della crittografia utilizzando CloudFormation, consulta l'esempio [Creare un bucket con crittografia predefinita](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_with_default_encryption) e [Creare un bucket utilizzando la crittografia AWS KMS lato server con una chiave S3 Bucket](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_using_AWS_KMS_server-side_encryption_with_an_S3_Bucket_Key) nell'argomento della Guida per l'`AWS::S3::Bucket ServerSideEncryptionRule`utente.AWS CloudFormation * 