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 등의 대규모 데이터 세트에 대해 내부적으로 데이터 암호화를 수행하는 방법입니다.
함께해주셔서 감사합니다.
Reference
이 문제에 관하여(AWS CLI를 사용한 봉투 암호화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chiragdm/envelope-encryption-using-aws-cli-3ejd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)