Search
moon
sun

S3 (Simple Storage Service)

S3

소개

•
객체 스토리지 서비스
•
RESTFul API를 사용하여 객체에 엑세스
•
HTTP / HTTPS 프로토콜을 사용
•
저장 가능한 파일 개수의 제한 없음
•
단일 파일 5TB 크기까지 저장
•
데이터를 여러 데이터센터에 중복저장
•
99.999999%의 내구성
•
데이터 암호화 기능 제공
•
버전 관리기능 / 정적 웹사이트 호스팅

버전 관리 (Versioning)

•
객체(파일)이 여러 버전을 가질 수 있음
•
동일한 파일이름을 업로드하면 여러 버전으로 저장됨(ex: 버전1, 버전2)
•
실수로 객체를 덮어쓰거나 삭제한 경우 이전 버전으로 복구 가능
•
실수로 객체를 삭제하는 것을 방지하기 위해 MFA Delete 옵션을 추가할 수 있음
•
객체를 하나의 파일이 아닌 여러 버전으로 보존할 수 있음
•
버전관리 기능을 사용하려면 해당 기능을 활성화 해야함
비용 증가 방지를 위해 Lifecycle Policy를 함께 설정하는 방법이 존재

객체 암호화

•
데이터를 전송 중에 그리고 스토리지에 저장된 동안 보호하기 위해 암호화 사용
•
서버 측 암호화 (SSE / Server Side Encryption)
◦
S3에 저장된 데이터를 보호하기 위한 암호화
◦
데이터가 서버에 저장되기 전에 객체를 암호화
▪
SSE-S3 : S3에서 관리하는 암호화
▪
SSE-KMS : KMS에서 관리하는 암호화, KMS를 이용하므로 키를 자동으로 교체하거나 감사기능을 지원
▪
SSE-C : 사용자가 관리하는 암호화, 데이터 전송시 반드시 HTTPS를 사용해야 함
◦
동작방식
1.
데이터가 S3에 저장될 때 암호화하고, 가져올 때 자동으로 복호화
2.
AWS KMS 또는 S3 관리 키를 사용하여 암호화 가능
•
클라이언트 측 암호화 (CSE / Client Side Encryption)
◦
데이터를 전송하기 전에 클라이언트에서 암호화
•
전송 중 암호화
◦
S3와 클라이언트 간의 데이터 전송을 보호하기 위한 암호화 방식이다.
◦
동작방식
1.
HTTPS 프로토콜을 사용하여 데이터를 암호화
2.
클라이언트와 S3간 데이터가 네트워크를 통해 전송될 때 암호화
◦
전송 보안 프로토콜 SSL/TLS를 이용해 데이터를 암호화, HTTPS 보안 프로토콜을 사용하여 전송
◦
설정하기 위해선 아래의 S3 Bucket Policy에 aws:SecureTransport라는 조건을 추가해주면 된다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::example-bucket/*", "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }
JSON
복사

암호화 설정 시 성능 영향

S3 오브젝트 암호화는 보안성을 높여주지만, 암호화 및 복호화 과정에서 성능에 영향을 줄 수 있다.
전송 중 암호화 성능 영향
1.
작은 파일을 자주 전송할 때 CPU 부하 증가
2.
TLS 핸드셰이크 오버헤드 발생
3.
데이터 전송 속도 감소
암호화 방식
암호화/복호화 속도
성능 영향
특징
SSE-S3 (S3 관리 키)
가장 빠름
낮음
AWS가 키를 자동 관리하여 성능 최적화
SSE-KMS (KMS 키)
느림
중간
추가적인 KMS API 호출이 필요
SSE-C (사용자 제공 키)
가장 느림
높음
매 요청마다 키 제공 필요

버킷 정책

•
S3 버킷 엑세스 제어 정책
•
JSON 형식
•
조건에 따라 버킷에 엑세스를 부여학 제한하는 기능으로 사용
•
Ex
◦
특정 AWS 리소스에서만 S3 버킷에 엑세스 허용
◦
다른 AWS 계정에 버킷 엑세스 권한을 부여 가능
{ "Id": "Policy1609562393728", "Version" : "2012-10-17", "Statement" : [ { "Sid" : "Stmt16095623653131", "Effect" : "Deny", "Action" : [ "s3:GetObject", "s3:PutObject" ], "Resource" : "arn:aws:s3:::test1234", "Principal" : "*" } ] }
JSON
복사

퍼블릭 액세스 차단

•
버킷과 객체에 대한 퍼블릭 엑세스를 차단하거나 허용
•
데이터 보호를 위해 기본적으로 퍼블릭 엑세스를 차단

ACL(액세스 제어 목록)

•
AWS 계정에 버킷이나 객체에 읽기 / 쓰기 권한을 부여하는 기능
•
버킷 레벨에서 ACL을 적용하거나 객체 레벨에서 ACL을 적용 가능

정적 웹사이트 호스팅

•
S3에서 정적 웹사이트 호스팅 가능
•
정적 웹사이트
◦
언제 접속해도 항상 같은 내용을 보여주는 변하지 않는 사이트
•
웹 사이트 호스팅을 하면 EC2등의 별도의 웹서버 운영을 하지 않아도 됨
•
웹사이트 주소는 버킷이름.s3-website-리전.amazonaws.com 형식
•
사이트 접속시 403 http 상태 코드가 나오면 버킷의 퍼블릭 엑세스 허용이 안되어 있다는 것

CORS (Cross-Origin Resource Sharing)

•
Origin
◦
S3 버킷 주소 (버킷이름.s3-website-리전.amazonaws.com)
•
다른 오리진에 버킷에 대한 엑세스를 공유하는 것

액세스 로깅

•
S3 버킷의 모든 활동을 파일로 만들어 S3 버킷이 저장하는 기능
•
감사 목적으로 활용 가능
•
로그 분석을 위해 Amazon Athena같은 분석 도구를 사용 가능
•
로그 파일 저장소를 같은 버킷에 저장하면 무한 루프로 인해 로그파일이 지속적으로 증가

Replication (복제 규칙)

•
S3 버킷간에 객체를 자동으로 복제하는 기능
•
교차 리전 복제 (CRR, Cross Region Replication)
◦
서로 다른 AWS 리전의 S3 버킷으로 객체를 복사
•
동일 리전 복제 (SRR, Same Region Replicaiton)
◦
같은 AWS 리전의 S3 버킷으로 객체를 복사
•
버킷 복제를 위해서는 원본과 대상 버킷 모두 버전관리가 활성화 되어 있어야 함
•
다른 AWS 계정으로 복제 가능

스토리지 클래스

•
접근 빈도로 클래스를 나눔
Standard (범용)
•
높은 내구성, 가용성
•
객체 스토리지
•
정적 웹사이트, 콘텐츠 배포, 모바일 게임 어플리케이션에 사용
Intelligent-Tiering (엑세스 패턴을 알 수 없거나 예측할 수 없는 데이터용)
•
비용절감 효과
•
객체의 접근 빈도의 패턴을 판단하여 자동으로 클래스를 이동함
◦
해당 스토리지에 업로드되거나 이전된 객체는 Frequent Access 계층에 저장
◦
엑세스 패턴을 모니터링한 후 30일 연속 엑세스되지 않은 객체를 Infrequent Access 계층으로 이동
◦
90일 연속으로 엑세스되지 않으면 객체를 Archive Access 계층으로 이동
◦
180일 연속으로 엑세스되지 않으면 Deep Archive Access 계층으로 이동
Standard IA (빈번하지 않은 엑세스용)
•
Standard Infrequent Access의 줄임말
•
데이터 접근을 자주 하지 않고 필요할 때 빠르게 접근해야 할 때 적합한 서비스
•
최소 과금 기간 30일 (30일이 끝나기전에 객체를 삭제하면 30일 요금이 부과)
One Zone IA (빈번하지 않은 엑세스용)
•
데이터 접근을 자주 하지 않고 필요할 때 빠르게 접근해야 할 때 적합한 서비스
•
다른 S3와는 다르게 단일 가용영역에 저장
•
가격이 20% 정도 저렴
Glacier (아카이브용)
•
자주 접속하지 않는 장기 데이터를 위한 서비스
•
분기에 한 번 엑세스하는 오래된 아카이브 데이터 용도
•
밀리초 내에 즉시 검색
Deep Archive (아카이브용)
•
가장 저렴
•
1년의 1~2번 정도 접근하는 데이터를 장기 보관용도로 저장하는 서비스

객체 수명주기 관리 (Life Cycle Rule)

•
객체가 저장되어 삭제될 때까지의 수명주기를 비용 효율적으로 저장 되도록 관리하는 기능
•
S3 Object Lifecycle은 비용 절감 및 객체 관리를 자동화하는 기능이다. 정의한 규칙에 따라서 객체를 관리할 수 있다.
•
Lifecycle Rule을 설정하면, 주어진 조건을 만족하는 객체가 자동으로 관리된다.
•
버전 관리가 활성화 되어 있을 경우 객체의 버전 별로 수명 주기 정책을 적용할 수 있음
•
Amazon S3 Analytics
◦
스토리지 클래스 분석
◦
데이터 엑세스 패턴을 관찰해 자주 엑세스하지 않는 STANDARD 스토리지를 STANDARD IA 스토리지 클래스로 옮길 시점을 알려줌
•
S3 Object Lifecycle로 가능한 동작
◦
객체를 특정 스토리지 클래스로 전환
◦
객체를 자동으로 삭제
◦
Expire(만료)된 객체의 이전 버전 정리

S3 Object Lock (S3 객체 잠금)

•
일정시간 또는 무기한으로 객체가 삭제되거나 덮어쓰이지 않도록 하는 기능으로 읽기만 가능
•
보관 기간을 설정하여 정해진 시간 동안 객체를 보호하도록 설정 가능
•
Write Once Read Many(WORM) 모델을 적용
WORM
•
객체를 잠금을 사용하기 위해선 버전관리가 활성화 되어있어야 함
•
거버넌스 모드(Governance Mode)
◦
필요에 따라 일부 사용자에게 보관 설정을 변경하거나 객체를 삭제할 수 있는 권한을 부여할 수 있음
•
규정준수 모드(Compliance Mode)
◦
AWS 계정의 루트 사용자를 포함한 어떤 사용자도 덮어쓰거나 삭제할 수 없음
•
Legal Hold(법적 보존)
◦
객체를 덮어쓰거나 삭제할 수 없도록 하는 기능
◦
객체를 수정해야하는 사용자의 IAM 정책에 s3 PubOjbectLegalHold 권한을 추가하면 해당 사용자는 객체를 수정, 삭제 가능
versioning 활성화
Object Lock 활성화

이벤트 알림(Event Notification)

•
S3의 이벤트가 발생할 때마다 알리는 기능
•
이벤트는 객체의 생성, 복제, 복원 등이 있음
•
생성된 이벤트 알림을 Amazon SNS, Amazon SQS, AWS Lambda로 보낼 수 있음
◦
객체가 생성될 때마다 Lambda를 이용하여 파일을 처리하는 함수 구성
•
이벤트 알림을 Amazon EventBridge와 통합하여 이벤트 애플리케이션 구축 가능

S3 Select & S3 Glacier Select

•
SQL 구문을 사용해 S3 객체의 콘텐츠를 필터링하여 원하는 데이터만 가져오는 기능
•
데이터를 검색하는데 필요한 비용을 절감하고 지연시간을 감소 (성능 향상)

PreSignedURL

•
PreSignedURL을 사용하여 제한된 시간동안 객체를 공유 또는 없로드하는 만료 시간을 설정

전송 가속화 (Amazon S3 Transfer Acceleration)

•
S3 Transfer Acceleration는 인터넷을 통해 S3 버킷으로 데이터를 더 빠르게 업로드할 수 있도록 지원하는 기능이다.
•
AWS의 엣지로케이션을 활용해서 S3데이터를 사용자와 가까운 곳에 캐싱하여 전송
•
전 세계 각지에서 중앙의 버킷으로 업로드하는 고객이 있는 경우에 사용
•
Transfer Acceleration 엔드포인트: https://BUCKET-NAME.s3-accelerate.amazonaws.com
•
동작원리
◦
S3 Transfer Acceleration을 사용하면 가까운 가까운 AWS 엣지 로케이션을 통해 데이터를 업로드
◦
엣지 로케이션에서 AWS 내부 네트워크를 사용해 S3로 빠르게 전달
◦
인터넷 속도보다 더 빠르게 전송 가능
•
AWS S3 → Bucket → Properties → Transfer Acceleration → Enable

AWS Transfer for SFTP

•
S3 버킷을 저장소로 하는 서비스
•
SFTP(Secure File Transfer Protocol)는 보안 파일 전송 프로토콜
•
온프레미스나 외부의 다른 시스템에서 SFTP를 이용하여 S3 버킷으로 파일을 전송하고 관리 가능

S3 Object Lambda

•
S3에서 데이터를 검색할 때 실시간으로 데이터 변환(필터링, 마스킹, 포맷 변경 등)을 적용할 수 있도록 도와주는 기능이다.
•
AWS Lambda를 사용해 S3 객체의 데이터를 수정 및 처리하는 기능
◦
데이터 추가, 파일 압축 / 해제, 이미지 크기 조정 및 워터 마킹
•
동작 방식
◦
사용자가 Object Lambda Access Point를 통해 S3에 데이터 요청
◦
Lambda 함수가 요청을 가로채서 데이터를 변환
◦
변환된 데이터를 사용자에게 반환
•
장단점
◦
장점
▪
데이터를 원본 그대로 유지하면서 변환 가능 (저장 비용 절감)
▪
Lambda를 활용하여 다양한 변환 작업을 쉽게 추가 가능
▪
어플리케이션에서 추가적인 데이터 처리 로직이 필요 없음
◦
단점
▪
실시간 변환이기 때문에 처리 속도가 느릴 수 있음
▪
Lambda 실행 비용이 추가됨
▪
기존 S3 URL이 아닌 Access Point 기반의 URL을 사용해야 함

S3 Data Integrity 검증 과정(데이터 무결화)

•
AWS S3는 저장된 데이터가 손상되거나 변조되지 않았는지 확인하기 위해 자동으로 무결성 검사를 수행한다. 주로 해시값(Checksum) 기반으로 검증하며, 다음과 같은 과정으로 동작한다.

S3 Data Integrity 검증 순서

(1) 객체 업로드 시

•
S3는 MD5 해시값(ETag) 또는 Checksum(SHA-1, SHA-256 등)을 계산
•
업로드 요청에 해시값이 포함되면, 업로드 후 S3에서 해시값을 비교해 손상 여부 확인
•
일치하지 않으면 업로드 실패 처리

(2) 저장 후 내부 검증

•
S3는 주기적으로 백엔드에서 데이터 무결성 검사를 수행
•
데이터가 손상되었거나 복제본에 문제가 발생하면, 정상 데이터로 복구

(3) 객체 다운로드 시

•
사용자는 객체 다운로드 후 로컬에서 S3의 ETag 또는 Checksum과 비교 가능
•
서버에서 제공한 Checksum을 통해 데이터 손상 여부 확인

요청자 지불 버킷 (Requested Pays)

•
일반적으로 버킷에 데이터를 다운로드 하거나 업로드 할 때 비용은 버킷 소유자가 지불
•
데이터 전송비용을 버킷 소유자가 아닌 요청자(데이터를 다운로드,업로드 하는 사람)이 지불하는 기능

S3 Access Point

•
특정한 그룹, 사용자, 애플리케이션이 허용된 S3 데이터만 엑세스 할 수 있게 하는 기능
•
Amazon S3 Access Point는 여러 애플리케이션이나 팀이 S3 버킷에 액세스하는 방식을 단순화하고 보안을 강화하기 위해 제공되는 기능이다.
•
기존에는 S3 버킷 정책(Bucket Policy) 또는 IAM 정책을 통해 액세스를 관리했지만, Access Point를 사용하면 각 애플리케이션 또는 팀별로 개별적인 엔드포인트를 생성하고 정책을 적용할 수 있다.
•
S3 Access Point 사용사례
◦
여러 개의 애플리케이션 또는 팀이 하나의 S3 버킷을 공유할 때
▪
기존에는 버킷 정책이 커지고 복잡해지는 문제가 있었음.
▪
Access Point를 사용하면 각 팀별로 별도의 엔드포인트와 정책을 적용 가능
◦
VPC 내에서 S3 접근을 쉽게 관리할 때 (VPC 엔드포인트 사용 가능)
▪
특정 VPC 내에서만 접근 가능하도록 설정 가능.
▪
VPC에서 인터넷 없이 AWS 내부 네트워크를 통해 S3에 연결 가능 (PrivateLink 활용)
◦
AWS Organizations, AWS IAM을 활용한 세밀한 권한 관리
▪
각 Access Point마다 IAM 역할 및 정책을 별도로 지정 가능.
•
S3 Access Point의 주요 기능
◦
개별 엔드포인트 제공
▪
Access Point는 각기 다른 고유한 엔드포인트(URL) 를 제공.
◦
개별 정책 적용 가능
▪
기존에는 S3 버킷 정책(Bucket Policy)만 사용할 수 있었지만, Access Point 정책을 통해 개별 앤드포인트마다 접근 제어 가능
◦
VPC 내 전용 Access Point 가능
▪
인터넷을 거치지 않고 VPC 내에서만 접근 가능한 Private Access Point 설정 가능.
◦
AWS Organizations과 연동 가능
▪
AWS Organizations을 사용하면 계정 단위로 S3 Access Point 정책을 적용 가능.

멀티 파트 업로드

•
대용량의 파일을 분할하여 병렬로 S3에 업로드 하는 방식
•
파트를 병령로 업로드 하기에 빠른 처리 속도로 업로드 가능
•
업로드가 실패하면 재전송 또는 수명 주기 정책을 통해 완료되지 않은 업로드 삭제 가능
•
이 방식을 사용하면 업로드 속도를 최적화하고, 네트워크 장애 발생 시 복구가 용이해진다.
•
필요한 이유
◦
1. 대용량 파일 업로드 최적화
▪
100MB 이상의 파일을 업로드할 때는 단일 요청보다 Multi-Part Upload가 성능이 뛰어남.
◦
네트워크 장애 복구
▪
Multi-Part Upload는 실패한 부분만 다시 업로드하면 되므로 시간과 비용 절감 가능.
◦
대규모 업로드 안정성 개선
▪
파일을 작은 단위로 나눠서 관리하므로, 대용량 업로드 시 안정성이 높아짐.
•
동작 방식

1. 업로드 초기화

◦
먼저 업로드할 파일에 대해 Multi-Part Upload를 시작해야 함.

2. 파트별 업로드

◦
파일을 여러 개의 작은 파트(최소 5MB 이상)로 나눠서 개별적으로 업로드.
◦
이 단계에서 각 파트는 병렬로 업로드될 수 있음, 따라서 속도가 향상됨.

3. 업로드 완료 요청

◦
모든 파트가 업로드되면 각 파트의 ETag(해시값)를 사용해 최종 파일을 결합.
◦
S3가 모든 파트를 하나의 파일로 조립하여 최종적으로 저장.

S3 데이터 검색

•
Athena, S3 Select, Redshift 등의 서비스를 사용하여 S3의 데이터를 다른 플랫폼으로 이동하지 않고 바로 검색 가능
•
SQL 쿼리문을 사용하여 검색할 수 있음

S3 Batch Operation

•
단일 요청으로 많은 수의 S3 객체를 간편하게 처리하는 기능
◦
다른 버킷에 객체 복사, 태그 또는 ACL을 설정, Glacier에서 복원을 시작

S3 Partitioning

•
파티셔닝이란 데이터를 특정 키 또는 기준에 따라 논리적으로 분할하는 방식
•
S3에서 파티셔닝을 사용하는 이유
1.
필터링된 데이터만 검색이 가능하여 쿼리 속도 향상
2.
특정 프리픽스에 요청이 집중되지 않도록 함
3.
다중 요청이 균등하게 분산

S3 Concurrent Applications

•
S3 Concurrent Applications은 여러 애플리케이션 또는 프로세스가 동시에 S3에 접근하여 읽기(Read), 쓰기(Write), 삭제(Delete) 작업을 수행하는 환경을 의미한다.
•
If-None-Match Header를 어느 상황에서 쓰이는가?
◦
If-None-Match 헤더란 서버가 제공한 최신 데이터와 클라이언트가 가진 데이터가 동일한지 확인하는 용도로 쓰인다.
◦
If-None-Match 가 필요한 상황으로는 클라이언트가 캐싱된 데이터를 사용해도 되는지 확인할 때 사용된다. 예를 들어서 브라우저나 애플리케이션이 이미 저장된 데이터를 다시 요청하는 경우 If-None-Match 헤더를 포함하면 서버에서 최신 데이터를 검사할 수 있다.

S3 Bucket의 Policy와 IAM Policy의 우선 순위

S3 Bucket Policy와 IAM Policy의 우선 순위는 존재하지 않는다. 권한의 동작 방식은 아래와 같이 동작하기에 권한은 우선순위는 없다.
S3 Bucket Policy
IAM Policy
Result
Allow
Allow
✅ Allow
Allow
Deny
❌ Deny
Deny
Allow
❌ Deny
Deny
Deny
❌ Deny
Allow
없음
✅ Allow
없음
Allow
✅ Allow
없음
없음
❌ Deny