配置密钥存储操作 - AWS Encryption SDK

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

配置密钥存储操作

密钥存储操作决定了您的用户可以执行哪些操作,以及他们的 AWS KMS 分层密钥环如何使用KMS密钥库中列出的密钥。 AWS Encryption SDK 支持以下密钥存储操作配置。

静态

当您静态配置密钥库时,密钥库只能使用与ARN您在配置KMS密钥库操作kmsConfiguration时提供的密钥关联的密钥。KMS如果在创建、版本控制或获取分支KMS密钥时遇到不同的密钥,ARN则会引发异常。

您可以在中指定多区域KMS密钥kmsConfiguration,但是密钥的整个ARN密钥(包括区域)都保留在从该密钥派生的分支密钥中KMS。您不能在其他区域指定密钥,必须提供完全相同的多区域密钥才能使值匹配。

静态配置密钥存储操作时,可以执行使用操作 (GetActiveBranchKeyGetBranchKeyVersionGetBeaconKey) 和管理操作 (CreateKeyVersionKey)。 CreateKey是一种特权操作,可以将新KMS密钥ARN添加到您的密钥库许可名单。此KMS密钥可以创建新的活动分支密钥。我们建议限制对此操作的访问权限,因为一旦KMS密钥被添加到密钥库中,就无法将其删除。

Discovery

当您配置密钥库操作以供发现时,密钥库可以使用密钥库中列入许可名单的任何 AWS KMS key ARN操作。但是,当遇到多区域KMS密钥并且密钥中的区域与正在使用的 AWS KMS 客户端的区域ARN不匹配时,会引发异常。

在配置密钥库以供发现时,您无法执行管理操作,例如CreateKeyVersionKey。您只能执行启用加密、解密、签名和验证操作的使用操作。有关更多信息,请参阅 实施最低权限

配置您的关键商店操作

在配置密钥存储操作之前,请确保满足以下先决条件。

  • 确定您需要执行哪些操作。有关更多信息,请参阅 实施最低权限

  • 选择一个逻辑密钥存储名称

    DynamoDB 表名称和逻辑密钥存储名称之间必须存在 one-to-one映射。逻辑密钥存储名称以加密方式绑定到表中存储的所有数据,以简化 DynamoDB 还原操作,在第一个用户最初定义后无法对其进行更改。在密钥存储操作中,必须始终指定相同的逻辑密钥存储名称。有关更多信息,请参阅 logical key store name

以下示例以静态方式配置密钥存储操作。您必须指定用作密钥存储的 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() ), ) )