S3 (Simple Storage Service)
객체 스토리지 서비스 (파일 보관만 가능)
확장성, 고가용성, 보안을 제공하는 클라우드 기반의 파일 저장소로 다양한 유형의 데이터를 손쉽게 저장하고 관리
- 무제한 스토리지
- 고가용성
- 글로벌 서비스지만 데이터는 리전 단위로 저장
- 최소 3개의 가용 영역(AZ)에 데이터를 분산하여 저장 > 99.999999999%의 내구성 보장
- 여러 AWS 리전에 걸쳐 자동으로 데이터 복제 > 재해 복구 가능
- 데이터 보안
- 암호화와 IAM을 통해 파일에 대한 접근 제어
- 자동화
- 파일의 수명 주기를
- 정의하여 자동으로 관리 > 데이터의 보관 기간 설정 등
- 버전 관리
- 파일의 변경 내역을 관리 > 이전 버전으로 복구 가능
- 글로벌 액세스
- 인터넷만 있으면 언제 어디서든 데이터에 쉽게 접근 가능
- 사용 사례
- 스토리지 및 백업, 아카이빙 > 파일, 디스크
- 하이브리드 클라우드 스토리지
- 온프레미스 스토리지를 클라우드로 확장하고 할 때
- 애플리케이션 호스팅
- 미디어 호스팅 > 동영상 파일이나 이미지 등
- 정적 웹 사이트 호스팅
- 데이터 레이크 및 빅데이터 분석
S3 구성 요소
- 버킷 (Bucket)
- S3의 최상위 단위로 데이터를 저장하는 컨테이너
- 저장 공간을 구분하는 단위로 디렉토리/폴더와 같은 개념
- S3 버킷의 파일을 객체라고 하며 계정 안에 생성
- 버킷 이름은 전 세계에서 고유해야함 > 데이터 식별에 사용
- 계정에 있는 모든 리전과 AWS에 존재하는 모든 계정에서 고유해야함
- 버킷은 리전 단위로 생성 > 버킷 내 객체에 대한 URI로 접근 가능
- S3의 최상위 단위로 데이터를 저장하는 컨테이너
- 객체 (Object)
- 버킷에 저장되는 데이터의 단위 (파일이나 그 외의 데이터 단위)
- 최대 객체 크기 5TB (= 5000GB)
- 업로드하는 파일의 크기가 5GB보다 클 경우 멀티파트 업로드 사용 > 파일을 여러 부분으로 나눠 업로드
- 객체는 데이터와 메타데이터로 구성
- 데이터: 실제 파일의 내용
- 메타데이터: 파일의 속성 (파일 크기, 수정 일시, 콘텐츠 타입 등)
- 버킷에 저장되는 데이터의 단위 (파일이나 그 외의 데이터 단위)
- 키 (Key)
- 객체를 고유하게 식별하는 문자열 > 버킷 내 객체의 경로
- s3://my-bucket/my_file.txt ← 키
s3://my-bucket/my_folder1/another_folder/my_file.txt ← 키 - 키는 접두사와 객체명으로 구성
- my_folder1/another_folder (접두사) / my_file.txt (객체명)
- 계층 구조의 디렉토리 개념 X
- 객체의 메타데이터
- 각 객체에 대한 추가 정보
- 자동 메타데이터: 소유자, AWS 리전, 크기, 유형, 키, S3 URI 등
- 사용자 정의 메타데이터: 사용자가 설정한 키-값 쌍
- 각 객체에 대한 추가 정보
S3 보안
- 자격 증명 기반 정책
- IAM 정책 - IAM 사용자와 역할에 대해 세부적인 액세스 제어 설정
- 예) 특정 사용자만 특정 버킷에 접근하도록 제한 가능
- 동일 계정의 IAM 엔티티의 S3 권한을 관리하거나, S3 이외에 다른 AWS 서비스와 같이 권한을 관리할 때 사용
- IAM 정책 - IAM 사용자와 역할에 대해 세부적인 액세스 제어 설정
- 리소스 기반 정책
- 버킷 정책 - 버킷과 그 객체에 대한 액세스 권한을 제어하는 정책 설정
- 특정 버킷의 데이터에 '언제 어디서 누가 무엇을 어떻게' 할 수 있는지 정의 가능
- IAM 사용자 및 역할에 따른 권한 설정 가능
- S3 버킷에 액세스할 수 있는 교차 계정 > 다른 계정의 엔티티에 대해 권한 설정 가능
예) 특정 사용자가 접근할 수 있도록 하거나 다른 계정의 사용자를 허용 - 익명 사용자에 대한 권한 설정 가능
- 특정 버킷의 데이터에 '언제 어디서 누가 무엇을 어떻게' 할 수 있는지 정의 가능
- ACL - 객체와 버킷에 대해 세부적인 권한 설정 > 버킷 혹은 객체 단위로 읽기/쓰기 권한 부여
- Object Access Control List
- Bucket Access Control List
- (ACL은 점점 사용하지 않는 추세)
- IAM 원칙이 S3 객체에 액세스할 수 있는 조건
- IAM 권한이 허용하거나 리소스 정책이 허용하는 경우
- IAM 원칙이 특정 API 호출 시
- 버킷 정책 - 버킷과 그 객체에 대한 액세스 권한을 제어하는 정책 설정
- 암호키 사용 > 객체 암호화
- 모든 버킷은 새로 생성 시 기본적으로 Private
- 모든 퍼블릭 엑세스 차단이 기본값으로 설정되어 있음
- MFA를 활용해 객체 삭제 방지
- Versioning을 통해 파일 관리
- 액세스 로그 생성 및 전송
- 별도의 설정을 통해 불특정 다수에게 공개 가능 (웹 호스팅)
S3 버킷 정책
- JSON 기반 - 특정 사용자, 그룹 또는 서비스에 대해 읽기/쓰기/삭제 등의 권한 부여
{ "Version": "2025-03-31", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", // 작업 허용 여부 Allow OR Deny "Principal": "*", // 정책을 적용한 AWS 사용자 또는 서비스 (ex. 특정 IAM 사용자, 역할, 계정 등) "Action": ["s3:GetObject"], // 허용할 S3 작업 (s3:GetObject, s3:PutObject, s3:DeleteObject 등) "Resource": ["arn:aws:s3::mybucket/*"] // 정책이 적용될 특정 버킷과 객체 } ] }
- 공개 액세스를 위한 버킷 정책
- 버킷 정책이 S3 버킷에 첨부되면 해당 버킷 내의 모든 객체에 액세스 가능
- 계정 내 사용자, 즉 IAM 사용자의 경우 정책을 통해 IAM 사용자에게 권한 할당 가능
- EC2 인스턴스가 있는 경우, IAM 권한을 통해 EC2 인스턴스에 역할을 생성
- 교차 계정 액세스 허용
- 다른 계정에 IAM 사용자가 있을 때, 추가 버킷 정책을 생성하여 이 특정 IAM 사용자에게 교차 계정 액세스 허용
=> IAM 사용자는 S3 버킷으로 접근 가능
- 다른 계정에 IAM 사용자가 있을 때, 추가 버킷 정책을 생성하여 이 특정 IAM 사용자에게 교차 계정 액세스 허용
- 블록 공개 액세스
- 기업 데이터 유출을 방지하기 위한 추가 보안 계층
- S3 버킷 정책을 설정하여 공개로 만들더라도 이 설정이 활성화되어 있을 경우 버킷은 공개되지 않음
S3의 버전 관리
- 객체의 생성, 업데이트, 삭제의 모든 단계를 저장
- 객체에 대한 모든 버전 저장 및 복원 가능
- 삭제 시 실제 객체를 삭제하는 대신 삭제 마커를 추가
- 버킷 단위로 활성화 필요 (default 비활성)
- 버전 관리를 시작하면 비활성화 불가능 (중지는 가능)
- 버전 관리 활성화 전에 버전 관리가 적용되지 않은 모든 파일은 null 버전을 갖게 됨
- 버전 관리를 중단해도 이전 버전은 유지
- 수명 주기 관리와 연동 가능
S3 복제
- CRR (Cross-Rigion Replication) - 교차 리전 복제
- 다른 리전에 복제
- 컴플라이언스, 데이터가 다른 리전에 있어 발생할 수 있는 지연 시간을 줄일 경우
- 계정간의 복제에 사용
- SRR (Same-Rigion Replication) - 같은 리전 복제
- 동일한 리전에 복제
- 다수의 S3 버킷간의 로그를 통합할 때
- 개발 환경이 별도로 있어 운영 환경과 개발 환경간의 실시간 복제를 필요로 할 때 사용
- 소스 버킷과 복제 대상 버킷 모두 버전 관리 기능 활성화 상태여야 복제 가능
- 복제는 백그라운드에서 비동기식으로 이루어짐
- 버킷은 서로 다른 AWS 계정간에도 복제 가능
- 복제 기능이 정상적으로 실행되려면, 올바른 IAM 권한(읽기, 쓰기 권한)을 S3에 부여해야함
- 기본적으로 복제를 활성화한 후에는 새로운 객체만 복제 대상이 됨
- 기존의 객체를 복제하는 방법 > S3 배치 복제 기능 활용 (기존 객체부터 복제에 실패한 객체까지 복제 가능)
- 복제 작업 삭제
- 소스 버킷에서 대상 버킷으로 삭제 마커를 복제
- 버전 ID로 삭제하는 경우 버전 ID는 복제되지 않음 > 영구적 삭제
- 체이닝 복제 불가
- 1번 버킷이 2번 버킷에 복제되어 있고, 2번 버킷이 3번 버킷에 복제되어 있다고 해서
1번 버킷의 객체가 3번 버킷으로 복제되지 않음
- 1번 버킷이 2번 버킷에 복제되어 있고, 2번 버킷이 3번 버킷에 복제되어 있다고 해서
'개발 공부 > AWS' 카테고리의 다른 글
[AWS] SAA 공부 (10)-2 S3 (Simple Storage Service) - 요청자 지불 / 이벤트 알림 / 성능 / 배치 작업 / (0) | 2025.04.01 |
---|---|
[AWS] SAA 공부 (10)-1 S3 (Simple Storage Service) - S3 Storage Classes (0) | 2025.04.01 |
[AWS] SAA 공부 (9) Elastic Beanstalk (0) | 2025.03.29 |
[AWS] SAA 공부 (8)-1 Route 53 - 라우팅 정책 (0) | 2025.03.28 |
[AWS] SAA 공부 (8) Route 53 (0) | 2025.03.28 |