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

时间:2017-12-12 07:51:01

标签: aws-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_enc_west_1和DEK_enc_west_2)中获得两个加密的数据加密密钥(DEK)字符串,这两个字符串都将解密为单个纯数据加密密钥,例如DEK_Plain。现在,我可以在任一区域中为DEK_Plain加密/解密以实现冗余。

然后,我继续在东区1和东区2区域激活另外两个主密钥。现在我希望在这两个新区域(east-1& east-2)主密钥下加密相同的DEK_Plain以获得两个新的加密数据密钥(例如,DEK_enc_east_1和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(…..)

基本上,我如何添加额外的区域主密钥以用于之前使用其他区域主密钥生成和加密的相同数据加密密钥?

1 个答案:

答案 0 :(得分:0)

在AWS加密文档中查看,我发现类似下面的示例帮助我的情况(尽管如果KMS密钥提供程序实现具有数据密钥的区域扩展器功能,那将是理想的:)。在下面假设从上面的问题中为plain_dek分配了DEK_Plain。

if ($role >= 3 && $role <= 7) {
    return true;
}
else {
    return false;
}

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