S3 object encryption
- 2023년 1월 5일 이후 업로드 되는 모든 오브젝트는 자동으로 암호화된다(SSE-S3) 관련정보
- S3 암호화 방식은 총 4가지가 존재한다
- SSE-S3 (Server-Side Encryption with Amazon S3): AWS에서 키를 관리한다. 암호화 키 소유권은 AWS S3에 있다.
- SSE-C (Server-Side Encryption with Customer-Provided Keys): 고객이 제공하는 암호화 키를 사용해 데이터를 암호화 한다. 암호화키는 암호화 및 복호와에 모두 사용된다(대칭키)
- SSE-KMS (Server-Side Encryption with AWS Key Management Service): KMS 마스터키는 AWS KMS 서비스에서 관리된다. 암호화 키의 소유권이 고객에게 있다.
- DSSE-KMS (Dual-layer Server-Side Encryption with AWS KMS): AWS KMS 키를 사용해 두 겹의 AES-256 암호화를 적용한다. 규제 준수 요건이 높은 환경에서 사용된다.
- 암호화 방식에 따라 오브젝트 업로드 명령 옵션이 상이하다
- SSE-S3 (default)
- SSE-C
- SSE-KMS
- SSE-S3 (default)
-
SSE-KMS를 이용해 오브젝트 up/download 하는 python code 예시
-
Upload
upload_s3_with_kms.pyimport boto3 # KMS KEY ID kms_key_id = "kms-key-id" # 암호화할 파일의 경로 file_name = "./file.txt" # S3 버킷 정보 bucket_name = "bucket-name" object_key = "file.txt" # Boto3 S3 클라이언트 생성 s3_client = boto3.client('s3') # 암호화 헤더 생성 encryption_header = { 'ServerSideEncryption': 'aws:kms', 'SSEKMSKeyId': kms_key_id } # 파일 업로드 with open(file_name, 'rb') as file: s3_client.upload_fileobj(file, bucket_name, object_key, ExtraArgs=encryption_header) -
Download
download_s3_with_kms.pyimport boto3 # KMS KEY ID kms_key_id = "kms-key-id" # 복호화할 S3 객체 정보 bucket_name = "your-bucket-name" object_key = "file.txt" # 로컬에 저장할 파일 경로 output_file_path = "./file.txt" # Boto3 S3 클라이언트 생성 s3_client = boto3.client('s3') # S3 객체 다운로드 (SSE-KMS 객체는 KMS 복호화 권한이 있으면 get_object 시 자동 복호화됨) response = s3_client.get_object(Bucket=bucket_name, Key=object_key) with open(output_file_path, 'wb') as file: file.write(response['Body'].read())
-