

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

# 更新 AWS KMS 钥匙圈
<a name="migrate-keyrings-v2"></a>

中的 AWS KMS 密钥环[AWS Encryption SDK for C](c-language.md)、[AWS Encryption SDK 适用于.NET 的](dot-net.md)密钥圈以及允许您在加密和解密时指定包装密钥来[AWS Encryption SDK for JavaScript](javascript.md)支持[最佳实践](best-practices.md)。如果您创建了 [AWS KMS Discovery 密钥环](use-kms-keyring.md#kms-keyring-discovery)，需要明确执行此操作。

**注意**  
.NET AWS Encryption SDK 的最早版本是 3.0 版。 *x*。.NET 的所有版本都支持 2.0 中引入的安全最佳实践。 AWS Encryption SDK *的 x 个* AWS Encryption SDK。无需更改任何代码或数据即可安全升级到最新版本。

当你更新到最新版本时 1. *x* 版本的 AWS Encryption SDK，您可以使用[发现过滤器将发现](use-kms-keyring.md#kms-keyring-discovery)密钥[环或AWS KMS 区域发现密钥环](use-kms-keyring.md#kms-keyring-discovery)[在解密时使用的包装密钥](use-kms-keyring.md#kms-keyring-regional)限制为特定的封装密钥。AWS KMS AWS 账户筛选发现密钥环是 AWS Encryption SDK [最佳做法](best-practices.md)。

本节中的示例将演示如何向 AWS KMS Regional Discovery 密钥环添加发现筛选条件。

**了解有关迁移的更多信息**

对于所有 AWS Encryption SDK 用户，请在中了解如何设置您的承诺政策[设置您的承诺策略](migrate-commitment-policy.md)。

对于 AWS Encryption SDK for Java AWS Encryption SDK for Python、和 AWS 加密 CLI 用户，请在中了解主密钥提供程序所需的更新[更新 AWS KMS 主密钥提供程序](migrate-mkps-v2.md)。

 

您的应用程序中可能有如下类似代码。此示例创建 AWS KMS Regional Discovery 密钥环，该密钥环仅能在美国西部（俄勒冈州）（us-west-2）区域使用包装密钥。此示例表示 1.7 之前 AWS Encryption SDK 版本中的代码。 *x*。但其在版本 1.7.*x* 及更高版本中仍然有效。

------
#### [ C ]

```
struct aws_cryptosdk_keyring *kms_regional_keyring = Aws::Cryptosdk::KmsKeyring::Builder()
       .WithKmsClient(create_kms_client(Aws::Region::US_WEST_2)).BuildDiscovery());
```

------
#### [ JavaScript Browser ]

```
const clientProvider = getClient(KMS, { credentials })

const discovery = true
const clientProvider = limitRegions(['us-west-2'], getKmsClient)
const keyring = new KmsKeyringBrowser({ clientProvider, discovery })
```

------
#### [ JavaScript Node.js ]

```
const discovery = true
const clientProvider = limitRegions(['us-west-2'], getKmsClient)
const keyring = new KmsKeyringNode({ clientProvider, discovery })
```

------

从 1.7 版本开始。 *x*，您可以向任何发现密钥环添加 AWS KMS 发现过滤器。此发现过滤器将 AWS KMS keys AWS Encryption SDK 可用于解密的限制为指定分区和帐户中的分区和帐户。在使用此代码之前，如有必要，请更改分区，并将示例帐户 IDs 替换为有效的帐户。

------
#### [ C ]

有关完整示例，请参阅：[kms\$1discovery.cpp](https://github.com/aws/aws-encryption-sdk-c/blob/master/examples/kms_discovery.cpp)。

```
std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter(
    KmsKeyring::DiscoveryFilter::Builder("aws")
        .AddAccount("111122223333")
        .AddAccount("444455556666")
        .Build());

struct aws_cryptosdk_keyring *kms_regional_keyring = Aws::Cryptosdk::KmsKeyring::Builder()
       .WithKmsClient(create_kms_client(Aws::Region::US_WEST_2)).BuildDiscovery(discovery_filter));
```

------
#### [ JavaScript Browser ]

```
const clientProvider = getClient(KMS, { credentials })

const discovery = true
const clientProvider = limitRegions(['us-west-2'], getKmsClient)
const keyring = new KmsKeyringBrowser(clientProvider, {
    discovery,
    discoveryFilter: { accountIDs: ['111122223333', '444455556666'], partition: 'aws' }
})
```

------
#### [ JavaScript Node.js ]

有关完整示例，请参阅：[kms\$1filtered\$1discovery.ts](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-node/src/kms_filtered_discovery.ts)。

```
const discovery = true
const clientProvider = limitRegions(['us-west-2'], getKmsClient)
const keyring = new KmsKeyringNode({
    clientProvider,
    discovery,
    discoveryFilter: { accountIDs: ['111122223333', '444455556666'], partition: 'aws' }
})
```

------