

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.

# Migration des Amazon S3-Verschlüsselungsclients (V1 auf V2) im AWS SDK für PHP Version 3
<a name="s3-encryption-migration-v1-v2"></a>

**Anmerkung**  
Wenn Sie Version 2 (V2) des Amazon S3-Verschlüsselungsclients verwenden und auf Version 3 (V3) migrieren möchten, finden Sie weitere Informationen unter[Migration des Amazon S3-Verschlüsselungsclients (V2 auf V3) im AWS SDK für PHP Version 3](s3-encryption-migration-v2-v3.md).

In diesem Thema wird gezeigt, wie Sie Ihre Anwendungen von Version 1 (V1) des Amazon Simple Storage Service (Amazon S3) -Verschlüsselungsclients auf Version 2 (V2) migrieren und die Anwendungsverfügbarkeit während des gesamten Migrationsprozesses sicherstellen.

## Überblick über die Migration
<a name="migration-overview-v1-v2"></a>

Diese Migration erfolgt in zwei Phasen:

1. **Aktualisieren Sie bestehende Clients, damit sie neue Formate lesen können. ** Stellen Sie zunächst eine aktualisierte Version von AWS SDK für PHP in Ihrer Anwendung bereit. Auf diese Weise können vorhandene V1-Verschlüsselungsclients Objekte entschlüsseln, die von den neuen V2-Clients geschrieben wurden. Wenn Ihre Anwendung mehrere AWS SDKs verwendet, müssen Sie jedes SDK separat aktualisieren.

2. **Migrieren Sie die Verschlüsselungs- und Entschlüsselungsclients auf V2. ** Sobald alle Ihre V1-Verschlüsselungsclients neue Formate lesen können, können Sie Ihre vorhandenen Verschlüsselungs- und Entschlüsselungsclients auf ihre jeweiligen V2-Versionen migrieren.

## Aktualisieren Sie bestehende Clients, um neue Formate zu lesen
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

Der V2-Verschlüsselungsclient verwendet Verschlüsselungsalgorithmen, die ältere Versionen des Clients nicht unterstützen. Der erste Schritt der Migration besteht darin, Ihre V1-Entschlüsselungsclients auf die neueste SDK-Version zu aktualisieren. Nach Abschluss dieses Schritts können die V1-Clients Ihrer Anwendung Objekte entschlüsseln, die mit V2-Verschlüsselungsclients verschlüsselt wurden. Einzelheiten zu den einzelnen Hauptversionen von finden Sie weiter unten. AWS SDK für PHP

### Wird geupgradet AWS SDK für PHP Version 3
<a name="upgrading-aws-sdk-for-php-version-3-v1-v2"></a>

Version 3 ist die neueste Version von AWS SDK für PHP. Um diese Migration abzuschließen, müssen Sie Version 3.148.0 oder höher des `aws/aws-sdk-php` Pakets verwenden.

 **Installation über die Befehlszeile ** 

Aktualisieren Sie für Projekte, die mit Composer installiert wurden, in der Composer-Datei das SDK-Paket auf Version 3.148.0 des SDK und führen Sie dann den folgenden Befehl aus.

```
composer update aws/aws-sdk-php
```

 **Installation mithilfe der Phar- oder Zip-Datei ** 

Verwenden Sie eine der folgenden Methoden: Stellen Sie sicher, dass Sie die aktualisierte SDK-Datei an dem Ort platzieren, der für Ihren Code erforderlich ist. Dieser wird in der Requre-Anweisung festgelegt.

Laden Sie für Projekte, die mithilfe der Phar-Datei installiert wurden, die aktualisierte Datei herunter: [`aws.phar`](https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.phar).

```
<?php
  require '/path/to/aws.phar';
?>
```

Laden Sie für Projekte, die mithilfe der Zip-Datei installiert wurden, die aktualisierte Datei herunter: [``](https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip).

```
<?php
  require '/path/to/aws-autoloader.php';
?>
```

## Migrieren Sie die Verschlüsselungs- und Entschlüsselungsclients auf V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

Nachdem Sie Ihre Clients auf die neuen Verschlüsselungsformate aktualisiert haben, können Sie Ihre Anwendungen auf die V2-Verschlüsselungs- und Entschlüsselungsclients aktualisieren. Die folgenden Schritte zeigen Ihnen, wie Sie Ihren Code erfolgreich von V1 auf V2 migrieren.

### Anforderungen für die Aktualisierung auf V2-Clients
<a name="requirements-for-updating-to-v2-clients-v1-v2"></a>

1. Der AWS KMS Verschlüsselungskontext muss an die `S3EncryptionClientV2::putObjectAsync` Methoden `S3EncryptionClientV2::putObject` und übergeben werden. AWS KMS Der Verschlüsselungskontext ist ein assoziatives Array von Schlüssel-Wert-Paaren, die Sie dem Verschlüsselungskontext für AWS KMS die Schlüsselverschlüsselung hinzufügen müssen. Wenn kein zusätzlicher Kontext erforderlich ist, können Sie ein leeres Array übergeben.

2. `@SecurityProfile`muss in die `getObject` und `getObjectAsync` Methoden in übergeben werden`S3EncryptionClientV2`. `@SecurityProfile`ist ein neuer obligatorischer Parameter der `getObject...` Methoden. Wenn auf gesetzt`'V2'`, können nur Objekte entschlüsselt werden, V2-compatible deren Format verschlüsselt ist. Wenn Sie diesen Parameter auf setzen, können `'V2_AND_LEGACY'` auch Objekte, die im V1-compatible Format verschlüsselt sind, entschlüsselt werden. Um die Migration zu unterstützen, setzen Sie den Wert `@SecurityProfile` auf`'V2_AND_LEGACY'`. `'V2'`Nur für die Entwicklung neuer Anwendungen verwenden.

3. (optional) Fügen Sie den `@KmsAllowDecryptWithAnyCmk` Parameter in das `S3EncryptionClientV2::getObjectAsync* methods.` ein `S3EncryptionClientV2::getObject` und Es wurde ein neuer Parameter namens hinzugefügt`@KmsAllowDecryptWithAnyCmk`. Wenn Sie diesen Parameter so einstellen, dass die Entschlüsselung ohne Angabe eines KMS-Schlüssels `true` aktiviert wird. Der Standardwert ist `false`.

4. Wenn für die Entschlüsselung mit einem V2-Client der `@KmsAllowDecryptWithAnyCmk` Parameter `true` für die `"getObject..."` Methodenaufrufe nicht auf gesetzt ist, `kms-key-id` muss a an den `KmsMaterialsProviderV2` Konstruktor übergeben werden.

## Beispiele für Migrationen
<a name="migration-examples-v1-v2"></a>

### Beispiel 1: Migration zu V2-Clients
<a name="example-1-migrating-to-v2-clients-v1-v2"></a>

 **Pre-migration** 

```
use Aws\S3\Crypto\S3EncryptionClient;
use Aws\S3\S3Client;

$encryptionClient = new S3EncryptionClient(
    new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ])
);
```

 **Post-migration** 

```
use Aws\S3\Crypto\S3EncryptionClientV2;
use Aws\S3\S3Client;

$encryptionClient = new S3EncryptionClientV2(
    new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ])
);
```

### Beispiel 2: Verwenden AWS KMS mit kms-key-id
<a name="example-2-using-kms-with-kms-key-id-v1-v2"></a>

**Anmerkung**  
Diese Beispiele verwenden Importe und Variablen, die in Beispiel 1 definiert sind. Beispiel, `$encryptionClient`.

 **Pre-migration** 

```
use Aws\Crypto\KmsMaterialsProvider;
use Aws\Kms\KmsClient;

$kmsKeyId = 'kms-key-id';
$materialsProvider = new KmsMaterialsProvider(
    new KmsClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ]),
    $kmsKeyId
);

$bucket = 'the-bucket-name';
$key = 'the-file-name';
$cipherOptions = [
    'Cipher' => 'gcm',
    'KeySize' => 256,
];

$encryptionClient->putObject([
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    'Bucket' => $bucket,
    'Key' => $key,
    'Body' => fopen('file-to-encrypt.txt', 'r'),
]);

$result = $encryptionClient->getObject([
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    'Bucket' => $bucket,
    'Key' => $key,
]);
```

 **Post-migration** 

```
use Aws\Crypto\KmsMaterialsProviderV2;
use Aws\Kms\KmsClient;

$kmsKeyId = 'kms-key-id';
$materialsProvider = new KmsMaterialsProviderV2(
    new KmsClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ]),
    $kmsKeyId
);

$bucket = 'the-bucket-name';
$key = 'the-file-name';
$cipherOptions = [
    'Cipher' => 'gcm',
    'KeySize' => 256,
];

$encryptionClient->putObject([
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    '@KmsEncryptionContext' => ['context-key' => 'context-value'],
    'Bucket' => $bucket,
    'Key' => $key,
    'Body' => fopen('file-to-encrypt.txt', 'r'),
]);
$result = $encryptionClient->getObject([
    '@KmsAllowDecryptWithAnyCmk' => true,
    '@SecurityProfile' => 'V2_AND_LEGACY',
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    'Bucket' => $bucket,
    'Key' => $key,
]);
```