本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置密钥存储操作
密钥存储操作决定了您的用户可以执行哪些操作,以及他们的 AWS KMS 分层密钥环如何使用您的密钥存储中允许列出的 KMS 密钥。 AWS 数据库加密 SDK 支持以下密钥存储操作配置。
- 静态
-
当您静态配置密钥存储时,密钥存储只能使用与您在配置密钥存储操作时提供的 KMS 密钥 ARN 关联的 KMS 密钥。kmsConfiguration如果在创建、版本控制或获取分支密钥时遇到不同的 KMS 密钥 ARN,则会引发异常。
您可以在中指定多区域 KMS 密钥kmsConfiguration,但该密钥的整个 ARN(包括区域)都保留在从 KMS 密钥派生的分支密钥中。您不能在其他区域指定密钥,必须提供完全相同的多区域密钥才能使值匹配。
静态配置密钥存储操作时,可以执行使用操作 (GetActiveBranchKey、GetBranchKeyVersion、GetBeaconKey) 和管理操作 (CreateKey和VersionKey)。 CreateKey是一项特权操作,可以将新的 KMS 密钥 ARN 添加到您的密钥库许可名单。此 KMS 密钥可以创建新的活动分支密钥。我们建议限制对此操作的访问权限,因为将 KMS 密钥添加到密钥存储库后,便无法将其删除。
- Discovery
-
当您配置密钥库操作以进行发现时,密钥库可以使用密钥库中列入许可名单的任何 AWS KMS key ARN。但是,如果遇到多区域 KMS 密钥,并且该密钥的 ARN 中的区域与正在使用的客户端的区域不匹配,则会引发异常。 AWS KMS
配置密钥库以供发现时,您无法执行管理操作,例如CreateKey和VersionKey。您只能执行启用加密、解密、签名和验证操作的使用操作。有关更多信息,请参阅 实施最低权限。
配置您的关键商店操作
在配置密钥存储操作之前,请确保满足以下先决条件。
以下示例静态配置密钥存储操作。您必须指定用作密钥存储的 DynamoDB 表的名称、密钥存储的逻辑名称以及标识对称加密 KMS 密钥的 KMS 密钥 ARN。
请仔细考虑您在静态配置密钥存储服务时指定的 KMS 密钥 ARN。该CreateKey操作将 KMS 密钥 ARN 添加到您的分支密钥存储许可名单中。将 KMS 密钥添加到分支密钥存储库后,便无法将其删除。
- Java
-
final KeyStore keystore = KeyStore.builder().KeyStoreConfig(
KeyStoreConfig.builder()
.ddbClient(DynamoDbClient.create())
.ddbTableName(keyStoreName)
.logicalKeyStoreName(logicalKeyStoreName)
.kmsClient(KmsClient.create())
.kmsConfiguration(KMSConfiguration.builder()
.kmsKeyArn(kmsKeyArn)
.build())
.build()).build();
- C# / .NET
-
var kmsConfig = new KMSConfiguration { KmsKeyArn = kmsKeyArn };
var keystoreConfig = new KeyStoreConfig
{
KmsClient = new AmazonKeyManagementServiceClient(),
KmsConfiguration = kmsConfig,
DdbTableName = keyStoreName,
DdbClient = new AmazonDynamoDBClient(),
LogicalKeyStoreName = logicalKeyStoreName
};
var keystore = new KeyStore(keystoreConfig);
- Rust
-
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let key_store_config = KeyStoreConfig::builder()
.kms_client(aws_sdk_kms::Client::new(&sdk_config))
.ddb_client(aws_sdk_dynamodb::Client::new(&sdk_config))
.ddb_table_name(key_store_name)
.logical_key_store_name(logical_key_store_name)
.kms_configuration(KmsConfiguration::KmsKeyArn(kms_key_arn.to_string()))
.build()?;
let keystore = keystore_client::Client::from_conf(key_store_config)?;
以下示例配置了用于发现的密钥存储操作。您必须指定用作密钥存储的 DynamoDB 表的名称和逻辑密钥存储名称。
- Java
-
final KeyStore keystore = KeyStore.builder().KeyStoreConfig(
KeyStoreConfig.builder()
.ddbClient(DynamoDbClient.create())
.ddbTableName(keyStoreName)
.logicalKeyStoreName(logicalKeyStoreName)
.kmsClient(KmsClient.create())
.kmsConfiguration(KMSConfiguration.builder()
.discovery(Discovery.builder().build())
.build())
.build()).build();
- C# / .NET
-
var keystoreConfig = new KeyStoreConfig
{
KmsClient = new AmazonKeyManagementServiceClient(),
KmsConfiguration = new KMSConfiguration {Discovery = new Discovery()},
DdbTableName = keyStoreName,
DdbClient = new AmazonDynamoDBClient(),
LogicalKeyStoreName = logicalKeyStoreName
};
var keystore = new KeyStore(keystoreConfig);
- Rust
-
let key_store_config = KeyStoreConfig::builder()
.kms_client(kms_client)
.ddb_client(ddb_client)
.ddb_table_name(key_store_name)
.logical_key_store_name(logical_key_store_name)
.kms_configuration(KmsConfiguration::Discovery(Discovery::builder().build()?))
.build()?;