使用一些KMS区域主键获取数据键,然后添加两个区域以获取相同的数据密钥加密



我正在隐式地生成数据加密密钥(所使用的密钥ID只是表示):

from aws_encryption_sdk import encrypt
# Key provider with only 2 region master keys to begin with
kms_key_provider = KMSMasterKeyProvider(key_ids=[“west-1”, “west-2”])
# encrypt something random only to get the encrypted data keys in the header from those 2 regions
my_ciphertext, encryptor_header = encrypt(source=“somerandomplaintextofnorelevance”, key_provider= kms_key_provider, algorithm=AWSKeyProvider.DEFAULT_ALGORITHM, encryption_context={“somekey”: “some value”})
my_data_keys = []
for dek in encryptor_header.encrypted_data_keys:
    my_data_keys.append(dek.encrypted_data_key)

我在my_data_keys中获得了两个加密的数据加密键(DEK)字符串(例如,dek_enc_west_1和dek_enc_west_2),这两个都将解密到单个普通数据加密密钥,例如,dek_plain。现在,我可以在任何一个区域中加密/解密DEK_PLAIN。

然后,我继续激活East-1和East-2地区的另外两个主键。现在,我希望在这两个新区域(EAST-1& sEAT-2)主键下获得两个新的加密数据键(例如,dek_enc_east_1 and dek_enc_east_2)。

因此,与新的完全组建的主要提供商相似:

kms_key_provider = KMSMasterKeyProvider(key_ids=[“west-1”, “west-2”, “east-1”, “east-2”])

我可以使用:

从这四个区域中的任何一个中获取我的dek_plain
my_plain_data_key = kms_key_provider.decrypt_data_key_from_list(…..)

基本上,我如何添加其他区域主键,以使用以前存在的其他一些区域的主键来利用相同的数据加密密钥来生成和加密?

在AWS Crypto文档中环顾四周,我发现类似以下示例有助于我的案例(尽管如果KMS密钥提供商实现具有此类区域扩展器的功能,那将是理想的数据键:)。在下面的假设中,从上面的问题分配了plain_dek。

new_region_key_id_1 = "arn:aws:kms:us-east-1:XXXXXXXXXX:alias/xyz/master"
new_region_master_key_1 = kms_key_provider.master_key_for_encrypt(new_region_key_id_1)
key_provider_info = {"provider_id": u'aws-kms', "key_info": new_region_key_id_1}
key_provider_info_obj = MasterKeyInfo(**key_provider_info)
plain_dk_raw = RawDataKey(key_provider_info_obj, plain_dek)
encryption_context = {“somekey”: “some value”}
new_encrypted_dek_from_region_new_master_key_1 = new_region_master_key_1.encrypt_data_key(plain_dk_raw, AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384, encryption_context)

可以在任何数量的新的KMS区域中重复进行循环重复,从而在更广泛的AWS区域中扩展了现有的数据密钥,例如,新的主键最近被添加了。

最新更新