

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Aktualisierung der AWS KMS Hauptschlüsselanbieter
<a name="migrate-mkps-v2"></a>

Um auf die neueste Version zu migrieren 1. *x-Version* von AWS Encryption SDK und dann auf Version 2.0. *x* oder höher, Sie müssen ältere AWS KMS Hauptschlüsselanbieter durch Hauptschlüsselanbieter ersetzen, die explizit im [*strikten Modus* oder *Discovery-Modus*](about-versions.md#changes-to-mkps) erstellt wurden. Ältere Hauptschlüsselanbieter sind in Version 1.7 veraltet. *x* und wurde in Version 2.0 entfernt. *x.* Diese Änderung ist für Anwendungen und Skripts erforderlich, die die [AWS-Verschlüsselungs-SDK for Java[AWS-Verschlüsselungs-SDK for Python](python.md)](java.md), und die [AWS Encryption CLI](crypto-cli.md) verwenden. Die Beispiele in diesem Abschnitt zeigen Ihnen, wie Sie Ihren Code aktualisieren. 

**Anmerkung**  
[Schalten Sie in Python Verfallswarnungen ein.](https://docs.python.org/3/library/warnings.html) Auf diese Weise können Sie die Teile Ihres Codes identifizieren, die Sie aktualisieren müssen.

Wenn Sie einen AWS KMS Hauptschlüssel (keinen Hauptschlüsselanbieter) verwenden, können Sie diesen Schritt überspringen. AWS KMS Hauptschlüssel sind nicht veraltet oder wurden nicht entfernt. Sie verschlüsseln und entschlüsseln nur mit den von Ihnen angegebenen Wrapping-Schlüsseln.

Die Beispiele in diesem Abschnitt konzentrieren sich auf die Elemente Ihres Codes, die Sie ändern müssen. Ein vollständiges Beispiel für den aktualisierten Code finden Sie im Abschnitt Beispiele des GitHub Repositorys für Ihre [Programmiersprache](programming-languages.md). Außerdem verwenden diese Beispiele in der Regel Schlüssel ARNs zur Darstellung AWS KMS keys. Wenn Sie einen Hauptschlüsselanbieter für die Verschlüsselung erstellen, können Sie einen beliebigen gültigen AWS KMS [Schlüsselbezeichner](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) verwenden, um einen AWS KMS key darzustellen. Wenn Sie einen Hauptschlüsselanbieter für die Entschlüsselung erstellen, müssen Sie einen Schlüssel-ARN verwenden.

**Erfahren Sie mehr über Migration**

Informationen zur Einrichtung Ihrer Verpflichtungsrichtlinie finden Sie für alle AWS Encryption SDK Benutzer unter[Festlegung Ihrer Verpflichtungspolitik](migrate-commitment-policy.md).

Für AWS-Verschlüsselungs-SDK for JavaScript Benutzer AWS-Verschlüsselungs-SDK for C und Benutzer finden Sie weitere Informationen zu einem optionalen Update für Schlüsselanhänger in[AWS KMS Schlüsselanhänger aktualisieren](migrate-keyrings-v2.md).

**Topics**
+ [Umstellung auf den strikten Modus](#migrate-mkp-strict-mode)
+ [In den Discovery-Modus migrieren](#migrate-mkp-discovery-mode)

## Umstellung auf den strikten Modus
<a name="migrate-mkp-strict-mode"></a>

Nach dem Update auf die neueste Version 1. *x-Version* von AWS Encryption SDK, ersetzen Sie Ihre alten Hauptschlüsselanbieter durch Hauptschlüsselanbieter im strikten Modus. Im strikten Modus müssen Sie die Wrapping-Schlüssel angeben, die beim Verschlüsseln und Entschlüsseln verwendet werden sollen. Der AWS Encryption SDK verwendet nur die von Ihnen angegebenen Wrapping-Schlüssel. Veraltete Hauptschlüsselanbieter können Daten mit jedem entschlüsseln AWS KMS key , der einen Datenschlüssel verschlüsselt hat, auch AWS KMS keys in verschiedenen AWS-Konten Regionen.

Master-Key-Anbieter im strikten Modus wurden in Version 1.7 eingeführt. AWS Encryption SDK *x.* Sie ersetzen ältere Master-Key-Anbieter, die in 1.7 veraltet sind. *x* und in 2.0 entfernt. *x.* Die Verwendung von Master-Key-Anbietern im strikten Modus ist eine AWS Encryption SDK [bewährte Methode](best-practices.md).

Der folgende Code erstellt einen Hauptschlüsselanbieter im strikten Modus, den Sie zum Verschlüsseln und Entschlüsseln verwenden können. 

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

Dieses Beispiel stellt Code in einer Anwendung dar, die die Version 1.6.2 oder früher von verwendet. AWS-Verschlüsselungs-SDK for Java

In diesem Code wird die `KmsMasterKeyProvider.builder()` Methode verwendet, um einen AWS KMS Hauptschlüsselanbieter zu instanziieren, der einen AWS KMS key als Umschließungsschlüssel verwendet. 

```
// 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();
```

Dieses Beispiel stellt Code in einer Anwendung dar, die Version 1.7 verwendet. *x* oder höher von AWS-Verschlüsselungs-SDK for Java . Ein vollständiges Beispiel finden Sie unter [BasicEncryptionExample.java.](https://github.com/aws/aws-encryption-sdk-java/blob/master/src/examples/java/com/amazonaws/crypto/examples/v2/BasicEncryptionExample.java)

Die im vorherigen Beispiel verwendeten `Builder.withKeysForEncryption()` Methoden `Builder.build()` und sind in Version 1.7 veraltet. *x* und wurden aus Version 2.0 entfernt. *x.*

Um auf einen Master-Key-Anbieter im strikten Modus zu aktualisieren, ersetzt dieser Code Aufrufe veralteter Methoden durch einen Aufruf der neuen `Builder.buildStrict()` Methode. In diesem Beispiel wird eine AWS KMS key als Schlüssel für den Zeilenumbruch angegeben, aber die `Builder.buildStrict()` Methode kann auch eine Liste mit mehreren verwenden. AWS KMS keys

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

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

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

Dieses Beispiel stellt Code in einer Anwendung dar, die Version 1.4.1 von verwendet. AWS-Verschlüsselungs-SDK for Python Dieser Code verwendet`KMSMasterKeyProvider`, was in Version 1.7 veraltet ist. *x* und wurde aus Version 2.0 entfernt. *x.* Bei der Entschlüsselung wird jeder verwendet, der einen Datenschlüssel verschlüsselt hat AWS KMS key , unabhängig von dem, was AWS KMS keys Sie angeben. 

Beachten Sie, dass dies nicht veraltet `KMSMasterKey` ist oder entfernt wurde. Beim Verschlüsseln und Entschlüsseln werden nur die von Ihnen angegebenen verwendet. 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]
)
```

Dieses Beispiel stellt Code in einer Anwendung dar, die Version 1.7 verwendet. *x* von AWS-Verschlüsselungs-SDK for Python. Ein vollständiges Beispiel finden Sie unter [basic\$1encryption.py](https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/legacy/basic_encryption.py).

Um auf einen Master-Key-Anbieter im strikten Modus zu aktualisieren, ersetzt dieser Code den Aufruf von `KMSMasterKeyProvider()` durch einen Aufruf von`StrictAwsKmsMasterKeyProvider()`. 

```
# Create a master key provider in strict mode
# Replace the example key ARNs with valid values from your AWS-Konto
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 ]

Dieses Beispiel zeigt, wie mit der AWS Encryption CLI Version 1.1.7 oder früher ver- und entschlüsselt wird.

In Version 1.1.7 und früher geben Sie beim Verschlüsseln einen oder mehrere Hauptschlüssel (oder *Wrapping-Schlüssel) an, z. B.* einen. AWS KMS key Beim Entschlüsseln können Sie keine Umschließungsschlüssel angeben, es sei denn, Sie verwenden einen benutzerdefinierten Hauptschlüsselanbieter. Die AWS Encryption CLI kann jeden Wrapping-Schlüssel verwenden, der einen Datenschlüssel verschlüsselt hat.

```
\\ 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 .
```

Dieses Beispiel zeigt, wie mit der AWS Encryption CLI Version 1.7 ver- und entschlüsselt wird. *x oder höher*. Vollständige Beispiele finden Sie unter[Beispiele für die AWS Encryption CLI](crypto-cli-examples.md).

Der `--master-keys` Parameter ist in Version 1.7 veraltet. *x* und wurde in Version 2.0 entfernt. *x.* Er wurde durch den `--wrapping-keys` Parameter by ersetzt, der für Befehle zum Verschlüsseln und Entschlüsseln erforderlich ist. Dieser Parameter unterstützt den strikten Modus und den Erkennungsmodus. Der strikte Modus ist eine AWS Encryption SDK bewährte Methode, mit der sichergestellt wird, dass Sie den gewünschten Umbruchschlüssel verwenden. 

Um auf den *strikten Modus umzusteigen*, verwenden Sie das **Schlüsselattribut** des `--wrapping-keys` Parameters, um beim Verschlüsseln und Entschlüsseln einen Umschließungsschlüssel anzugeben. 

```
\\ 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 .
```

------

## In den Discovery-Modus migrieren
<a name="migrate-mkp-discovery-mode"></a>

Ab Version 1.7. *x*[, es hat sich bewährt AWS Encryption SDK , den *strikten Modus* für AWS KMS Hauptschlüsselanbieter zu verwenden, d. h., beim Verschlüsseln und Entschlüsseln anzugeben, dass Schlüssel eingeschlossen werden.](best-practices.md) Sie müssen beim Verschlüsseln immer Wrapping-Schlüssel angeben. Es gibt jedoch Situationen, in denen die Angabe ARNs des Schlüssels AWS KMS keys für die Entschlüsselung nicht praktikabel ist. Wenn Sie beispielsweise AWS KMS keys beim Verschlüsseln Aliase zur Identifizierung verwenden, verlieren Sie den Vorteil von Aliasen, wenn Sie beim Entschlüsseln den Schlüssel angeben müssen. ARNs Da sich Hauptschlüsselanbieter im Erkennungsmodus wie die ursprünglichen Hauptschlüsselanbieter verhalten, können Sie sie außerdem vorübergehend als Teil Ihrer Migrationsstrategie verwenden und später im strikten Modus auf Hauptschlüsselanbieter umsteigen.

In solchen Fällen können Sie Hauptschlüsselanbieter im *Erkennungsmodus* verwenden. Bei diesen Hauptschlüsselanbietern können Sie keine Schlüssel angeben, sodass Sie sie nicht zum Verschlüsseln verwenden können. Bei der Entschlüsselung können sie jeden beliebigen Umschließungsschlüssel verwenden, mit dem ein Datenschlüssel verschlüsselt wurde. Im Gegensatz zu älteren Hauptschlüsselanbietern, die sich genauso verhalten, werden sie jedoch explizit im Discovery-Modus erstellt. Wenn Sie Master-Key-Anbieter im Discovery-Modus verwenden, können Sie die Anzahl der Wrapping-Schlüssel, die verwendet werden können, auf bestimmte Schlüssel beschränken AWS-Konten. Dieser Erkennungsfilter ist optional, aber es handelt sich um eine bewährte Methode, die wir empfehlen. Informationen zu AWS Partitionen und Konten finden Sie unter [Amazon Resource Names](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax) in der *Allgemeine AWS-Referenz*.

In den folgenden Beispielen werden ein AWS KMS Master-Key-Provider im Strict-Modus für die Verschlüsselung und ein AWS KMS Master-Key-Provider im Discovery-Modus für die Entschlüsselung erstellt. Der Hauptschlüsselanbieter im Erkennungsmodus verwendet einen Erkennungsfilter, um die für die Entschlüsselung verwendeten Schlüssel auf die `aws` Partition und auf ein bestimmtes Beispiel zu beschränken. AWS-Konten Obwohl der Kontofilter in diesem sehr einfachen Beispiel nicht erforderlich ist, ist er eine bewährte Methode, die sehr nützlich ist, wenn eine Anwendung Daten verschlüsselt und eine andere Anwendung die Daten entschlüsselt.

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

Dieses Beispiel stellt Code in einer Anwendung dar, die Version 1.7 verwendet. *x* oder höher von AWS-Verschlüsselungs-SDK for Java. Ein vollständiges Beispiel finden Sie unter [DiscoveryDecryptionExample.java.](https://github.com/aws/aws-encryption-sdk-java/blob/master/src/examples/java/com/amazonaws/crypto/examples/)

Um einen Hauptschlüsselanbieter im strikten Modus für die Verschlüsselung zu instanziieren, verwendet dieses Beispiel die Methode. `Builder.buildStrict()` Um einen Hauptschlüsselanbieter im Discovery-Modus für die Entschlüsselung zu instanziieren, wird die Methode verwendet. `Builder.buildDiscovery()` Die `Builder.buildDiscovery()` Methode verwendet eine, `DiscoveryFilter` die den Wert AWS Encryption SDK auf AWS KMS keys in der angegebenen AWS Partition und den angegebenen Konten begrenzt. 

```
// Create a master key provider in strict mode for encrypting
// Replace the example alias ARN with a valid one from your AWS-Konto.
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 ]

 Dieses Beispiel stellt Code in einer Anwendung dar, die Version 1.7 verwendet. *x* oder höher von AWS-Verschlüsselungs-SDK for Python . Ein vollständiges Beispiel finden Sie unter [discovery\$1kms\$1provider.py](https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/legacy/discovery_kms_provider.py).

Um einen Hauptschlüsselanbieter im strikten Modus für die Verschlüsselung zu erstellen, verwendet `StrictAwsKmsMasterKeyProvider` dieses Beispiel. Um einen Hauptschlüsselanbieter im Discovery-Modus für die Entschlüsselung zu erstellen, wird `DiscoveryAwsKmsMasterKeyProvider` with a verwendet, `DiscoveryFilter` das den Wert AWS Encryption SDK auf AWS KMS keys in der angegebenen AWS Partition und den angegebenen Konten begrenzt. 

```
# Create a master key provider in strict mode
# Replace the example key ARN and alias ARNs with valid values from your AWS-Konto.
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 ]

Dieses Beispiel zeigt, wie mit der AWS Encryption CLI Version 1.7 ver- und entschlüsselt wird. *x oder höher*. Ab Version 1.7. *x*, der `--wrapping-keys` Parameter ist beim Verschlüsseln und Entschlüsseln erforderlich. Der `--wrapping-keys` Parameter unterstützt den Strict-Modus und den Discovery-Modus. Vollständige Beispiele finden Sie unter[Beispiele für die AWS Encryption CLI](crypto-cli-examples.md).

Bei der Verschlüsselung gibt dieses Beispiel einen Umschließungsschlüssel an, der erforderlich ist. Beim Entschlüsseln wird explizit der *Erkennungsmodus* ausgewählt, indem das `discovery` Attribut des `--wrapping-keys` Parameters mit dem Wert von verwendet wird. `true` 

Um die Anzahl der Schlüssel, die im Discovery-Modus verwendet werden AWS Encryption SDK können, auf bestimmte Schlüssel zu beschränken AWS-Konten, werden in diesem Beispiel die `discovery-account` Attribute `discovery-partition` und des `--wrapping-keys` Parameters verwendet. Diese optionalen Attribute sind nur gültig, wenn das `discovery` Attribut auf gesetzt ist`true`. Sie müssen die `discovery-account` Attribute `discovery-partition` und zusammen verwenden. Keines der Attribute ist alleine gültig.

```
\\ 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 .
```

------