해당 작업을 진행하려면 사용할 EC2 권한에 다음을 추가해야 한다.
1) IAM -> Policy -> KMS -> 다음
2) Write(Decrypt, Encrypt, GenerateDataKey, GenerateDataKeyWithoutPlaintxt)
3) Tagging (All tagging actions)
4) Resources All 선택 -> 이름 생성 후 Create policy
1) IAM -> Roles -> EC2에 부착되어 있는 Roles 선택
2) 위에서 만든 정책을 넣어준다.
1) 암호화할 대상 만들기
sudo echo "암호화할 대상 데이터" > samplesecret.txt
2) DataKey 생성하기
AWS KMS에 CMK를 참조하는 데이터 키를 생성하도록 요청 (CMK는 데이터 키를 암호화하기 위해 참조)
aws kms generate-data-key --key-id alias/ImportedCMK --key-spec AES_256 --encryption-context project=workshop
#암호화-컨텍스트 (Encryption Context) 매개변수 사용
#데이터에 대한 추가 컨텍스트를 제공하는 선택적 키 쌍으로 복호화할 때 함께 제공해야 함
#암호화 컨텍스트는 암호화된 데이터의 무결성을 지원한다
ImportedCMK라고 만들어 졌다.
3) Data Key를 사용하여 암호화 진행
256비트 길이의 데이터 키를 사용하여 데이터를 암호화한다.
echo '위에서 만든 키의 Plaintext 값' | base64 --decode > datakeyPlainText.txt
#위에서 얻은 base64로 인코딩된 평문 데이터 키(Plaintext)를 디코딩하여 파일에 저장
echo '위에서 만든 키의 CiphertextBlob 값' | base64 --decode > datakeyEncrypted.txt
#암호화된 평문(CiphertextBlob)도 같은 방식으로 처리
아까 비밀로 하려고 했던 파일 암호화 진행
openssl enc -aes-256-cbc -pbkdf2 -salt -in samplesecret.txt -out encryptedSecret.txt -pass file:datakeyPlainText.txt
#OpenSSL 라이브러리를 사용하여 AES256으로 암호화
more encryptedSecret.txt #암호화 확인
encryptedSecret.txt파일에 암호화된 텍스트가 저장되었다.
평문의 데이터 키를 삭제하여 중요 키의 유출을 방지
rm datakeyPlainText.txt
4) 암호화된 비밀 텍스트 복호화
3) 과정을 통해 만든 EncryptedSecret.txt 비밀 텍스틀르 복호화 해보자
aws kms decrypt --ciphertext-blob fileb://datakeyEncrypted.txt #실패
#CMK로 암호화할 때 암호화 컨텍스트를 사용했기에 실패
aws kms decrypt --encryption-context project=workshop --ciphertext-blob fileb://datakeyEncrypted.txt
#복호화를 위해서는 암호화에 사용된 암호화 컨텍스트를 제공해야 한다.
base64에서 이를 디코딩하고 이를 사용하여 암호화된 비밀 파일을 복호화하자
echo '맨 처음 만들었던 PlainText의 ID 값' | base64 --decode > datakeyPlainText.txt
-> 데이터 키가 평문으로 되어 있고 base64에서 디코딩 완료
openssl enc -d -aes-256-cbc -pbkdf2 -in encryptedSecret.txt -out decryptedSecret.txt -pass file:datakeyPlainText.txt
디코딩된 암호문을 복호화 완료
'Cloud Infra Architecture (AWS) > AWS Build' 카테고리의 다른 글
[AWS KMS] AWS EBS 볼륨 서버 측 암호화(SSE) 하기 [T] (1) | 2024.10.30 |
---|---|
[AWS KMS] Encyption SDK 사용하여 봉투 암호화하기 [T] (0) | 2024.10.30 |
[AWS KMS] AWS CLI로 외부 키를 AWS KMS로 생성하기 [T] (0) | 2024.10.30 |
[AWS KMS] AWS CLI로 AWS 고객 관리형 키(CMK) 생성하기 [T] (1) | 2024.10.30 |
[Trouble Shooting] AWS EKS Pod로 생성된 Rabbitmq가 무한 Pending 일 때 (Rabbitmq pod가 Status pending) (0) | 2024.10.20 |