

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 轮换您的活动分支密钥
<a name="rotate-branch-key"></a>

每个分支密钥一次仅能有一个活动版本。通常，每个有效的分支密钥版本都用于满足多个请求。但是您可以控制活动分支密钥的重复使用程度，并确定活动分支密钥的轮换频率。

分支密钥不用于加密明文数据密钥。它们用于派生对明文数据密钥进行加密的唯一包装密钥。[包装密钥派生过程](hierarchical-keyring-details.md)生成唯一的 32 字节包装密钥，其随机掩码为 28 字节。这意味着，在发生加密损耗之前，分支密钥可以派生出超过 79 万亿或 296 个唯一的包装密钥。尽管耗尽风险非常低，但由于业务或合同规则或政府法规，您可能需要轮换活动分支密钥。

在您轮换之前，分支密钥的活动版本会一直处于活动状态。以前版本的活动分支密钥不会用于执行加密操作，也不能用于派生新的包装密钥，但仍然可以查询这些密钥并提供包装密钥来解密它们在活动状态下加密的数据密钥。

**所需的权限**  
要轮换分支密钥，您需要密[钥存储操作中指定的 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\# / .NET ]

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

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

```
keystore.version_key(
    VersionKeyInput(
        branch_key_identifier={{branch_key_id}}
    )
)
```

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

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

------
#### [ Go ]

```
_, err = keyStore.VersionKey(context.Background(), keystoretypes.VersionKeyInput{
    BranchKeyIdentifier: branchKeyId,
})
if err != nil {
    return err
}
```

------