

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

中的 AWS KMS keyring[適用於 C 的 AWS Encryption SDK](c-language.md)、 [AWS Encryption SDK for .NET](dot-net.md) 和 [適用於 JavaScript 的 AWS Encryption SDK](javascript.md) 支援[最佳實務](best-practices.md)，可讓您在加密和解密時指定包裝金鑰。如果您建立[AWS KMS 探索 keyring](use-kms-keyring.md#kms-keyring-discovery)，請明確執行此操作。

**注意**  
for .NET AWS Encryption SDK 的最早版本是 3.0.*x* 版。 AWS Encryption SDK 適用於 .NET 的所有版本都支援 2.0.*x* 中引入的安全最佳實務。 AWS Encryption SDK您可以安全地升級至最新版本，無需變更任何程式碼或資料。

當您更新至最新的 1.*x* 版本時 AWS Encryption SDK，您可以使用[探索篩選條件](use-kms-keyring.md#kms-keyring-discovery)來限制[AWS KMS 探索 keyring](use-kms-keyring.md#kms-keyring-discovery) 或[AWS KMS 區域探索 keyring](use-kms-keyring.md#kms-keyring-regional) 在解密時所使用的包裝金鑰 AWS 帳戶。篩選探索 keyring 是 AWS Encryption SDK [最佳實務](best-practices.md)。

本節中的範例將示範如何將探索篩選條件 AWS KMS 新增至區域探索 keyring。

**進一步了解遷移**

對於 AWS Encryption SDK 所有使用者，了解如何在 中設定您的承諾政策[設定您的承諾政策](migrate-commitment-policy.md)。

對於 適用於 JAVA 的 AWS Encryption SDK 適用於 Python 的 AWS Encryption SDK和 AWS Encryption CLI 使用者，了解 中主金鑰提供者的必要更新[更新 AWS KMS 主金鑰提供者](migrate-mkps-v2.md)。

 

您的應用程式中可能會有如下的程式碼。此範例會建立只能在美國西部 （奧勒岡） (us-west-2) 區域中使用包裝金鑰的區域 AWS KMS 探索 keyring。此範例代表 1.7.*x* 之前 AWS Encryption SDK 版本的程式碼。不過，它在 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 探索 keyring。此探索篩選條件會將 AWS Encryption SDK 可用於解密 AWS KMS keys 的 限制為指定分割區和帳戶中的 。使用此程式碼之前，請視需要變更分割區，並以有效的帳戶 ID 取代範例帳戶 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' }
})
```

------