2017-12-12 10 views
0

내가 암시 적으로 데이터 암호화 키를 생성하고 암호화 얻기 위해 두 가지 이상의 영역을 추가 (사용 키 ID는 단지 구상이다) :일부 KMS 지역 마스터 키를 사용하여 데이터 키를 얻기 다음 동일한 데이터 키는 다음과 같이

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을 암호화/해독 할 수 있습니다.

그런 다음 east-1 및 east-2 영역에서 두 개의 마스터 키를 활성화합니다. 이제 동일한 두 DEK_Plain을 두 개의 새로운 영역 (east-1 & east-2) 마스터 키로 암호화하여 두 개의 새로운 암호화 된 데이터 키 (예 : 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(…..) 

를 기본적으로 어떻게 추가 영역을 추가 할 수 있습니다 이전에 존재했던 다른 영역 마스터 키를 사용하여 이전에 생성 및 암호화 된 동일한 데이터 암호화 키에 대해 마스터 키를 활용할 수 있습니까?

답변

0

AWS 암호 문서를 둘러 보면서 다음 사례가 도움이 될만한 사례를 찾았습니다. (KMS 키 공급자 구현에 데이터 키용 영역 확장 기능이 있다면 이상적이었을 것입니다. :) 다음에서는 plain_dek에 위의 질문에서 DEK_Plain이 할당되어 있다고 가정합니다.

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) 

하여 새로운 마스터 키 말하자면, 최근에 추가했다 넓은 AWS 영역에서 decrypt'able 될 수있는 기존의 데이터 키를 연장 새로운 떨어진 영역의 수에 대한 루프에서 반복 될 수있다.