

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

# Aggiornamento dei provider di chiavi AWS KMS principali
<a name="migrate-mkps-v2"></a>

Per migrare alla versione più recente 1. versione *x* di e AWS Encryption SDK quindi alla versione 2.0. *x* o versione successiva, è necessario sostituire i provider di chiavi AWS KMS master precedenti con fornitori di chiavi master creati esplicitamente in [*modalità rigorosa o in modalità* di *rilevamento*](about-versions.md#changes-to-mkps). I provider di chiavi master legacy sono obsoleti nella versione 1.7. *x* e rimosso nella versione 2.0. *x*. Questa modifica è necessaria per le applicazioni e gli script che utilizzano la [SDK di crittografia AWS per Java[SDK di crittografia AWS per Python](python.md)](java.md), e la [CLI di AWS crittografia](crypto-cli.md). Gli esempi in questa sezione ti mostreranno come aggiornare il codice. 

**Nota**  
In Python, [attiva gli avvisi di deprecazione](https://docs.python.org/3/library/warnings.html). Questo ti aiuterà a identificare le parti del codice che devi aggiornare.

Se utilizzi una chiave AWS KMS master (non un fornitore di chiavi master), puoi saltare questo passaggio. AWS KMS le chiavi master non sono obsolete o rimosse. Crittografano e decrittografano solo con le chiavi di wrapping specificate dall'utente.

Gli esempi di questa sezione si concentrano sugli elementi del codice che è necessario modificare. Per un esempio completo del codice aggiornato, consultate la sezione Esempi del GitHub repository relativo al [linguaggio di programmazione](programming-languages.md) in uso. Inoltre, questi esempi in genere utilizzano la chiave ARNs per rappresentare AWS KMS keys. Quando si crea un provider di chiavi principali per la crittografia, è possibile utilizzare qualsiasi [identificatore di AWS KMS chiave](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) valido per rappresentare un. AWS KMS key Quando si crea un provider di chiavi master per la decrittografia, è necessario utilizzare una chiave ARN.

**Scopri di più sulla migrazione**

Per tutti AWS Encryption SDK gli utenti, scopri come impostare la tua politica di impegno in[Impostazione della politica di impegno](migrate-commitment-policy.md).

Per SDK di crittografia AWS per C gli SDK di crittografia AWS per JavaScript utenti finali, scopri di più su un aggiornamento opzionale dei portachiavi in[Aggiornamento dei AWS KMS portachiavi](migrate-keyrings-v2.md).

**Topics**
+ [Migrazione alla modalità rigorosa](#migrate-mkp-strict-mode)
+ [Migrazione alla modalità di rilevamento](#migrate-mkp-discovery-mode)

## Migrazione alla modalità rigorosa
<a name="migrate-mkp-strict-mode"></a>

Dopo l'aggiornamento alla versione più recente 1. versione *x* di AWS Encryption SDK, sostituisci i tuoi provider di chiavi master precedenti con fornitori di chiavi master in modalità rigorosa. In modalità rigorosa, è necessario specificare le chiavi di wrapping da utilizzare per la crittografia e la decrittografia. AWS Encryption SDK Utilizza solo le chiavi di avvolgimento specificate. I provider di chiavi master obsolete possono decrittografare i dati utilizzando qualsiasi chiave AWS KMS key che abbia crittografato una chiave dati, anche in diverse regioni. AWS KMS keys Account AWS 

I provider di chiavi principali in modalità rigorosa vengono introdotti nella versione 1.7. AWS Encryption SDK *x*. Sostituiscono i provider di chiavi master legacy, che sono obsoleti nella versione 1.7. *x* e rimosso nella 2.0. *x*. L'utilizzo di provider di chiavi principali in modalità rigorosa è una [procedura AWS Encryption SDK consigliata](best-practices.md).

Il codice seguente crea un provider di chiavi master in modalità rigorosa che è possibile utilizzare per la crittografia e la decrittografia. 

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

Questo esempio rappresenta il codice di un'applicazione che utilizza la versione 1.6.2 o precedente di. SDK di crittografia AWS per Java

Questo codice utilizza il `KmsMasterKeyProvider.builder()` metodo per creare un'istanza di un provider di chiavi AWS KMS master che ne utilizza una AWS KMS key come chiave di wrapping. 

```
// Create a master key provider
// Replace the example key ARN with a valid one
String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder()
    .withKeysForEncryption(awsKmsKey)
    .build();
```

Questo esempio rappresenta il codice in un'applicazione che utilizza la versione 1.7. *x* o versione successiva di SDK di crittografia AWS per Java . Per un esempio completo, consulta [BasicEncryptionExample.java.](https://github.com/aws/aws-encryption-sdk-java/blob/master/src/examples/java/com/amazonaws/crypto/examples/v2/BasicEncryptionExample.java)

I `Builder.withKeysForEncryption()` metodi `Builder.build()` and utilizzati nell'esempio precedente sono obsoleti nella versione 1.7. *x* e vengono rimossi dalla versione 2.0. *x*.

Per eseguire l'aggiornamento a un provider di chiavi master in modalità rigorosa, questo codice sostituisce le chiamate ai metodi obsoleti con una chiamata al nuovo metodo. `Builder.buildStrict()` Questo esempio ne specifica uno AWS KMS key come chiave di avvolgimento, ma il `Builder.buildStrict()` metodo può accettare un elenco di più elementi. AWS KMS keys

```
// Create a master key provider in strict mode
// Replace the example key ARN with a valid one from your Account AWS.
String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder()
    .buildStrict(awsKmsKey);
```

------
#### [ Python ]

Questo esempio rappresenta il codice in un'applicazione che utilizza la versione 1.4.1 di. SDK di crittografia AWS per Python Questo codice utilizza`KMSMasterKeyProvider`, che è obsoleto nella versione 1.7. *x* e rimosso dalla versione 2.0. *x*. Durante la decrittografia, utilizza qualsiasi chiave di dati AWS KMS key che ha crittografato una chiave di dati indipendentemente da quanto specificato AWS KMS keys . 

Nota che non `KMSMasterKey` è obsoleto o rimosso. Durante la crittografia e la decrittografia, utilizza solo i dati specificati dall'utente. AWS KMS key 

```
# Create a master key provider
# Replace the example key ARN with a valid one
key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"

aws_kms_master_key_provider = KMSMasterKeyProvider(
   key_ids=[key_1, key_2]
)
```

Questo esempio rappresenta il codice di un'applicazione che utilizza la versione 1.7. *x* di SDK di crittografia AWS per Python. Per un esempio completo, vedere [basic\$1encryption.py](https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/legacy/basic_encryption.py).

Per eseguire l'aggiornamento a un provider di chiavi master in modalità rigorosa, questo codice sostituisce la chiamata a `KMSMasterKeyProvider()` con una chiamata a`StrictAwsKmsMasterKeyProvider()`. 

```
# Create a master key provider in strict mode
# Replace the example key ARNs with valid values from your Account AWS
key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"

aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider(
    key_ids=[key_1, key_2]
)
```

------
#### [ AWS Encryption CLI ]

Questo esempio mostra come crittografare e decrittografare utilizzando la Encryption AWS CLI versione 1.1.7 o precedente.

Nella versione 1.1.7 e precedenti, durante la crittografia, si specificano una o più chiavi master (o chiavi di *wrapping*), ad esempio una. AWS KMS key Durante la decrittografia, non è possibile specificare alcuna chiave di wrapping a meno che non si utilizzi un provider di chiavi master personalizzato. La CLI di AWS crittografia può utilizzare qualsiasi chiave di wrapping che crittografa una chiave dati.

```
\\ Replace the example key ARN with a valid one
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

\\ Encrypt your plaintext data
$ aws-encryption-cli --encrypt \
                     --input hello.txt \
                     --master-keys key=$keyArn \
                     --metadata-output ~/metadata \
                     --encryption-context purpose=test \
                     --output .

\\ Decrypt your ciphertext               
$ aws-encryption-cli --decrypt \
                     --input hello.txt.encrypted \
                     --encryption-context purpose=test \
                     --metadata-output ~/metadata \
                     --output .
```

Questo esempio mostra come crittografare e decrittografare utilizzando la Encryption AWS CLI versione 1.7. *x o versione successiva.* Per esempi completi, vedere[Esempi di CLI AWS di crittografia](crypto-cli-examples.md).

Il `--master-keys` parametro è obsoleto nella versione 1.7. *x* e rimosso nella versione 2.0. *x*. È stato sostituito dal `--wrapping-keys` parametro by, richiesto nei comandi encrypt e decrypt. Questo parametro supporta la modalità rigorosa e la modalità di rilevamento. La modalità rigorosa è una procedura AWS Encryption SDK consigliata che garantisce l'utilizzo della chiave di wrapping desiderata. 

Per eseguire l'aggiornamento alla *modalità rigorosa*, utilizzate l'attributo **key** del `--wrapping-keys` parametro per specificare una chiave di wrapping durante la crittografia e la decrittografia. 

```
\\ Replace the example key ARN with a valid value
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

\\ Encrypt your plaintext data
$ aws-encryption-cli --encrypt \
                     --input hello.txt \
                     --wrapping-keys key=$keyArn \
                     --metadata-output ~/metadata \
                     --encryption-context purpose=test \
                     --output .

\\ Decrypt your ciphertext               
$ aws-encryption-cli --decrypt \
                     --input hello.txt.encrypted \
                     --wrapping-keys key=$keyArn \
                     --encryption-context purpose=test \
                     --metadata-output ~/metadata \
                     --output .
```

------

## Migrazione alla modalità di rilevamento
<a name="migrate-mkp-discovery-mode"></a>

A partire dalla versione 1.7. *x*, è consigliabile utilizzare [la](best-practices.md) *modalità rigorosa* per i fornitori di chiavi AWS KMS master, ovvero specificare le chiavi di wrapping durante la crittografia e la decrittografia. AWS Encryption SDK È sempre necessario specificare le chiavi di wrapping durante la crittografia. Ma ci sono situazioni in cui specificare la chiave ARNs di decrittografia non è AWS KMS keys pratico. Ad esempio, se si utilizzano alias per l'identificazione AWS KMS keys durante la crittografia, si perde il vantaggio degli alias se è necessario elencare la chiave durante la decrittografia. ARNs Inoltre, poiché i provider di chiavi master in modalità di rilevamento si comportano come i provider di chiavi master originali, è possibile utilizzarli temporaneamente come parte della strategia di migrazione e quindi passare ai provider di chiavi master in modalità rigorosa in un secondo momento.

In casi come questo, puoi utilizzare i provider di chiavi master in *modalità di scoperta*. Questi fornitori di chiavi master non consentono di specificare chiavi di wrapping, quindi non è possibile utilizzarle per la crittografia. Durante la decrittografia, possono utilizzare qualsiasi chiave di wrapping che ha crittografato una chiave dati. Ma a differenza dei provider di chiavi master legacy, che si comportano allo stesso modo, li crei in modalità di scoperta in modo esplicito. Quando si utilizzano provider di chiavi master in modalità di scoperta, è possibile limitare le chiavi di wrapping che possono essere utilizzate a questi in particolare. Account AWS Questo filtro di rilevamento è facoltativo, ma è una best practice che consigliamo. Per informazioni su AWS partizioni e account, consulta [Amazon Resource Names](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax) nel *Riferimenti generali di AWS*.

Gli esempi seguenti creano un provider di chiavi AWS KMS master in modalità rigorosa per la crittografia e un provider di chiavi AWS KMS master in modalità di scoperta per la decrittografia. Il provider di chiavi master in modalità di scoperta utilizza un filtro di rilevamento per limitare le chiavi di wrapping utilizzate per la decrittografia alla partizione e a un esempio particolare. `aws` Account AWS Sebbene il filtro dell'account non sia necessario in questo esempio molto semplice, si tratta di una best practice molto utile quando un'applicazione crittografa i dati e un'altra applicazione decrittografa i dati.

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

Questo esempio rappresenta il codice in un'applicazione che utilizza la versione 1.7. *x* o versione successiva di SDK di crittografia AWS per Java. Per un esempio completo, consulta [DiscoveryDecryptionExample.java.](https://github.com/aws/aws-encryption-sdk-java/blob/master/src/examples/java/com/amazonaws/crypto/examples/)

Per creare un'istanza di un provider di chiavi master in modalità rigorosa per la crittografia, questo esempio utilizza il metodo. `Builder.buildStrict()` Per creare un'istanza di un provider di chiavi master in modalità di scoperta per la decrittografia, utilizza il metodo. `Builder.buildDiscovery()` Il `Builder.buildDiscovery()` metodo utilizza un valore `DiscoveryFilter` che limita la partizione e AWS Encryption SDK gli AWS KMS keys account specificati AWS . 

```
// Create a master key provider in strict mode for encrypting
// Replace the example alias ARN with a valid one from your Account AWS.
String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias";

KmsMasterKeyProvider encryptingKeyProvider = KmsMasterKeyProvider.builder()
    .buildStrict(awsKmsKey);

// Create a master key provider in discovery mode for decrypting
// Replace the example account IDs with valid values.
DiscoveryFilter accounts = new DiscoveryFilter("aws", Arrays.asList("111122223333", "444455556666"));

KmsMasterKeyProvider decryptingKeyProvider = KmsMasterKeyProvider.builder()
    .buildDiscovery(accounts);
```

------
#### [ Python ]

 Questo esempio rappresenta il codice in un'applicazione che utilizza la versione 1.7. *x* o versione successiva di SDK di crittografia AWS per Python . Per un esempio completo, vedere [discovery\$1kms\$1provider.py](https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/legacy/discovery_kms_provider.py).

Per creare un provider di chiavi master in modalità rigorosa per la crittografia, questo esempio utilizza`StrictAwsKmsMasterKeyProvider`. Per creare un provider di chiavi master in modalità di rilevamento per la decrittografia, viene utilizzato `DiscoveryAwsKmsMasterKeyProvider` with AWS Encryption SDK a `DiscoveryFilter` che limita il valore nella AWS partizione e AWS KMS keys negli account specificati. 

```
# Create a master key provider in strict mode
# Replace the example key ARN and alias ARNs with valid values from your Account AWS.
key_1 = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias"
key_2 = "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d"

aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider(
    key_ids=[key_1, key_2]
)

# Create a master key provider in discovery mode for decrypting
# Replace the example account IDs with valid values
accounts = DiscoveryFilter(
    partition="aws",
    account_ids=["111122223333", "444455556666"]
)
aws_kms_master_key_provider = DiscoveryAwsKmsMasterKeyProvider(
        discovery_filter=accounts
)
```

------
#### [ AWS Encryption CLI ]

Questo esempio mostra come crittografare e decrittografare utilizzando la Encryption AWS CLI versione 1.7. *x o versione successiva.* A partire dalla versione 1.7. *x*, il `--wrapping-keys` parametro è necessario per la crittografia e la decrittografia. Il `--wrapping-keys` parametro supporta la modalità rigorosa e la modalità di rilevamento. Per esempi completi, vedere[Esempi di CLI AWS di crittografia](crypto-cli-examples.md).

Durante la crittografia, questo esempio specifica una chiave di wrapping, che è obbligatoria. Durante la decrittografia, sceglie esplicitamente la *modalità di rilevamento* utilizzando l'`discovery`attributo del parametro con un valore di. `--wrapping-keys` `true` 

Per limitare le chiavi di wrapping che AWS Encryption SDK possono essere utilizzate in modalità discovery a quelle in particolare Account AWS, questo esempio utilizza gli attributi `discovery-partition` e `discovery-account` del parametro. `--wrapping-keys` Questi attributi opzionali sono validi solo quando l'`discovery`attributo è impostato su. `true` È necessario utilizzare gli `discovery-account` attributi `discovery-partition` e insieme; nessuno dei due è valido da solo.

```
\\ Replace the example key ARN with a valid value
$ keyAlias=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias

\\ Encrypt your plaintext data
$ aws-encryption-cli --encrypt \
                     --input hello.txt \
                     --wrapping-keys key=$keyAlias \
                     --metadata-output ~/metadata \
                     --encryption-context purpose=test \
                     --output .

\\ Decrypt your ciphertext
\\ Replace the example account IDs with valid values           
$ aws-encryption-cli --decrypt \
                     --input hello.txt.encrypted \
                     --wrapping-keys discovery=true \
                                     discovery-partition=aws \
                                     discovery-account=111122223333 \
                                     discovery-account=444455556666 \
                     --encryption-context purpose=test \
                     --metadata-output ~/metadata \
                     --output .
```

------