

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# アクティブなブランチキーをローテーションする
<a name="rotate-branch-key"></a>

各ブランチキーのために一度に存在できるアクティブなバージョンは 1 つだけです。通常、アクティブな各ブランチキーバージョンは、複数のリクエストを満たすために使用されます。ただし、ユーザーがアクティブなブランチキーを再利用する範囲を制御し、アクティブなブランチキーをローテーションする頻度を決定します。

ブランチキーは、プレーンテキストデータキーの暗号化には使用されません。これらは、プレーンテキストデータキーを暗号化する一意のラッピングキーを導出するために使用されます。[ラッピングキー導出プロセス](reference.md#hierarchical-keyring-details)では、28 バイトのランダム性を備えた一意の 32 バイトのラッピングキーが生成されます。これは、暗号の摩耗が発生する前に、ブランチキーが 7 穣 9 秭、つまり 296 を超える一意のラッピングキーを導出できることを意味します。このように枯渇するリスクは極めて低いものの、ビジネスルールや契約、政府の規制により、アクティブなブランチキーのローテーションが必要になる場合があります。

ブランチキーのアクティブなバージョンは、ローテーションされるまでアクティブなままとなります。以前のバージョンのアクティブなブランチキーは、暗号化オペレーションの実行には使用されず、新しいラッピングキーの取得には使用できませんが、引き続きクエリを実行し、アクティブ中に暗号化したデータキーを復号するためのラッピングキーを提供できます。

**警告**  
テスト環境でのブランチキーの削除は元に戻せません。削除されたブランチキーは復元できません。テスト環境で同じ ID のブランチキーを削除して再作成すると、次の問題が発生する可能性があります。  
以前のテスト実行のマテリアルはキャッシュに残る可能性があります
一部のテストホストまたはスレッドは、削除されたブランチキーを使用してデータを暗号化する場合があります
削除されたブランチで暗号化されたデータは復号できません
統合テストで暗号化の失敗を防ぐには:  
新しいブランチキーを作成する前に階層キーリングリファレンスをリセットする、または
テストごとに一意のブランチキー IDs 

**必要なアクセス許可**  
ブランチキーをローテーションするには、キーストアアクションで指定された KMS キーに対する [kms:GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) および [kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) アクセス許可が必要です。

**アクティブなブランチキーをローテーションする**  
`VersionKey` オペレーションを使用して、アクティブなブランチキーをローテーションします。アクティブなブランチキーをローテーションすると、以前のバージョンを置き換えるために新しいブランチキーが作成されます。アクティブなブランチキーをローテーションしても、`branch-key-id` は変わりません。`VersionKey` を呼び出す際に、現在アクティブなブランチキーを識別する `branch-key-id` を指定する必要があります。

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

```
keystore.VersionKey(
    VersionKeyInput.builder()
        .branchKeyIdentifier("branch-key-id")
        .build()
);
```

------
#### [ C\$1 / .NET ]

```
 keystore.VersionKey(new VersionKeyInput{BranchKeyIdentifier = branchKeyId});
```

------
#### [ Rust ]

```
keystore.version_key()
        .branch_key_identifier(branch_key_id)
        .send()
        .await?;
```

------