AWS CLI를 사용한 봉투 암호화

배경



저는 이미 Envelope Encryption과 그 작동 방식에 대한 기사를 게시했습니다. 그것 을 보십시오 .

이 문서에서는 AWS CLI를 사용하여 Envelope Encryption으로 대용량 데이터를 암호화/복호화하는 방법을 다룹니다.

전제 조건



이 실습에는 AWS 계정과 AWS CLI가 필요합니다. here에서 AWS CLI 설치 및 구성에 대한 자세한 정보를 얻을 수 있습니다.

실습



고객 마스터 키 생성

지금까지 AWS CLI가 설정되어 있으므로 첫 번째 단계는 KMS를 사용하여 AWS CMK(고객 마스터 키)를 생성하는 것입니다. 암호화에 사용할 고객 마스터 키가 있습니다.

aws kms create-key --description "This key is used for envelope encryption"
output:
{
"KeyMetadata": {
    "AWSAccountId": "************",
    "KeyId": "21763c54-353e-4099-8027-************",
    "Arn": "arn:aws:kms:us-east-1:************:key/21763c54-353e-4099-8027-************",
    "CreationDate": "2020-09-10T14:59:44.359000+05:30",
    "Enabled": true,
    "Description": "This key is used for envelope encryption",
    "KeyUsage": "ENCRYPT_DECRYPT",
    "KeyState": "Enabled",
    "Origin": "AWS_KMS",
    "KeyManager": "CUSTOMER",
    "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
    "EncryptionAlgorithms": [
        "SYMMETRIC_DEFAULT"
    ]
}

1. 데이터 키 생성

이전에 생성한 CMK를 사용하여 데이터 키를 생성해 보겠습니다. 데이터 키(일반 텍스트) 및 암호화된 데이터 키(CiphertextBlob)를 반환합니다.

aws kms generate-data-key --key-id 21763c54-353e-4099-8027-************ --key-spec AES_256
Output:
{
"CiphertextBlob": "************IPQE9CgC3MLxxTR8lu/AFcM2axxufFf5mB81aqlukaAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM5FCtUAUdCHJ72PYNAgEQgDs7EwfgzL4g4/E48AJTKVEKJq8EsuEM6hAlcZ6XWw0AlYpfLyXD910NSd/LasDtI2YkIp7wSitlpdkVuw==",
    "Plaintext": "XIJVOItN8cc40n/H8/Wzbs/u+57/H5ERL/gi/hArqZI=",
    "KeyId": "arn:aws:kms:us-east-1:************:key/21763c54-353e-4099-8027-************"
}

2. Base64로 인코딩된 데이터 키 디코딩

이전 단계에서 생성된 데이터 키와 암호화된 데이터 키는 Base64로 인코딩되어 있으므로 먼저 디코딩해야 합니다.

echo 'XIJVOItN8cc40n/H8/Wzbs/u+57/H5ERL/gi/hArqZI=' | base64 --decode > ~/plaintext_data_key.txt

3. 일반 텍스트 데이터 키를 사용하여 데이터 암호화

AES256 암호화를 사용하여 디코딩된 평문 데이터 키를 사용하여 실제 데이터를 암호화하고 있습니다.

echo "This is data I want to encrypt using plain data key"  | openssl enc -e -aes256 -k fileb:///Users/chirag/plaintext_data_key.txt > ~/encrypted_data.txt

4. 암호화된 데이터 및 데이터 키 패키지

이제 데이터 저장소에 함께 또는 별도로 저장할 수 있는 암호화된 데이터 및 암호화된 데이터 키가 있습니다. 복호화 시 필요한 암호화 데이터 키를 반드시 저장해 두십시오.

5. 일반 텍스트 데이터 키 제거

데이터 암호화 후 시스템에서 데이터 키는 민감한 정보이므로 제거할 수 있으며 암호화된 데이터 키를 저장했기 때문에 필요하지 않으므로 향후 필요할 때마다 일반 텍스트 데이터 키를 다시 얻을 수 있습니다.

rm ~/plaintext_data_key.txt

6. 복호화를 위한 데이터 추출

인코딩된 데이터를 다시 원하므로 먼저 이전에 저장한 암호화된 데이터 키를 추출한 다음 Base64로 인코딩된 그대로 디코딩해야 합니다.

echo '************IPQE9CgC3MLxxTR8lu/AFcM2axxufFf5mB81aqlukaAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM5FCtUAUdCHJ72PYNAgEQgDs7EwfgzL4g4/E48AJTKVEKJq8EsuEM6hAlcZ6XWw0AlYpfLyXD910NSd/LasDtI2YkIp7wSitlpdkVuw==' | base64 --decode > ~/encrypted_data_key.txt

7. 암호화된 일반 텍스트 데이터 키 해독

암호화된 데이터 키를 다시 얻으면 Decrypt API를 호출하여 일반 텍스트 데이터 키를 가져와야 합니다.

aws kms decrypt --ciphertext-blob fileb:///Users/chirag/encrypted_data_key.txt
Output:
{
"KeyId": "arn:aws:kms:us-east-1:************:key/21763c54-353e-4099-8027-************",
"Plaintext": "XIJVOItN8cc40n/H8/Wzbs/u+57/H5ERL/gi/hArqZI=",
"EncryptionAlgorithm": "SYMMETRIC_DEFAULT"
}

8. Base64로 인코딩된 일반 텍스트 데이터 키 디코딩

다시 Decrypted Data Key는 Base64로 인코딩되어 있으므로 먼저 디코딩해야 합니다.

echo 'XIJVOItN8cc40n/H8/Wzbs/u+57/H5ERL/gi/hArqZI=' | base64 --decode > ~/decrypted_plaintext_data_key.txt

9. 일반 텍스트 데이터 키를 사용하여 실제 데이터 복호화

실제 암호화된 데이터를 가져오고 동일한 AES256 알고리즘을 사용하여 암호를 해독하면 실제 데이터가 다시 나타납니다.

cat ~/encrypted_data.txt  | openssl enc -d -aes256 -k fileb:///Users/chirag/decrypted_plaintext_data_key.txt
Output:
This is data I want to encrypt using plain data key

10. 일반 텍스트 데이터 키 제거

일반 텍스트 데이터 키 정리.

rm ~/decrypted_plaintext_data_key.txt

참고: 여기에서 모든 민감한 정보를 "*"로 마스킹했습니다.

결론



그래서 우리는 AWS KMS를 사용하여 Envelope Encryption을 사용하여 암호화(1-5단계) 및 암호 해독(6-10단계)의 전체 주기를 거쳤습니다.

데이터 암호화가 활성화된 경우 AWS가 S3, EBS, RDS 등의 대규모 데이터 세트에 대해 내부적으로 데이터 암호화를 수행하는 방법입니다.

함께해주셔서 감사합니다.

좋은 웹페이지 즐겨찾기