

La AWS SDK per .NET V3 è entrata in modalità manutenzione.

[Ti consigliamo di migrare alla V4.AWS SDK per .NET](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) Per ulteriori dettagli e informazioni su come eseguire la migrazione, consulta il nostro annuncio sulla modalità di [manutenzione](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

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

# Sicurezza per questo AWS prodotto o servizio
<a name="security"></a>

La sicurezza cloud di Amazon Web Services (AWS) è la priorità più alta. In qualità di cliente AWS , è possibile trarre vantaggio da un’architettura di data center e di rete progettata per soddisfare i requisiti delle organizzazioni più esigenti a livello di sicurezza. La sicurezza è una responsabilità condivisa tra AWS te e te. Il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) descrive questo come sicurezza del cloud e sicurezza nel cloud.

**Security of the Cloud**: AWS è responsabile della protezione dell'infrastruttura che gestisce tutti i servizi offerti nel AWS Cloud e della fornitura di servizi che è possibile utilizzare in modo sicuro. La nostra responsabilità in AWS materia di sicurezza è la massima priorità e l'efficacia della nostra sicurezza viene regolarmente testata e verificata da revisori di terze parti nell'ambito dei Programmi di [AWS conformità](https://aws.amazon.com/compliance/programs/).

**Sicurezza nel cloud: la** responsabilità dell'utente è determinata dal AWS servizio utilizzato e da altri fattori, tra cui la sensibilità dei dati, i requisiti dell'organizzazione e le leggi e i regolamenti applicabili.

Questo AWS prodotto o servizio segue il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) attraverso i servizi specifici di Amazon Web Services (AWS) che supporta. Per informazioni sulla sicurezza dei AWS servizi, consulta la [pagina della documentazione sulla sicurezza del AWS servizio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) e [AWS i servizi che rientrano nell'ambito delle iniziative di AWS conformità previste dal programma di conformità](https://aws.amazon.com/compliance/services-in-scope/).

**Topics**
+ [Protezione dei dati](data-protection.md)
+ [Identity and Access Management](security-iam.md)
+ [Convalida della conformità](compliance-validation.md)
+ [Resilienza](disaster-recovery-resiliency.md)
+ [Sicurezza dell'infrastruttura](infrastructure-security.md)
+ [Applicazione di una versione minima di TLS](enforcing-tls.md)
+ [Migrazione del client di crittografia S3 (da V1 a V2)](s3-encryption-migration-v1-v2.md)
+ [Migrazione del client di crittografia S3 (da V2 a V4)](s3-encryption-migration-v2-v4.md)

# Protezione dei dati in questo AWS prodotto o servizio
<a name="data-protection"></a>

Il [modello di responsabilità AWS condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) di si applica alla protezione dei dati in questo AWS prodotto o servizio. Come descritto in questo modello, AWS è responsabile della protezione dell'infrastruttura globale che gestisce tutti i Cloud AWS. L’utente è responsabile del controllo dei contenuti ospitati su questa infrastruttura. L’utente è inoltre responsabile della configurazione della protezione e delle attività di gestione per i Servizi AWS utilizzati. Per maggiori informazioni sulla privacy dei dati, consulta le [Domande frequenti sulla privacy dei dati](https://aws.amazon.com/compliance/data-privacy-faq/). Per informazioni sulla protezione dei dati in Europa, consulta il post del blog relativo al [AWS Modello di responsabilità condivisa e GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) nel *AWS Blog sulla sicurezza*.

Ai fini della protezione dei dati, consigliamo di proteggere Account AWS le credenziali e configurare i singoli utenti con AWS IAM Identity Center or AWS Identity and Access Management (IAM). In tal modo, a ogni utente verranno assegnate solo le autorizzazioni necessarie per svolgere i suoi compiti. Suggeriamo, inoltre, di proteggere i dati nei seguenti modi:
+ Utilizza l’autenticazione a più fattori (MFA) con ogni account.
+  SSL/TLS Da utilizzare per comunicare con AWS le risorse. È richiesto TLS 1.2 ed è consigliato TLS 1.3.
+ Configura l'API e la registrazione delle attività degli utenti con AWS CloudTrail. Per informazioni sull'utilizzo dei CloudTrail percorsi per acquisire AWS le attività, consulta [Lavorare con i CloudTrail percorsi](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) nella *Guida per l'AWS CloudTrail utente*.
+ Utilizza soluzioni di AWS crittografia, insieme a tutti i controlli di sicurezza predefiniti all'interno Servizi AWS.
+ Utilizza i servizi di sicurezza gestiti avanzati, come Amazon Macie, che aiutano a individuare e proteggere i dati sensibili archiviati in Amazon S3.
+ Se hai bisogno di moduli crittografici convalidati FIPS 140-3 per accedere AWS tramite un'interfaccia a riga di comando o un'API, usa un endpoint FIPS. Per ulteriori informazioni sugli endpoint FIPS disponibili, consulta il [Federal Information Processing Standard (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

Ti consigliamo di non inserire mai informazioni riservate o sensibili, ad esempio gli indirizzi e-mail dei clienti, nei tag o nei campi di testo in formato libero, ad esempio nel campo **Nome**. Ciò include quando si lavora con questo AWS prodotto o servizio o altro Servizi AWS utilizzando la console, l'API o. AWS CLI AWS SDKs I dati inseriti nei tag o nei campi di testo in formato libero utilizzati per i nomi possono essere utilizzati per i la fatturazione o i log di diagnostica. Quando si fornisce un URL a un server esterno, suggeriamo vivamente di non includere informazioni sulle credenziali nell’URL per convalidare la richiesta al server.

# Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) è un software Servizio AWS che aiuta un amministratore a controllare in modo sicuro l'accesso alle AWS risorse. Gli amministratori IAM controllano chi può essere *autenticato* (effettuato l'accesso) e *autorizzato* (disporre delle autorizzazioni) a utilizzare le risorse. AWS IAM è uno Servizio AWS strumento che puoi utilizzare senza costi aggiuntivi.

**Topics**
+ [Destinatari](#security_iam_audience)
+ [Autenticazione con identità](#security_iam_authentication)
+ [Gestione dell’accesso tramite policy](#security_iam_access-manage)
+ [Come Servizi AWS lavorare con IAM](#security_iam_service-with-iam)
+ [Risoluzione dei problemi di AWS identità e accesso](#security_iam_troubleshoot)

## Destinatari
<a name="security_iam_audience"></a>

Il modo in cui usi AWS Identity and Access Management (IAM) varia a seconda del lavoro che AWS svolgi.

**Utente del servizio**: se lo utilizzi Servizi AWS per svolgere il tuo lavoro, l'amministratore ti fornisce le credenziali e le autorizzazioni necessarie. Man mano che utilizzi più AWS funzionalità per svolgere il tuo lavoro, potresti aver bisogno di autorizzazioni aggiuntive. La comprensione della gestione dell’accesso consente di richiedere le autorizzazioni corrette all’amministratore. Se non riesci ad accedere a una funzionalità di AWS, consulta [Risoluzione dei problemi di AWS identità e accesso](#security_iam_troubleshoot) o consulta la guida per l'utente della funzionalità Servizio AWS che stai utilizzando.

**Amministratore del servizio**: se sei responsabile delle AWS risorse della tua azienda, probabilmente hai pieno accesso a AWS. È tuo compito determinare a quali AWS funzionalità e risorse devono accedere gli utenti del servizio. Devi quindi inviare le richieste all’amministratore IAM per modificare le autorizzazioni degli utenti del servizio. Esamina le informazioni contenute in questa pagina per comprendere i concetti di base relativi a IAM. Per saperne di più su come la tua azienda può utilizzare IAM con AWS, consulta la guida per l'utente del Servizio AWS software che stai utilizzando.

**Amministratore IAM**: un amministratore IAM potrebbe essere interessato a ottenere dei dettagli su come scrivere policy per gestire l'accesso a AWS. Per visualizzare esempi di policy AWS basate sull'identità che puoi utilizzare in IAM, consulta la guida per l'utente di quella Servizio AWS che stai utilizzando.

## Autenticazione con identità
<a name="security_iam_authentication"></a>

L'autenticazione è il modo in cui accedi AWS utilizzando le tue credenziali di identità. Devi autenticarti come utente IAM o assumendo un ruolo IAM. Utente root dell'account AWS

Puoi accedere come identità federata utilizzando credenziali provenienti da una fonte di identità come AWS IAM Identity Center (IAM Identity Center), autenticazione Single Sign-On o credenziali. Google/Facebook Per ulteriori informazioni sull’accesso, consulta [Come accedere all’ Account AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) nella *Guida per l’utente di Accedi ad AWS *.

Per l'accesso programmatico, AWS fornisce un SDK e una CLI per firmare crittograficamente le richieste. Per ulteriori informazioni, consulta [AWS Signature Version 4 per le richieste API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) nella *Guida per l’utente di IAM*.

### Account AWS utente root
<a name="security_iam_authentication-rootuser"></a>

 Quando si crea un Account AWS, si inizia con un'identità di accesso denominata *utente Account AWS root* che ha accesso completo a tutte Servizi AWS le risorse. Consigliamo vivamente di non utilizzare l’utente root per le attività quotidiane. Per le attività che richiedono le credenziali dell’utente root, consulta [Attività che richiedono le credenziali dell’utente root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) nella *Guida per l’utente IAM*. 

### Identità federata
<a name="security_iam_authentication-federated"></a>

Come procedura ottimale, richiedi agli utenti umani di utilizzare la federazione con un provider di identità per accedere Servizi AWS utilizzando credenziali temporanee.

Un'*identità federata* è un utente della directory aziendale, del provider di identità Web o Directory Service che accede Servizi AWS utilizzando le credenziali di una fonte di identità. Le identità federate assumono ruoli che forniscono credenziali temporanee.

Per la gestione centralizzata degli accessi, si consiglia di utilizzare AWS IAM Identity Center. Per ulteriori informazioni, consulta [Che cos’è il Centro identità IAM?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) nella *Guida per l’utente di AWS IAM Identity Center *.

### Utenti e gruppi IAM
<a name="security_iam_authentication-iamuser"></a>

Un *[utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* è una identità che dispone di autorizzazioni specifiche per una singola persona o applicazione. Ti consigliamo di utilizzare credenziali temporanee invece di utenti IAM con credenziali a lungo termine. *Per ulteriori informazioni, consulta [Richiedere agli utenti umani di utilizzare la federazione con un provider di identità per accedere AWS utilizzando credenziali temporanee](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) nella Guida per l'utente IAM.*

Un [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) specifica una raccolta di utenti IAM e semplifica la gestione delle autorizzazioni per gestire gruppi di utenti di grandi dimensioni. Per ulteriori informazioni, consulta [Casi d’uso per utenti IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) nella *Guida per l’utente di IAM*.

### Ruoli IAM
<a name="security_iam_authentication-iamrole"></a>

Un *[ruolo IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* è un’identità con autorizzazioni specifiche che fornisce credenziali temporanee. Puoi assumere un ruolo [passando da un ruolo utente a un ruolo IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) o chiamando un'operazione AWS CLI o AWS API. Per ulteriori informazioni, consulta [Metodi per assumere un ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) nella *Guida per l’utente di IAM*.

I ruoli IAM sono utili per l’accesso degli utenti federati, le autorizzazioni utente IAM temporanee, l’accesso multi-account, l’accesso multi-servizio e le applicazioni in esecuzione su Amazon EC2. Per maggiori informazioni, consultare [Accesso a risorse multi-account in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) nella *Guida per l’utente IAM*.

## Gestione dell’accesso tramite policy
<a name="security_iam_access-manage"></a>

Puoi controllare l'accesso AWS creando policy e associandole a AWS identità o risorse. Una policy definisce le autorizzazioni quando è associata a un'identità o a una risorsa. AWS valuta queste politiche quando un preside effettua una richiesta. La maggior parte delle politiche viene archiviata AWS come documenti JSON. Per maggiori informazioni sui documenti delle policy JSON, consulta [Panoramica delle policy JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) nella *Guida per l’utente IAM*.

Utilizzando le policy, gli amministratori specificano chi ha accesso a cosa definendo quale **principale** può eseguire **azioni** su quali **risorse** e in quali **condizioni**.

Per impostazione predefinita, utenti e ruoli non dispongono di autorizzazioni. Un amministratore IAM crea le policy IAM e le aggiunge ai ruoli, che gli utenti possono quindi assumere. Le policy IAM definiscono le autorizzazioni indipendentemente dal metodo utilizzato per eseguirle.

### Policy basate sull’identità
<a name="security_iam_access-manage-id-based-policies"></a>

Le policy basate su identità sono documenti di policy di autorizzazione JSON che è possibile collegare a un’identità (utente, gruppo o ruolo). Tali policy controllano le operazioni autorizzate per l’identità, nonché le risorse e le condizioni in cui possono essere eseguite. Per informazioni su come creare una policy basata su identità, consultare [Definizione di autorizzazioni personalizzate IAM con policy gestite dal cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) nella *Guida per l’utente IAM*.

Le policy basate su identità possono essere *policy in linea* (con embedding direttamente in una singola identità) o *policy gestite* (policy autonome collegate a più identità). Per informazioni su come scegliere tra una policy gestita o una policy inline, consulta [Scegliere tra policy gestite e policy in linea](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) nella *Guida per l’utente di IAM*.

### Policy basate sulle risorse
<a name="security_iam_access-manage-resource-based-policies"></a>

Le policy basate su risorse sono documenti di policy JSON che è possibile collegare a una risorsa. Gli esempi includono le *policy di trust dei ruoli* IAM e le *policy dei bucket* di Amazon S3. Nei servizi che supportano policy basate sulle risorse, gli amministratori dei servizi possono utilizzarli per controllare l’accesso a una risorsa specifica. In una policy basata sulle risorse è obbligatorio [specificare un’entità principale](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html).

Le policy basate sulle risorse sono policy inline che si trovano in tale servizio. Non è possibile utilizzare le policy AWS gestite di IAM in una policy basata sulle risorse.

### Liste di controllo degli accessi () ACLs
<a name="security_iam_access-manage-acl"></a>

Le liste di controllo degli accessi (ACLs) controllano quali principali (membri dell'account, utenti o ruoli) dispongono delle autorizzazioni per accedere a una risorsa. ACLs sono simili alle politiche basate sulle risorse, sebbene non utilizzino il formato del documento di policy JSON.

Amazon S3 e Amazon VPC sono esempi di servizi che supportano. AWS WAF ACLs Per ulteriori informazioni ACLs, consulta la [panoramica della lista di controllo degli accessi (ACL)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) nella *Amazon Simple Storage Service Developer Guide*.

### Altri tipi di policy
<a name="security_iam_access-manage-other-policies"></a>

AWS supporta tipi di policy aggiuntivi che possono impostare le autorizzazioni massime concesse dai tipi di policy più comuni:
+ **Limiti delle autorizzazioni**: imposta il numero massimo di autorizzazioni che una policy basata su identità ha la possibilità di concedere a un’entità IAM. Per ulteriori informazioni, consulta [Limiti delle autorizzazioni per le entità IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) nella *Guida per l’utente di IAM*.
+ **Politiche di controllo del servizio (SCPs)**: specificano le autorizzazioni massime per un'organizzazione o un'unità organizzativa in. AWS Organizations Per ulteriori informazioni, consultare [Policy di controllo dei servizi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) nella *Guida per l’utente di AWS Organizations *.
+ **Politiche di controllo delle risorse (RCPs)**: imposta le autorizzazioni massime disponibili per le risorse nei tuoi account. Per ulteriori informazioni, consulta [Politiche di controllo delle risorse (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) nella *Guida per l'AWS Organizations utente*.
+ **Policy di sessione**: policy avanzate passate come parametro quando si crea una sessione temporanea per un ruolo o un utente federato. Per maggiori informazioni, consultare [Policy di sessione](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) nella *Guida per l’utente IAM*.

### Più tipi di policy
<a name="security_iam_access-manage-multiple-policies."></a>

Quando a una richiesta si applicano più tipi di policy, le autorizzazioni risultanti sono più complicate da comprendere. Per scoprire come si AWS determina se consentire o meno una richiesta quando sono coinvolti più tipi di policy, consulta [Logica di valutazione delle policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) nella *IAM User Guide*.

## Come Servizi AWS lavorare con IAM
<a name="security_iam_service-with-iam"></a>

Per avere una visione di alto livello di come Servizi AWS funziona la maggior parte delle funzionalità IAM, consulta [AWS i servizi che funzionano con IAM nella IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) *User Guide*.

Per scoprire come utilizzare uno specifico Servizio AWS con IAM, consulta la sezione sulla sicurezza della Guida per l'utente del servizio pertinente.

## Risoluzione dei problemi di AWS identità e accesso
<a name="security_iam_troubleshoot"></a>

Utilizza le seguenti informazioni per aiutarti a diagnosticare e risolvere i problemi più comuni che potresti riscontrare quando lavori con un AWS IAM.

**Topics**
+ [Non sono autorizzato a eseguire alcuna azione in AWS](#security_iam_troubleshoot-no-permissions)
+ [Non sono autorizzato a eseguire iam: PassRole](#security_iam_troubleshoot-passrole)
+ [Voglio consentire a persone esterne a me di accedere Account AWS alle mie AWS risorse](#security_iam_troubleshoot-cross-account-access)

### Non sono autorizzato a eseguire alcuna azione in AWS
<a name="security_iam_troubleshoot-no-permissions"></a>

Se ricevi un errore che indica che non sei autorizzato a eseguire un’operazione, le tue policy devono essere aggiornate per poter eseguire l’operazione.

L’errore di esempio seguente si verifica quando l’utente IAM `mateojackson` prova a utilizzare la console per visualizzare i dettagli relativi a una risorsa `my-example-widget` fittizia ma non dispone di autorizzazioni `awes:GetWidget` fittizie.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: awes:GetWidget on resource: my-example-widget
```

In questo caso, la policy per l’utente `mateojackson` deve essere aggiornata per consentire l’accesso alla risorsa `my-example-widget` utilizzando l’azione `awes:GetWidget`.

Se hai bisogno di aiuto, contatta il tuo AWS amministratore. L’amministratore è la persona che ti ha fornito le credenziali di accesso.

### Non sono autorizzato a eseguire iam: PassRole
<a name="security_iam_troubleshoot-passrole"></a>

Se ricevi un errore che indica che non sei autorizzato a eseguire l'operazione `iam:PassRole`, le tue policy devono essere aggiornate per poter passare un ruolo a AWS.

Alcuni Servizi AWS consentono di passare un ruolo esistente a quel servizio invece di creare un nuovo ruolo di servizio o un ruolo collegato al servizio. Per eseguire questa operazione, è necessario disporre delle autorizzazioni per trasmettere il ruolo al servizio.

L'errore di esempio seguente si verifica quando un utente IAM denominato `marymajor` cerca di utilizzare la console per eseguire un'operazione in AWS. Tuttavia, l'operazione richiede che il servizio disponga delle autorizzazioni concesse da un ruolo di servizio. Mary non dispone delle autorizzazioni per trasmettere il ruolo al servizio.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

In questo caso, le policy di Mary devono essere aggiornate per poter eseguire l’operazione `iam:PassRole`.

Se hai bisogno di aiuto, contatta il tuo AWS amministratore. L’amministratore è la persona che ti ha fornito le credenziali di accesso.

### Voglio consentire a persone esterne a me di accedere Account AWS alle mie AWS risorse
<a name="security_iam_troubleshoot-cross-account-access"></a>

È possibile creare un ruolo con il quale utenti in altri account o persone esterne all’organizzazione possono accedere alle tue risorse. È possibile specificare chi è attendibile per l’assunzione del ruolo. Per i servizi che supportano politiche basate sulle risorse o liste di controllo degli accessi (ACLs), puoi utilizzare tali politiche per concedere alle persone l'accesso alle tue risorse.

Per maggiori informazioni, consulta gli argomenti seguenti:
+ Per sapere se AWS supporta queste funzionalità, consulta. [Come Servizi AWS lavorare con IAM](#security_iam_service-with-iam)
+ Per scoprire come fornire l'accesso alle tue risorse attraverso Account AWS le risorse di tua proprietà, consulta [Fornire l'accesso a un utente IAM in un altro Account AWS di tua proprietà](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) nella *IAM User Guide*.
+ Per scoprire come fornire l'accesso alle tue risorse a terze parti Account AWS, consulta [Fornire l'accesso a soggetti Account AWS di proprietà di terze parti](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) nella *Guida per l'utente IAM*.
+ Per informazioni su come fornire l'accesso tramite la federazione delle identità, consulta [Fornire l'accesso a utenti autenticati esternamente (federazione delle identità)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) nella *Guida per l'utente IAM*.
+ Per informazioni sulle differenze di utilizzo tra ruoli e policy basate su risorse per l’accesso multi-account, consulta [Accesso a risorse multi-account in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) nella *Guida per l’utente di IAM*.

# Convalida della conformità per questo AWS prodotto o servizio
<a name="compliance-validation"></a>

Per sapere se un Servizio AWS programma rientra nell'ambito di specifici programmi di conformità, consulta Servizi AWS la sezione [Scope by Compliance Program Servizi AWS](https://aws.amazon.com/compliance/services-in-scope/) e scegli il programma di conformità che ti interessa. Per informazioni generali, consulta Programmi di [AWS conformità Programmi](https://aws.amazon.com/compliance/programs/) di di .

È possibile scaricare report di audit di terze parti utilizzando AWS Artifact. Per ulteriori informazioni, consulta [Scaricamento dei report in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html) .

La vostra responsabilità di conformità durante l'utilizzo Servizi AWS è determinata dalla sensibilità dei dati, dagli obiettivi di conformità dell'azienda e dalle leggi e dai regolamenti applicabili. Per ulteriori informazioni sulla responsabilità di conformità durante l'utilizzo Servizi AWS, consulta la [Documentazione AWS sulla sicurezza](https://docs.aws.amazon.com/security/).

Questo AWS prodotto o servizio segue il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) attraverso i servizi specifici di Amazon Web Services (AWS) che supporta. Per informazioni sulla sicurezza dei AWS servizi, consulta la [pagina della documentazione sulla sicurezza del AWS servizio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) e [AWS i servizi che rientrano nell'ambito delle iniziative di AWS conformità previste dal programma di conformità](https://aws.amazon.com/compliance/services-in-scope/).

# Resilienza per questo AWS prodotto o servizio
<a name="disaster-recovery-resiliency"></a>

L'infrastruttura AWS globale è costruita attorno a zone Regioni AWS di disponibilità. 

Regioni AWS forniscono più zone di disponibilità fisicamente separate e isolate, collegate con reti a bassa latenza, ad alto throughput e altamente ridondanti. 

Con le zone di disponibilità è possibile progettare e gestire applicazioni e database che eseguono automaticamente il failover tra zone di disponibilità senza interruzioni. Le zone di disponibilità sono più disponibili, tolleranti ai guasti e scalabili rispetto alle infrastrutture a data center singolo o multiplo tradizionali. 

[Per ulteriori informazioni su AWS regioni e zone di disponibilità, vedere Global Infrastructure.AWS](https://aws.amazon.com/about-aws/global-infrastructure/)

Questo AWS prodotto o servizio segue il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) attraverso i servizi specifici di Amazon Web Services (AWS) che supporta. Per informazioni sulla sicurezza dei AWS servizi, consulta la [pagina della documentazione sulla sicurezza del AWS servizio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) e [AWS i servizi che rientrano nell'ambito delle iniziative di AWS conformità previste dal programma di conformità](https://aws.amazon.com/compliance/services-in-scope/).

# Sicurezza dell'infrastruttura per questo AWS prodotto o servizio
<a name="infrastructure-security"></a>

Questo AWS prodotto o servizio utilizza servizi gestiti ed è pertanto protetto dalla sicurezza di rete AWS globale. Per informazioni sui servizi AWS di sicurezza e su come AWS protegge l'infrastruttura, consulta [AWS Cloud Security](https://aws.amazon.com/security/). Per progettare il tuo AWS ambiente utilizzando le migliori pratiche per la sicurezza dell'infrastruttura, vedi [Infrastructure Protection](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) in *Security Pillar AWS Well‐Architected* Framework.

Utilizzate chiamate API AWS pubblicate per accedere a questo AWS Prodotto o Servizio attraverso la rete. I client devono supportare quanto segue:
+ Transport Layer Security (TLS). È richiesto TLS 1.2 ed è consigliato TLS 1.3.
+ Suite di cifratura con Perfect Forward Secrecy (PFS), ad esempio Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). La maggior parte dei sistemi moderni, come Java 7 e versioni successive, supporta tali modalità.

Inoltre, le richieste devono essere firmate utilizzando un ID chiave di accesso e una chiave di accesso segreta associata a un principale IAM. In alternativa è possibile utilizzare [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) per generare credenziali di sicurezza temporanee per sottoscrivere le richieste.

Questo AWS prodotto o servizio segue il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) attraverso i servizi specifici di Amazon Web Services (AWS) che supporta. Per informazioni sulla sicurezza dei AWS servizi, consulta la [pagina della documentazione sulla sicurezza del AWS servizio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) e [AWS i servizi che rientrano nell'ambito delle iniziative di AWS conformità previste dal programma di conformità](https://aws.amazon.com/compliance/services-in-scope/).

# Imposizione di una versione TLS minima nel AWS SDK per .NET
<a name="enforcing-tls"></a>

Per aumentare la sicurezza durante la comunicazione con AWS i servizi, è necessario configurarli AWS SDK per .NET per utilizzare TLS 1.2 o versioni successive.

 AWS SDK per .NET utilizza il runtime di.NET sottostante per determinare il protocollo di sicurezza da utilizzare. Per impostazione predefinita, le versioni correnti di.NET utilizzano il protocollo configurato più recente supportato dal sistema operativo. L'applicazione può ignorare questo comportamento SDK, ma *non è consigliabile* farlo.

## .NET Core
<a name="enforcing-tls-dotnet-core"></a>

Per impostazione predefinita, .NET Core utilizza il protocollo configurato più recente supportato dal sistema operativo. AWS SDK per .NET non fornisce un meccanismo per sovrascrivere questo.

Se si utilizza una versione di.NET Core precedente alla 2.1, si consiglia *vivamente* di aggiornare la versione di .NET Core.

Vedere quanto segue per informazioni specifiche di ciascun sistema operativo.

**Windows**

Le distribuzioni moderne di Windows hanno il supporto TLS 1.2 [abilitato per impostazione predefinita](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-). Se utilizzi Windows 7 SP1 o Windows Server 2008 R2 SP1, devi assicurarti che il supporto TLS 1.2 sia abilitato nel registro, come descritto in [https://learn.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12) \$1tls -12. Se si esegue una distribuzione precedente, è necessario aggiornare il sistema operativo. Per informazioni sul supporto TLS 1.3 in Windows, consulta la documentazione Microsoft più recente per le versioni client o server minime richieste.

**macOS**

Se si esegue.NET Core 2.1 o versioni successive, TLS 1.2 è abilitato per impostazione predefinita. TLS 1.2 è supportato da [OS X Mavericks](https://support.apple.com/en-us/103373) 10.9 o versioni successive. [.NET Core versione 2.1 e successive richiedono versioni più recenti di macOS, come descritto in? https://learn.microsoft.com/en-us/ dotnet/core/install/windows tabs=net80&pivots=os-macos.](https://learn.microsoft.com/en-us/dotnet/core/install/windows?tabs=net80&pivots=os-macos)

Se si utilizza.NET Core 1.0, .NET Core [utilizza OpenSSL su macOS](https://github.com/dotnet/announcements/issues/21), una dipendenza che deve essere installata separatamente. OpenSSL ha aggiunto il supporto per TLS 1.2 nella versione 1.0.1 e ha aggiunto il supporto per TLS 1.3 nella versione 1.1.1.

**Linux**

.NET Core su Linux richiede OpenSSL, che viene fornito in bundle con molte distribuzioni Linux, ma può anche essere installato separatamente. OpenSSL ha aggiunto il supporto per TLS 1.2 nella versione 1.0.1 e ha aggiunto il supporto per TLS 1.3 nella versione 1.1.1. Se stai usando una versione moderna di.NET Core (2.1 o successiva) e hai installato un gestore di pacchetti, è probabile che sia stata installata una versione più moderna di OpenSSL.

Per essere sicuro, è possibile eseguire **`openssl version`** in un terminale e verificare che la versione sia successiva alla 1.0.1.

## .NET Framework
<a name="enforcing-tls-dotnet-framework"></a>

Se si esegue una versione moderna di.NET Framework (4.7 o versione successiva) e una versione moderna di Windows (almeno Windows 8 per i client, Windows Server 2012 o versione successiva per i server), TLS 1.2 è abilitato e utilizzato per impostazione predefinita.

Se utilizzi un runtime di.NET Framework che non utilizza le impostazioni del sistema operativo (.NET Framework da 3.5 a 4.5.2), AWS SDK per .NET tenterà di [aggiungere il supporto per TLS 1.1 e TLS](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/Amazon.Runtime/Pipeline/HttpHandler/AmazonSecurityProtocolManager.cs) 1.2 ai protocolli supportati. Se si utilizza .NET Framework 3.5, l'operazione avrà esito positivo solo se è installata la patch appropriata, come segue:
+ Windows 10 versione 1511 e Windows Server 2016 — [KB3156421](https://support.microsoft.com/kb/3156421)
+ Windows 8.1 e Windows Server 2012 R2 — [KB3154520](https://support.microsoft.com/kb/3154520)
+ Windows Server 2012 — [KB3154519](https://support.microsoft.com/kb/3154519)
+ Windows 7 SP1 e Server 2008 R2 SP1 — [KB3154518](https://support.microsoft.com/kb/3154518)

**avvertimento**  
A partire dal 15 agosto 2024, AWS SDK per .NET terminerà il supporto per.NET Framework 3.5 e la versione minima.NET Framework passerà alla 4.7.2. Per ulteriori informazioni, consulta il post di blog [Importanti modifiche in arrivo per gli obiettivi .NET Framework 3.5 e 4.5](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/) di. AWS SDK per .NET

Se l'applicazione è in esecuzione su un nuovo.NET Framework su Windows 7 SP1 o Windows Server 2008 R2 SP1, è necessario assicurarsi che il supporto TLS 1.2 sia abilitato nel registro, come descritto in [https://learn.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12) \$1tls -12. Le versioni più recenti di Windows lo hanno [abilitato per impostazione predefinita](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-).

Per le best practice dettagliate per l'utilizzo di TLS con.NET Framework, consulta l'articolo di Microsoft all'indirizzo [https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls](https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls).

## AWS Strumenti per PowerShell
<a name="enforcing-tls-ps"></a>

[AWS Strumenti per PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)usa AWS SDK per .NET per tutte le chiamate ai AWS servizi. Il comportamento dell'ambiente dipende dalla versione di Windows PowerShell in esecuzione, come segue.

**Da Windows PowerShell 2.0 a 5.x**

Da Windows PowerShell 2.0 a 5.x vengono eseguiti su.NET Framework. È possibile verificare quale runtime .NET (2.0 o 4.0) viene utilizzato PowerShell utilizzando il comando seguente.

```
$PSVersionTable.CLRVersion
```
+ Quando si utilizza .NET Runtime 2.0, seguire le istruzioni fornite in precedenza per quanto riguarda AWS SDK per .NET e .NET Framework 3.5.
**avvertimento**  
A partire dal 15 agosto 2024, AWS SDK per .NET terminerà il supporto per.NET Framework 3.5 e la versione minima di.NET Framework passerà alla 4.7.2. Per ulteriori informazioni, consulta il post di blog [Importanti modifiche in arrivo per gli obiettivi .NET Framework 3.5 e 4.5](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/) di. AWS SDK per .NET
+ Quando si utilizza .NET Runtime 4.0, seguire le istruzioni fornite in precedenza per quanto riguarda AWS SDK per .NET e .NET Framework 4\$1.

**Windows PowerShell 6.0**

Windows PowerShell 6.0 e versioni successive funzionano su.NET Core. È possibile verificare quale versione di .NET Core viene utilizzata eseguendo il comando seguente.

```
[System.Reflection.Assembly]::GetEntryAssembly().GetCustomAttributes([System.Runtime.Versioning.TargetFrameworkAttribute], $true).FrameworkName
```

Segui le istruzioni fornite in precedenza per quanto riguarda AWS SDK per .NET la versione pertinente di.NET Core.

## Xamarin
<a name="enforcing-tls-xamarin"></a>

[Per Xamarin, consulta le istruzioni in -layer-security. https://learn.microsoft.com/en-us/ xamarin/cross-platform/app-fundamentals/transport](https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/transport-layer-security) In sintesi:

**Per Android**
+ Richiede Android 5.0 o versioni successive.
+ **Proprietà del progetto****, **Opzioni Android**: HttpClient l'implementazione deve essere impostata su **Android** e l'implementazione impostata su Native TLS SSL/TLS 1.2\$1.**

**Per iOS**
+ Richiede iOS 7 o versioni successive.
+ **Project Properties**, **iOS Build**: HttpClient l'implementazione deve essere impostata su **NSUrlSession**.

**Per macOS**
+ Richiede macOS 10.9 o versioni successive.
+ **Project Options**, **Build**, **Mac Build**: HttpClient l'implementazione deve essere impostata su **NSUrlSession**.

## Unità
<a name="enforcing-tls-unity"></a>

È necessario utilizzare Unity 2018.2 o versioni successive e utilizzare il runtime di scripting equivalente .NET 4.x. Puoi impostarlo in **Project Settings**, **Configuration**, **Player**, come descritto in [https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html.](https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html) Il runtime di scripting equivalente.NET 4.x abilita il supporto TLS 1.2 a tutte le piattaforme Unity che eseguono Mono o CPP. IL2 

## Browser (per Blazor) WebAssembly
<a name="enforcing-tls-browser"></a>

WebAssembly viene eseguito nel browser anziché sul server e utilizza il browser per gestire il traffico HTTP. Pertanto, il supporto TLS è determinato dal supporto del browser.

[Blazor WebAssembly, in anteprima per ASP.NET Core 3.1, è supportato solo nei browser che supportano WebAssembly, come descritto in -platforms. https://learn.microsoft.com/en-us/ aspnet/core/blazor/supported](https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms) Tutti i browser tradizionali supportavano TLS 1.2 prima del supporto. WebAssembly Se questo è il caso del browser, se l'app viene eseguita, può comunicare tramite TLS 1.2.

Consulta la documentazione del tuo browser per ulteriori informazioni e verifiche.

# Migrazione del client di crittografia Amazon S3 (da V1 a V2)
<a name="s3-encryption-migration-v1-v2"></a>

**Nota**  
Se utilizzi la V2 e desideri migrare alla V4, consulta. [Migrazione del client di crittografia Amazon S3 (da V2 a V4)](s3-encryption-migration-v2-v4.md)

Questo argomento mostra come migrare le applicazioni dalla versione 1 (V1) del client di crittografia Amazon Simple Storage Service (Amazon S3) alla versione 2 (V2) e garantire la disponibilità delle applicazioni durante tutto il processo di migrazione.

Gli oggetti crittografati con il client V2 non possono essere decrittografati con il client V1. Per facilitare la migrazione al nuovo client senza dover ricrittografare tutti gli oggetti contemporaneamente, è stato fornito un client «V1-transitional». *Questo client può *decrittografare gli oggetti crittografati* V1 e V2, ma crittografa gli oggetti solo in formato compatibile con V1.* *Il client V2 può *decrittografare gli oggetti crittografati* V1 e V2 (se abilitato per gli oggetti V1), ma crittografa gli oggetti solo in formato compatibile con V2.*

## Panoramica sulla migrazione
<a name="s3-encryption-migration-v1-v2-overview"></a>

Questa migrazione avviene in tre fasi. Queste fasi vengono introdotte qui e descritte in dettaglio più avanti. Ogni fase deve essere completata per *tutti i* client che utilizzano oggetti condivisi prima di iniziare la fase successiva.

1. **Aggiorna i client esistenti ai client di transizione V1 per leggere nuovi formati.** Innanzitutto, aggiorna le tue applicazioni in modo che dipendano dal client di transizione V1 anziché dal client V1. Il client di transizione V1 consente al codice esistente di decrittografare gli oggetti scritti dai nuovi client V2 e gli oggetti scritti in formato compatibile con V1.
**Nota**  
Il client v1-Transitional viene fornito solo a scopo di migrazione. Procedi all'aggiornamento al client V2 dopo il passaggio al client v1-Transitional.

1. **Migra i client di transizione V1 ai client V2 per scrivere nuovi formati.** Quindi, sostituisci tutti i client di transizione V1 nelle tue applicazioni con client V2 e imposta il profilo di sicurezza su. `V2AndLegacy` L'impostazione di questo profilo di sicurezza sui client V2 consente a tali client di decrittografare gli oggetti crittografati in un formato compatibile con V1.

1. **Aggiorna i client V2 in modo che non leggano più i formati V1.** Infine, dopo che tutti i client sono stati migrati alla V2 e tutti gli oggetti sono stati crittografati o ricrittografati in un formato compatibile con V2, imposta il profilo di sicurezza V2 su invece di. `V2` `V2AndLegacy` Ciò impedisce la decrittografia di oggetti in formato compatibile con V1.

## Aggiorna i client esistenti ai client di transizione V1 per leggere nuovi formati
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

Il client di crittografia V2 utilizza algoritmi di crittografia che le versioni precedenti del client non supportano. Il primo passo della migrazione consiste nell'aggiornare i client di decrittografia V1 in modo che possano leggere il nuovo formato.

Il client di transizione V1 consente alle applicazioni di decrittografare oggetti crittografati V1 e V2. [Questo client fa parte del pacchetto Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet Esegui i seguenti passaggi su ciascuna delle tue applicazioni per utilizzare il client di transizione v1.

1. [Assumi una nuova dipendenza dal pacchetto Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) **Se il tuo progetto dipende direttamente dal file .S3 o. AWSSDK AWSSDK** ** KeyManagementService**pacchetti, è necessario aggiornare tali dipendenze o rimuoverle in modo che le loro versioni aggiornate vengano inserite in questo nuovo pacchetto.

1. Modificate l'`using`istruzione appropriata da `Amazon.S3.Encryption` a`Amazon.Extensions.S3.Encryption`, come segue: 

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. Ricostruisci e ridistribuisci l'applicazione.

Il client di transizione V1 è completamente compatibile con l'API con il client V1, quindi non sono necessarie altre modifiche al codice.

## Esegui la migrazione dei client di transizione V1 ai client V2 per scrivere nuovi formati
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

[Il client V2 fa parte del pacchetto Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet Consente alle applicazioni di decrittografare gli oggetti crittografati V1 e V2 (se configurato per tale operazione), ma crittografa gli oggetti solo in formato compatibile con V2.

Dopo aver aggiornato i client esistenti per leggere il nuovo formato di crittografia, è possibile procedere all'aggiornamento sicuro delle applicazioni ai client di crittografia e decrittografia V2. Esegui i seguenti passaggi su ciascuna delle tue applicazioni per utilizzare il client V2:

1. Passare da `EncryptionMaterials` a `EncryptionMaterialsV2`.

   1. Quando si utilizza KMS:

      1. Fornisci un ID chiave KMS.

      1. Dichiara il metodo di crittografia che stai utilizzando, ovvero. `KmsType.KmsContext`

      1. Fornisci a KMS un contesto di crittografia da associare a questa chiave dati. Puoi inviare un dizionario vuoto (il contesto di crittografia Amazon verrà comunque inserito), ma è consigliabile fornire un contesto aggiuntivo.

   1. Quando si utilizzano metodi di key wrap forniti dall'utente (crittografia simmetrica o asimmetrica):

      1. Fornisci un'istanza `AES` o un'`RSA`istanza che contenga i materiali di crittografia.

      1. Dichiara quale algoritmo di crittografia utilizzare; ovvero, `SymmetricAlgorithmType.AesGcm` o`AsymmetricAlgorithmType.RsaOaepSha1`.

1. Passa `AmazonS3CryptoConfiguration` a `AmazonS3CryptoConfigurationV2` con la `SecurityProfile` proprietà impostata su. `SecurityProfile.V2AndLegacy`

1. Passare da `AmazonS3EncryptionClient` a `AmazonS3EncryptionClientV2`. Questo client utilizza gli `EncryptionMaterialsV2` oggetti appena convertiti `AmazonS3CryptoConfigurationV2` e quelli dei passaggi precedenti.

### Esempio: da KMS a KMS\$1Context
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**Premigrazione**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migrazione**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### Esempio: algoritmo simmetrico (portachiavi da AES-CBC a AES-GCM)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode` può essere `ObjectMetadata` o `InstructionFile`.

**Premigrazione**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migrazione**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**Nota**  
Quando decifrate con AES-GCM, leggete l'intero oggetto fino alla fine prima di iniziare a utilizzare i dati decrittografati. Questo serve a verificare che l'oggetto non sia stato modificato da quando è stato crittografato.

### Esempio: algoritmo asimmetrico (da RSA a RSA-OAEP-SHA 1 Key Wrap)
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode` può essere `ObjectMetadata` o `InstructionFile`.

**Premigrazione**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migrazione**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## Aggiorna i client V2 in modo che non leggano più i formati V1
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

Alla fine, tutti gli oggetti saranno stati crittografati o ricrittografati utilizzando un client V2. *Al termine di questa conversione, è* possibile disabilitare la compatibilità V1 nei client V2 impostando la `SecurityProfile` proprietà su`SecurityProfile.V2`, come mostrato nel frammento seguente.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```

# Migrazione del client di crittografia Amazon S3 (da V2 a V4)
<a name="s3-encryption-migration-v2-v4"></a>

**Nota**  
Se si utilizza la V1 e si desidera migrare alla V4, è necessario prima migrare alla V2. Per informazioni, consulta [Migrazione del client di crittografia Amazon S3 (da V1 a V2)](s3-encryption-migration-v1-v2.md).

Questo argomento mostra come migrare le applicazioni dalla versione 2 (V2) del client di crittografia Amazon Simple Storage Service (Amazon S3) alla versione 4 (V4) e garantire la disponibilità delle applicazioni durante tutto il processo di migrazione. V4 utilizza AES-GCM con impegno fondamentale per la crittografia dei contenuti e introduce Commitment Policies per migliorare la sicurezza contro gli attacchi di sostituzione delle chiavi.

[Il client V4 è disponibile nel pacchetto Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 

**Importante**  
**Ultime modifiche: i** client V4 configurati con `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` policy non possono decrittografare oggetti crittografati con client V1 o V2. Solo i client V2 più recenti possono decrittografare gli oggetti crittografati V4 con impegno chiave. Prima di passare alla `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` policy, è necessario crittografare nuovamente tutti i dati esistenti utilizzando client V4 con key commit abilitato.

## Comprensione dei concetti della V4
<a name="s3-encryption-migration-v2-v4-concepts"></a>

V4 utilizza AES-GCM con un impegno fondamentale per la crittografia dei contenuti e introduce concetti chiave di sicurezza che migliorano la protezione dei dati crittografati:

### Politica di impegno
<a name="s3-encryption-migration-v2-v4-concepts-policy"></a>

La politica di impegno controlla il modo in cui il client di crittografia gestisce l'impegno delle chiavi durante le operazioni di crittografia e decrittografia. V4 supporta tre politiche di impegno:

`FORBID_ENCRYPT_ALLOW_DECRYPT`  
*Crittografia:* senza impegno  
*Decrittografia: consente oggetti senza* impegno  
*Sicurezza: non impone* l'impegno e può consentire la manomissione  
*Compatibilità:* tutte le implementazioni V2 e V4 possono leggere oggetti crittografati con questa politica

`REQUIRE_ENCRYPT_ALLOW_DECRYPT`  
*Crittografia:* con un impegno fondamentale  
*Decrittografia: consente il commit e il mancato conferimento* di oggetti  
*Sicurezza:* i nuovi oggetti sono protetti dagli attacchi di sostituzione delle chiavi, i vecchi oggetti sono ancora leggibili  
*Compatibilità:* solo la V4 supporta questa politica

`REQUIRE_ENCRYPT_REQUIRE_DECRYPT`(Impostazione predefinita per V4)  
*Crittografia:* con impegno chiave  
*Decrittografia: solo invio* di oggetti  
*Sicurezza:* applicazione del pieno impegno per la massima sicurezza  
*Compatibilità:* solo la versione V4 supporta questa politica

### AES GCM con impegno chiave
<a name="s3-encryption-migration-v2-v4-concepts-aesgcm"></a>

V4 utilizza AES-GCM con un impegno fondamentale per la crittografia dei contenuti, che offre una maggiore sicurezza:
+ *Protezione da manomissioni: protegge dagli attacchi di sostituzione delle chiavi legando* crittograficamente la chiave ai dati crittografati.
+ *Compatibilità delle versioni:* gli oggetti crittografati con l'impegno della chiave possono essere decrittografati solo dai client V4 e dalle versioni più recenti.

**avvertimento**  
Prima di abilitare la crittografia Key Commitment in produzione, assicuratevi che tutte le applicazioni che devono decrittografare gli oggetti siano state aggiornate alla versione 4 o successiva, poiché il client V2 è diventato obsoleto.

## Aggiorna i client esistenti per leggere i formati V4
<a name="s3-encryption-migration-v2-v4-update-clients"></a>

Il client di crittografia V4 utilizza algoritmi di crittografia che le versioni precedenti del client non supportano. Il primo passo della migrazione consiste nell'aggiornare i client V2 in modo che possano leggere il nuovo formato V4.

### Aggiorna le dipendenze dei NuGet pacchetti
<a name="s3-encryption-migration-v2-v4-update-nuget"></a>

Aggiorna le tue applicazioni per utilizzare la versione più recente del pacchetto [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) che include il supporto V4. Esegui i seguenti passaggi su ciascuna delle tue applicazioni:

1. Esegui l'aggiornamento al pacchetto [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) più recente. **Se il tuo progetto dipende direttamente dal file.S3 o. AWSSDK AWSSDK** ** KeyManagementService**pacchetti, è necessario aggiornare tali dipendenze o rimuoverle in modo che le loro versioni aggiornate vengano inserite in questo nuovo pacchetto.

1. Assicurati che le tue `using` istruzioni facciano riferimento al namespace corretto:

   ```
   using Amazon.Extensions.S3.Encryption;
   using Amazon.Extensions.S3.Encryption.Primitives;
   ```

1. Ricostruisci e ridistribuisci l'applicazione.

I client V2 esistenti continueranno a funzionare con il pacchetto aggiornato e saranno in grado di decrittografare gli oggetti crittografati dai client V4 (a seconda della politica di impegno utilizzata).

### Crea e distribuisci applicazioni
<a name="s3-encryption-migration-v2-v4-build-deploy"></a>

Dopo aver aggiornato le dipendenze dei NuGet pacchetti:

1. Crea la tua applicazione per assicurarti che tutte le dipendenze vengano risolte correttamente.

1. Testa l'applicazione in un ambiente di sviluppo per verificare che le funzionalità esistenti continuino a funzionare.

1. Implementa l'applicazione aggiornata nel tuo ambiente di produzione.

Questo aggiornamento consente ai client V2 esistenti di decrittografare gli oggetti che verranno crittografati dai client V4, garantendo la compatibilità durante il processo di migrazione.

## Esegui la migrazione ai client V4
<a name="s3-encryption-migration-v2-v4-migrate"></a>

Dopo aver aggiornato i client esistenti per leggere il nuovo formato di crittografia, è possibile procedere all'aggiornamento sicuro delle applicazioni per utilizzare i client di crittografia e decrittografia V4. Il client V4 offre una maggiore sicurezza grazie all'impegno delle chiavi, pur mantenendo la compatibilità con gli oggetti crittografati esistenti.

### Processo di migrazione in 4 fasi
<a name="s3-encryption-migration-v2-v4-migrate-steps"></a>

La migrazione dalla V2 alla V4 segue un processo strutturato in 4 fasi per garantire compatibilità e sicurezza. Ogni passaggio rappresenta una configurazione specifica che deve essere implementata in tutte le applicazioni prima di procedere al passaggio successivo.

1. **Fase 0: Client V2 (punto di partenza)** - Implementazione V2 esistente

1. **Fase 1: compatibilità V4 con V2** - Migrazione al client V4 mantenendo un comportamento di crittografia compatibile con V2

1. **Fase 2: V4 con Key Commitment Writes - Inizia a crittografare con key** commit, permettendo al contempo la decrittografia degli oggetti legacy

1. **Fase 3: V4 con applicazione completa**: è necessario un impegno fondamentale sia per la crittografia che per la decrittografia

### Fase 0: V2 Client (punto di partenza)
<a name="s3-encryption-migration-v2-v4-step0"></a>

Rappresenta la configurazione del client V2 esistente. Questo passaggio dimostra lo stato iniziale prima della migrazione.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 0: V2 Client - Starting configuration
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext);

#pragma warning disable 0618
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
#pragma warning enable 0618

var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

### Fase 1: compatibilità V4 con V2
<a name="s3-encryption-migration-v2-v4-step1"></a>

Esegui la migrazione al client V4 mantenendo un comportamento identico a quello della V2. Questo passaggio utilizza una `FORBID_ENCRYPT_ALLOW_DECRYPT` politica per crittografare senza impegno e consentire la decrittografia di tutti gli oggetti.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 1: V4 Client with V2 compatibility
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcm);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** cripta senza impegno, può decrittografare sia gli oggetti che effettuano il commit che quelli che non effettuano il commit. Identico al comportamento della V2.

### Fase 2: V4 con Key Commitment Writes
<a name="s3-encryption-migration-v2-v4-step2"></a>

Inizia a crittografare con un impegno chiave, mantenendo al contempo la compatibilità con le versioni precedenti per la decrittografia. Questo passaggio utilizza la politica. `REQUIRE_ENCRYPT_ALLOW_DECRYPT`

**avvertimento**  
Prima di implementare la Fase 2, assicuratevi che tutti i lettori siano stati aggiornati alla Fase 1 o a una versione successiva per gestire la crittografia con impegno chiave.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 2: V4 Client with key commitment writes
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** cripta con impegno, può decrittografare sia gli oggetti che effettuano il commit che quelli che non effettuano il commit. I nuovi oggetti sono protetti dagli attacchi di sostituzione delle chiavi.

### Fase 3: V4 con applicazione completa
<a name="s3-encryption-migration-v2-v4-step3"></a>

Richiede un impegno fondamentale sia per la crittografia che per la decrittografia. Questo passaggio utilizza una `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` politica per la massima sicurezza.

**avvertimento**  
Prima di implementare la Fase 3, assicuratevi che tutti gli oggetti del sistema siano stati ricrittografati con Key Commitment (Fase 2). Questo passaggio non riuscirà a decrittografare gli oggetti crittografati senza impegno.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 3: V4 Client with full key commitment enforcement
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** crittografa con impegno, decrittografa solo gli oggetti crittografati con impegno. Massima sicurezza contro gli attacchi di sostituzione delle chiavi.

## Esempi di configurazione aggiuntivi
<a name="s3-encryption-migration-v2-v4-examples"></a>

Questa sezione fornisce esempi aggiuntivi per la configurazione dei client V4 con diverse opzioni durante la migrazione.

### Abilitazione del supporto Legacy
<a name="s3-encryption-migration-v2-v4-examples-legacy"></a>

Per consentire ai client V4 di leggere gli oggetti crittografati dai client V1 e V2, configura il client con una politica di impegno che consenta la decrittografia legacy:

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

// Configure V4 client to read V1/V2 objects
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};

// This configuration allows:
// - Encryption: With commitment (secure)
// - Decryption: Both V2 (non-committing) and V4 (committing) objects
```

Utilizza questa configurazione durante la migrazione quando devi decrittografare oggetti crittografati da client precedenti, garantendo al contempo che i nuovi oggetti siano crittografati con una maggiore sicurezza.

### Configurazione del metodo di archiviazione
<a name="s3-encryption-migration-v2-v4-examples-storage"></a>

V4 supporta due metodi di archiviazione per i metadati di crittografia. Scegli il metodo più adatto al tuo caso d'uso:

**Metadati degli oggetti (impostazione predefinita)**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
// Encryption metadata is stored in S3 object metadata
```

**File di istruzioni**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.InstructionFile
};
// Encryption metadata is stored in a separate S3 object (instruction file)
```

Da utilizzare `InstructionFile` quando è necessario conservare i metadati degli oggetti per altri scopi o quando si lavora con oggetti con limitazioni di dimensione dei metadati.

### Configurazione della politica di impegno
<a name="s3-encryption-migration-v2-v4-examples-policy"></a>

Scegliete la politica di impegno appropriata in base ai requisiti di sicurezza e alla fase di migrazione:

**Fase di migrazione (compatibilità V2)**

```
// For migration: encrypt without commitment, allow all decryption
var migrationConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT);
```

**Fase di transizione (consigliata)**

```
// For transition: encrypt with commitment, allow legacy decryption
var transitionConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
```

**Fase di sicurezza completa**

```
// For maximum security: require commitment for both encryption and decryption
var secureConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT);
```

Inizia con `FORBID_ENCRYPT_ALLOW_DECRYPT` la migrazione iniziale, passa alla fase `REQUIRE_ENCRYPT_ALLOW_DECRYPT` di transizione e infine utilizza `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` quando tutti i client sono stati aggiornati e tutti gli oggetti sono stati ricrittografati con impegno.