참고
KMS란? 쉽게 정리: https://jibinary.tistory.com/248
KMS GenerateDataKey API
GenerateDataKey API
는 데이터를 암호화위해 사용하는 데이터 키(Data Key)를 생성하는 데 사용된다.
생성한 데이터 키(Data Key)를 사용하여 데이터를 암호화한다.
주요 목적은 데이터 키를 직접 저장하거나 노출시키지 않고 안전하게 데이터를 암호화/복호화할 수 있도록 지원하는 것이다.
(GenerateDataKey API
는 주로 애플리케이션 내부에서 암호화를 위해 사용된다)
GenerateDataKey API
를 사용하면 Ciphertext Key(데이터 키)와 Plaintext Key(평문 데이터 키)를 반환한다.
AWS SDK 예시 (Python 코드)
비슷하게 Lambda 함수에도 사용할 수 있다.
import boto3
# KMS 클라이언트 생성
kms_client = boto3.client('kms')
# GenerateDataKey 호출
response = kms_client.generate_data_key(
KeyId='alias/my-key', # KMS 키 ID 또는 별칭
KeySpec='AES_256' # 생성할 데이터 키 유형 (AES 256비트)
)
plaintext_key = response['Plaintext'] # 평문 데이터 키 (메모리에서만 사용해야 함, 사용 후 폐기한다)
ciphertext_key = response['CiphertextBlob'] # 암호화된 데이터 키 (스토리지에 안정하게 저장)
print("Plaintext Key (사용 후 폐기):", plaintext_key)
print("Ciphertext Key (안전하게 저장):", ciphertext_key)
<AWS 공식 문서>
https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html
KMS Encrypt API
Encrypt API
는 주어진 데이터를 직접 암호화하는 데 사용된다.
주어진 데이터를 KMS에서 관리하는 키로 즉시 암호화하고, 암호화된 데이터를 반환한다. (데이터 암호화에 사용된 키는 KMS(AWS 쪽에서)가 직접 관리한다)
암호화할 데이터가 적고, KMS에서 직접 암호화해도 되는 경우 Encrypt API
를 사용하면 좋다
AWS SDK 예시 (Python 코드)
비슷하게 Lambda 함수에도 사용할 수 있다.
import boto3
# KMS 클라이언트 생성
kms_client = boto3.client('kms')
# 암호화할 데이터
plaintext_data = "This is a secret message"
# KMS Encrypt API 호출
response = kms_client.encrypt(
KeyId='alias/my-key', # 사용하려는 KMS 키 ID 또는 별칭
Plaintext=plaintext_data.encode('utf-8') # 암호화할 원본 데이터
)
# 암호화된 데이터 (CiphertextBlob)
encrypted_data = response['CiphertextBlob']
print("Encrypted Data:", encrypted_data)
🤔 문제
개발 중인 애플리케이션은 수백 개의 동영상 파일을 저장해야 합니다. 데이터는 저장 전에 애플리케이션 내에서 암호화되어야 하며, 각 동영상 파일마다 고유한 키가 필요합니다.
개발자는 애플리케이션을 어떻게 코딩해야 할까요?
- KMS Encrypt API를 사용하여 데이터를 암호화합니다. 암호화된 데이터 키와 데이터를 저장합니다.
- 암호화 라이브러리를 사용하여 애플리케이션의 암호화 키를 생성합니다. 이 암호화 키를 사용하여 데이터를 암호화하고 암호화된 데이터를 저장합니다.
- KMS GenerateDataKey API를 사용하여 데이터 키를 가져옵니다. 데이터 키로 데이터를 암호화합니다. 암호화된 데이터 키와 데이터를 저장합니다.
- AWS KMS 키를 사용한 서버 측 암호화를 이용하여 데이터를 S3 버킷에 업로드합니다.
정답
정답. 3번
'클라우드(AWS) > DVA-C02' 카테고리의 다른 글
[AWS] Lambda와 API Gateway로 새로운 개발 환경에서 테스트하는 법 (Alias와 Stage 기능 활용) (0) | 2024.11.21 |
---|---|
[AWS] X-Forwarded-For (XFF) Headers란?? 진짜 아주 쉽게 정리 (0) | 2024.11.18 |
[AWS] EC2에 있는 애플리케이션에서 EC2의 IPv4 주소를 확인하는 방법 (2) | 2024.11.16 |
[AWS] Code Pipeline 구성 요소 쉽게 정리 (Pipeline, Stages, Actions, Action Provider) (0) | 2024.11.16 |
[AWS] Lambda의 Test Event를 공유하기 (0) | 2024.11.16 |