개요
Amazon Simple Storage Service (S3) 는 AWS에서 제공하는 객체 스토리지 서비스다.
인터넷을 통해 데이터를 저장하고 검색할 수 있으며, 확장성 / 내구성 / 보안성이 높은 구조를 갖고 있어 웹 호스팅, 백업, 로그 저장, 빅데이터 분석 등 다양한 용도로 활용된다.
주요 구성 요소
- Bucket : 데이터를 저장하는 기본 컨테이너. 모든 리전에서 고유한 (Global unique) 이름 요구
- Object : S3에 저장되는 데이터 단위 (파일 + 메타데이터)
- Key : 버킷 내 객체를 식별하는 고유 경로 또는 이름
- Region : 버킷이 위치한 AWS 리전. 지연 시간 및 법적 요구사항 고려
- Versioning : 객체의 버전을 관리하는 기능. 삭제 또는 덮어쓰기 방지
- Storage Class : 데이터 접근 빈도 및 내구성에 따른 저장 클래스 (ex. Standard, IA, Glacier, etc..)
S3 보안 기능
보안 기능 | 설명 | 모범 사례 |
Block Public Access | 계정 / 버킷 수준 설정에서 사용되는 버킷이나 객체가 실수로 public에 노출되는 것을 방지하는 설정 |
- 모든 버킷에 대한 "Block all public access" 활성화 - 가급적 public 정책 사용 회피 |
IAM 정책 | 어떤 사용자, 역할이 어느 S3 리소스에 어떻게 접근 가능한지 명시 | - 최소 권한 원칙 적용 - 리소스 수준의 접근 권한 사용 > `arn:saws:s3:::bucket-name/*` |
버킷 정책 | 버킷 수준에서 계정 간 혹은 public 접근에 대한 JSON 기반 접근 제어 | - Conditions 사용 > aws:SourceIp, aws:SecureTransport - IAM과 조합하여 미세 단위 접근 통제 |
Access Control Lists (ACLs) |
버킷 및 객체에 대한 읽기/쓰기 접근 권한 부여 | - ACLs 는 되도록 사용 권장 안함 (by. AWS) - 세밀한 제어는 버킷 정책/ IAM 사용 권장 |
서버 측 암호화 (SSE) |
SSE-S3, SSE-KMS, 혹은 SSE-C를 사용하여 저장 상태 데이터 암호화 |
- SSE-KMS 사용을 적극 권장 - 안전한 키 보관 및 전송 보장 |
전송 중 암호화 (SSL/TLS) |
HTTPS를 통해 안전하게 데이터를 업로드 / 다운로드 | - non-HTTPS 접근을 거절하여 안전한 전송 보장 |
Object Lock | 객체 삭제 및 덮어쓰기를 방지하는 Wirte Once, Read Many (WORM) 방식 적용 가능 | - Compliance나 audit-critical 데이터에 대해 활성화 |
MFA Delete | 버전 삭제 시 MFA 인증을 요구 (추가 보안 계층) | - Versioning이 활성화된 버킷에 대해서만 활성화 가능 - Root credential 및 MFA로 보호된 역할을 사용한다. |
더보기
※ SSE-KMS is preferred because :
- It offers stronger security controls, including key rotation, detailed audit logging, and fine-grained permissions.
- It supports separation of duties, making it ideal for organizations with compliance or internal policy requirements.
- CloudTrail logs key access, making it easier to detect unauthorized usage.
목적 | 설명 | 관련 서비스 |
Auditing, Monitoring, and Logging |
1. 모든 S3 리소스에 대한 가시성 향상 2. HTTP Request 및 Response를 측정하여 이상 탐지 및 사전 대응 |
- S3 Server Access Logging - Amazon CloudWatch - AWS CloudTrail etc. |
실습. AWS Hands-on with S3 Security: Block Public Access to Encryption
🎯 목표 : S3 버킷을 생성하고, 모범 사례에 따라 보안을 구성한다.
🔧 실습 순서
- S3 버킷 생성
- 퍼블릭 접근 차단 설정 (Block Public Access)
- 서버 측 암호화 (SSE-KMS)
- 접근 로그 활성화 (Access Logging)
- IAM 정책으로 정교한 권한 제어
- 버전 관리 활성화 (Versioning)
- MFA Delete 설정
- CloudTrail 연동
1. S3 버킷 생성
AWS Console
- AWS Management Console > S3 > "Create bucket"
- Bucket name : 전 Region에서 고유한 Globally unique (ex. my-secure-bucket-2025)
- ✅ Block all public access (기본 설정 유지)
- "Create bucket" 클릭
AWS CLI
aws s3api create-bucket --bucket my-secure-bucket-2025 --region ap-northeast-2 --create-bucket-configuration LocationConstraint=ap-northeast-2
2. 퍼블릭 접근 차단 설정 (Block Public Access)
AWS Console
- 생성한 버킷 클릭 > Permissions > Block public access (bucket settings) 에서 확인 가능
AWS CLI
aws s3api put-bucket-public-access-block \
--bucket my-secure-bucket-2025 \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
3. 서버 측 암호화 (SSE-KMS)
AWS Console
- 버킷 > Properties > Default encryption > Enable
- 암호화 유형 : AWS Key Management Service key (SSE-KMS)
- AWS Managed key (aws/s3) 또는 사용자 지정 KMS key 선택
※ KMS 키 사용 시, 비용이 발생하여 직접 생성하진 않음 (아래는 KMS 생성 및 S3 활용 시 발생 비용 예시)
AWS CLI
aws s3api put-bucket-encryption \
--bucket my-secure-bucket-2025 \
--server-side-encryption-configuration '{
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "aws:kms"
}
}
]
}'
4. 접근 로그 활성화 (Access Logging)
사전 준비
- 로그 저장용 별도 버킷 생성 : 'my-log-bucket-2025' (예시)
AWS Console
- 생성한 버킷 > Properties > Server access logging > Enable
- 대상 버킷 : 'my-log-bucket-2025'
AWS CLI
aws s3api put-bucket-logging \
--bucket my-secure-bucket-2025 \
--bucket-logging-status '{
"LoggingEnabled": {
"TargetBucket": "my-log-bucket-2025",
"TargetPrefix": "logs/"
}
}'
5. IAM 정책으로 정교한 권한 제어
- 예: 특정 사용자에게 읽기 전용 권한만 부여
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReadOnlyAccessToBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-secure-bucket-2025",
"arn:aws:s3:::my-secure-bucket-2025/*"
]
}
]
}
> 적용 시, 해당 IAM 사용자에게 위 정책을 연결한다.
6. 버전 관리 활성화 (Versioning)
AWS Console
- 생성한 버킷 > Properties > Bucket versioning > Enable
- 설정한 버킷 > Management > Lifecycle configuration > Create lifecycle rule
- Lifecycle rule actions : 객체 version의 생명주기 만료 시 수행할 동작 지정
- Expire current versions of objects : 객체 version의 만료 주기 설정
AWS CLI
aws s3api put-bucket-versioning \
--bucket my-secure-bucket-2025 \
--versioning-configuration Status=Enabled
7. MFA Delete 설정 (선택 사항)
CLI 또는 Root 사용자만 가능
(* AWS CLI, AWS SDK, Amazon S3 REST API로만 설정 변경 가능)
AWS CLI
aws s3api put-bucket-versioning \
--bucket my-secure-bucket-2025 \
--versioning-configuration Status=Enabled,MFADelete=Enabled \
--mfa "arn-of-your-mfa-device your-mfa-token"
8. CloudTrail 연동
- CloudTrail 은 보안 및 감사 목적의 서비스로 AWS 서비스에 대한 API 활동을 추적하는 데 용이하다.
AWS Console
- 생성한 버킷 > Properties > AWS CloudTrail data events > `Configure in CloudTrail`
- Choose trail attributes
- SNS notification delivery : Log가 S3에 저장될 때마다 SNS Subscription 대상에게 알림.
- CloudWatch Logs : Trail logs를 추적하고, 특정 활동이 있을 때마다 통지.
- Choose log events
- Trail 생성 및 일정 시간 대기 후 버킷 내 결과 확인
참고 자료
- What is Amazon S3? - Amazon Simple Storage Service
-
Powered By. ChatGPT
'Cloud Security 7기' 카테고리의 다른 글
[Cloud Security] 3주차. IAM 기능 및 보안 이해 (1) | 2025.04.24 |
---|---|
[Cloud Security] 3주차. EC2 기능 및 보안 이해 (1) | 2025.04.21 |
[Cloud Security] 2주차. On-premise vs. Cloud network (1) | 2025.04.07 |
[Cloud Security] 1주차. Cloud architecture 이해하기 (1) | 2025.03.24 |