S3 보안 및 데이터 보호

은채의 성장통·2025년 2월 10일
0

AWS

목록 보기
54/79

AWS S3 보안 및 데이터 보호 전략

AWS S3를 사용할 때, 보안 및 데이터 보호를 위한 다양한 기능들이 존재한다.

이번 글에서는 S3 접근 제어, 로깅, Pre-Signed URL, 객체 잠금 정책 등 필수 개념을 정리한다.


1. S3 접근 제어 및 로깅

(1) S3 버킷 접근 제어

S3 버킷은 승인(Approval)과 거버넌스(Governance)와 관계없이 접근 설정에 따라 데이터 접근이 가능하다.

기본적으로 S3는 비공개(Private) 설정이지만, 다음과 같은 방식으로 접근을 제어할 수 있다.

S3 접근 제어 방법

1️⃣ S3 퍼블릭 액세스 차단(Public Access Block) 설정

  • 버킷이 퍼블릭으로 노출되는 것을 방지
    2️⃣ IAM 정책 (Identity and Access Management)
  • 특정 사용자 또는 역할(Role)에 대해 S3 접근 권한 부여
    3️⃣ S3 버킷 정책(Bucket Policy)
  • JSON 형식으로 작성하여 특정 IP, 계정, 리전(region) 등에 따라 접근 제한
    4️⃣ ACL (Access Control List, 접근 제어 목록)
  • 버킷 또는 객체 단위로 접근 권한을 세부적으로 설정

🔹 최고의 보안 전략: S3 버킷은 기본적으로 Private 유지 + Pre-Signed URL을 활용한 접근 허용


(2) S3 서버 액세스 로깅 및 모니터링

S3에서 버킷 접근 요청을 로깅(Log)하여 보안 및 감사 용도로 활용할 수 있다.

S3 로깅 설정 방법

1️⃣ S3 서버 액세스 로그(Server Access Logging)

  • 특정 로깅 버킷(Logging Bucket)에 모든 요청 기록 저장
    2️⃣ AWS CloudTrail 로그
  • AWS 계정의 API 호출 이벤트 추적

🚨 주의! 로깅 루프 문제 발생 가능

  • 로깅 버킷을 모니터링 버킷과 동일하게 설정하면 안 된다!
  • 동일한 버킷을 로깅 대상으로 지정하면, 로그 파일이 계속 생성되면서 무한 루프 발생 → 높은 비용 초래

🔹 권장 사항: 로깅 버킷을 별도로 분리하고, CloudTrail과 연계하여 보안 이벤트를 모니터링


2. Pre-Signed URL (미리 서명된 URL) 활용

(1) Pre-Signed URL이란?

Pre-Signed URL은 IAM 권한 없이도 특정 사용자에게 일시적으로 S3 객체 접근을 허용하는 URL이다.

  • CLI, SDK 등을 통해 Pre-Signed URL을 생성할 수 있음
  • 일반적으로 Private 버킷에서 외부 사용자에게 데이터를 공유할 때 사용

Pre-Signed URL 활용 예시

  • 비공개(Private) S3 버킷 데이터를 외부에 제공할 때
  • IAM 정책을 직접 수정하지 않고 임시적으로 접근 권한을 부여할 때
  • 사용자별로 개별 URL을 발급하여 접근을 관리할 때

(2) Pre-Signed URL 동작 방식

1️⃣ AWS SDK 또는 CLI를 사용하여 Pre-Signed URL 생성

2️⃣ 해당 URL을 특정 사용자에게 전달

3️⃣ 사용자는 해당 URL을 통해 S3 객체 다운로드 또는 업로드

Pre-Signed URL 생성 예제 (Python, Boto3 사용)

import boto3
import datetime

s3 = boto3.client('s3')

# 1시간 동안 유효한 Pre-Signed URL 생성
url = s3.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'my-private-bucket', 'Key': 'data/report.pdf'},
    ExpiresIn=3600  # 1시간 (3600초)
)

print("Pre-Signed URL:", url)

🚀 장점

  • 버킷을 퍼블릭으로 변경하지 않아도 데이터 공유 가능
  • 유효기간(Expiration Time)을 설정하여 자동 만료 가능

🔹 권장 사항: 보안 강화를 위해 URL 유효기간을 짧게 설정하고, 필요할 때마다 새 URL을 발급


3. S3 객체 잠금 정책 (Object Lock & Glacier Vault Lock)

S3에서는 데이터를 보호하기 위해 객체 잠금(Object Lock) 및 Glacier Vault Lock 기능을 제공한다.

이 기능을 활용하면 데이터 수정, 삭제를 차단하여 데이터 보존 및 규정 준수를 보장할 수 있다.

(1) S3 Glacier Vault Lock (글레이셔 볼트 잠금)

Glacier Vault Lock 특징

  • S3 Glacier에 저장된 객체를 잠금(Lock)하여 영구적인 보존 정책 적용
  • 한 번 설정하면 변경 불가능 → 데이터 삭제 및 수정 불가
  • 법적 증거 자료 보관, 금융 데이터 보관 등에 활용

🔹 사용 예시: 금융거래 기록, 의료 데이터, 법적 증거 데이터 장기 보관


(2) S3 Object Lock (S3 객체 잠금)

S3 Object Lock을 사용하면 각각의 객체 단위로 WORM(Write Once Read Many) 모델을 적용할 수 있다.

Object Lock 활성화 조건

  • S3 버저닝(Versioning)을 활성화해야 사용 가능
  • 객체 단위로 잠금을 설정할 수 있음 (버킷 전체 적용 X)

(3) Object Lock 모드

모드설명
규정 준수 모드 (Compliance Mode)- 모든 사용자 포함 → 누구도 수정/삭제 불가- 보존 기간 동안 절대 변경 불가능
거버넌스 모드 (Governance Mode)- 일반 사용자는 수정/삭제 불가- IAM 권한이 있는 관리자만 보존 기간 변경 가능

🚀 거버넌스 모드는 좀 더 유연한 방식으로 관리자 권한을 허용할 수 있음

(4) 법적 보존(Legal Hold) 모드

법적 보존(Legal Hold) 특징

  • 보존 기간 없이 무기한 객체 보호 가능
  • 재판, 소송과 관련된 중요 데이터를 보호하는 데 사용
  • IAM 권한이 있는 사용자는 해제 가능

🔹 권장 사항: 중요 데이터 보호 시 규정 준수 모드를 설정하고, 관리자가 유연성을 원한다면 거버넌스 모드를 선택


4. 정리 및 결론

개념설명
S3 접근 제어IAM 정책, 버킷 정책, ACL, 퍼블릭 액세스 차단을 활용하여 보안 강화
S3 로깅로깅 버킷을 별도로 설정하여 무한 루프 방지
Pre-Signed URLIAM 권한 없이 일시적으로 S3 객체 접근을 허용하는 URL
Glacier Vault LockS3 Glacier에 저장된 데이터를 영구적으로 보호 (삭제 불가)
S3 Object Lock객체 단위의 잠금 정책 (규정 준수 모드, 거버넌스 모드)
법적 보존 상태특정 객체를 무기한 보호하여 재판 등 중요한 데이터 보관 가능

AWS S3는 강력한 보안 기능을 제공하며, 적절한 설정을 통해 데이터를 보호할 수 있다.

Pre-Signed URL을 활용하면 비공개 버킷을 유지하면서도 안전하게 데이터를 공유할 수 있으며,

Object Lock을 사용하면 중요 데이터를 보존하고 규정 준수 요구사항을 충족할 수 있다.

🚀 권장 사항: 보안이 중요한 데이터는 Pre-Signed URL을 활용하고, 규정 준수를 위해 Object Lock을 적절히 설정하자!

profile
인생 별거 없어

0개의 댓글