本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置密钥存储操作
密钥存储操作决定了您的用户可以执行哪些操作,以及他们的 AWS KMS 分层密钥环如何使用KMS密钥库中列出的密钥。 AWS Encryption SDK 支持以下密钥存储操作配置。
- 静态
-
当您静态配置密钥库时,密钥库只能使用与ARN您在配置KMS密钥库操作kmsConfiguration
时提供的密钥关联的密钥。KMS如果在创建、版本控制或获取分支KMS密钥时遇到不同的密钥,ARN则会引发异常。
您可以在中指定多区域KMS密钥kmsConfiguration
,但是密钥的整个ARN密钥(包括区域)都保留在从该密钥派生的分支密钥中KMS。您不能在其他区域指定密钥,必须提供完全相同的多区域密钥才能使值匹配。
静态配置密钥存储操作时,可以执行使用操作 (GetActiveBranchKey
、GetBranchKeyVersion
、GetBeaconKey
) 和管理操作 (CreateKey
和VersionKey
)。 CreateKey
是一种特权操作,可以将新KMS密钥ARN添加到您的密钥库许可名单。此KMS密钥可以创建新的活动分支密钥。我们建议限制对此操作的访问权限,因为一旦KMS密钥被添加到密钥库中,就无法将其删除。
- Discovery
-
当您配置密钥库操作以供发现时,密钥库可以使用密钥库中列入许可名单的任何 AWS KMS key ARN操作。但是,当遇到多区域KMS密钥并且密钥中的区域与正在使用的 AWS KMS 客户端的区域ARN不匹配时,会引发异常。
在配置密钥库以供发现时,您无法执行管理操作,例如CreateKey
和VersionKey
。您只能执行启用加密、解密、签名和验证操作的使用操作。有关更多信息,请参阅 实施最低权限。
配置您的关键商店操作
在配置密钥存储操作之前,请确保满足以下先决条件。
以下示例以静态方式配置密钥存储操作。您必须指定用作密钥存储的 DynamoDB 表的名称、密钥存储的逻辑名称以及标识对称加密ARN密钥KMS的密钥。KMS
在静态配置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);
- Python
-
keystore: KeyStore = KeyStore(
config=KeyStoreConfig(
ddb_client=ddb_client,
ddb_table_name=key_store_name
,
logical_key_store_name=logical_key_store_name
,
kms_client=kms_client,
kms_configuration=KMSConfigurationKmsKeyArn(
value=kms_key_id
),
)
)
以下示例配置了用于发现的密钥存储操作。您必须指定用作密钥存储的 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);
- Python
-
keystore: KeyStore = KeyStore(
config=KeyStoreConfig(
ddb_client=ddb_client,
ddb_table_name=key_store_name
,
logical_key_store_name=logical_key_store_name
,
kms_client=kms_client,
kms_configuration=KMSConfigurationDiscovery(
value=Discovery()
),
)
)