Amazon S3 기초
- AWS 설명 : Amazon Simple Storage Service는 업계 최고의 확장성과 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스 입니다.
- 객체 스토리지 서비스 : 파일 보관만 가능 ↔ Block Storage Service (EBS, EFS 등)
- 글로벌 서비스. 단, 데이터는 리전에 저장
- 무제한 용량
버킷
- S3의 저장공간을 구분하는 단위
- 디렉토리/폴더와 같은 개념
- 버킷 이름은 전 세계에서 고유 값 : 리전에 관계없이 중복된 이름이 존재할 수 없음
S3 객체의 구성
- Owner : 소유자
- Key : 파일의 이름
- Value : 파일의 데이터
- Version Id : 파일의 버전 아이디
- Metadata : 파일의 정보를 담은 데이터
- ACL : 파일의 권한을 담은 데이터
- Torrents : 토렌트 공유를 위한 데이터
S3의 내구성
- 최소 3개의 AZ에 데이터를 분산 저장 (Standard의 경우)
- 99.999999999% 내구성(eleven nine) = 0.000000001% 확률로 파일 상실
- 99.9% SLA 가용성 (스토리지 클래스에 따라 다름)
S3 보안 설정
- S3의 모든 버킷은 새로 생성시 기본적으로 Private
- 보안 설정은 객체 단위와 버킷 단위로 구성
- Bucket Policy : 버킷 단위
- ACL (Access Control List) : 객체 단위
- MFA를 활용해 객체 삭제 방지 가능
- Versioning을 통해 파일 관리 가능
- 액세스 로그 생성 및 전송 가능
사용 방벙
- S3 → 버킷 만들기
- 객체 소유권 : ACL 비활성화가 권장값
- 액세스 차단 설정 : 필요에 따라 액세스 차단 설정
- 업로드 후 데이터 객체에 대한 정보 열람 가능
Amazon S3 스토리지 클래스
- S3는 다양한 스토리지 클래스를 제공
- 클래스 별로 저장의 목적, 예산에 따라 다른 저장 방법을 적용
- 총 8가지 클래스. (S3 on OutPosts : 다른 7가지 클래스와 구분됨)
![](https://velog.velcdn.com/images/ebab_1495/post/d4d4065e-2efd-40dd-9fe1-a859bbc4a985/image.png)
S3 Standard
S3 Intelligent Tiering
- 머신 러닝을 사용해 자동으로 클래스 변경
- 퍼포먼스 손해 / 오버헤드 없이 요금 최적화
S3 Standard IA (Infrequently Accessed)
- 자주 사용되지 않는 데이터를 저럄한 가격에 보관
- 데이터를 불러올 때마다 비용 지불
- 자주 사용하지 않지만 중요한 파일 보관
S3 One Zone-IA
- S3 Standard IA와 같지만 3개의 AZ가 아닌 하나의 AZ에서만 저장하기 때문에 더 저렴한 대신 내구성이 낮음
- 자주 사용하지 않으며 쉽게 복구할 수 있는 파일 보관
S3 Glacier Instant Retrieval
- 아카이브용 저장소
- 저렴한 가격
- 바로 액세스 가능
- 의료 이미지, 뉴스 아카이브 등 액세스가 바로 필요한 경우
S3 Glacier Flexible Retrieval
- 아카이브용 저장소
- 저렴한 가격
- 바로 액세스 불가능 : 분~시간 단위 소요
- 장애 복구용 데이터 ,백업 데이터용
S3 Glacier Deep Archive
- 가장 저렴한 가격
- 데이터를 가져오는데 12~48시간 소요
- 오래된 로그 저장, 사용할 일이 거의 없지만 법적으로 보관해야 하는 서류 등
S3 on OutPosts
- 온프레미스 환경에 S3 제공
- 내구성을 확보한 상태로 파일을 저장하도록 설계
- IAM, S3 SDK 등 사용 가능
Amazon S3 권한 관리
버킷 정책
- JSon 형식의 문서로 버킷 단위 권한을 관리하는 정책
- 버킷에 IAM 정책과 비슷한 방법으로 권한 부여 가능
- 조건, 대상 설정 가능
- 다른 계정에 권한 부여 가능
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::<버킷이름>/*"
}
]
}
ACL (Access Control List)
- 버킷 혹은 객체 단위로 읽기, 쓰기의 권한을 부여
- S3에서 설정을 통해 ACL을 활성화 시킨 후 적용 가능
- 파일 업로드 시 설정 가능
Amazon S3 액세스 로깅
- S3의 버킷을 정해 활동 로그를 다른 S3 버킷에 저장하는 기능
- 지정한 버킷에 로그 파일 저장
- 반드시 기록 대상 버킷과 로그 저장 버킷의 분리 필요 → 무한 파일 생성 방지
- 보안 감사 및 분석 목적으로 활용
사용 방법
- 로그 저장용 버킷 생성
- 로그를 저장할 버킷 → 속성 → 서버 액세스 로깅 → 편집
- 대상 버킷을 로그 저장용 버킷으로 선택
Amazon S3 미리 서명된 url
수동 파일 공유의 문제점
- IAM 유저의 개수 제한
- 관리의 어려움
- 만료 기간 설정의 어려움
- 유출 시 모두에게 다시 공유 필요
- 세세한 권한 조절 불가능
미리 서명된 URL (Presigned URL)
- 마패같은 느낌
- S3의 파일을 안전하게 공유하고 싶을 때 사용
- 생성자가 가진 권한으로 파일에 접근 가능한 임시 URL을 생성
- URL의 만료 기간 지정 가능
- Method(GET, POST 등) 설정 가능
- URL의 권한은 생성자가 가진 권한 중 일부 혹은 전체 사용
- ex. 생성자가 GET 권한이 없다면 URL로 GET 불가능
설정방법
CLI 환경
- 공유할 버킷 생성
- IAM → 역할 → 역할 생성
- 일반 사용 사례 : EC2
- 권한 : S3FullAccess
- EC2 생성
- 고급 세부 정보의 IAM 인스턴스 프로파일 : 2에서 생성한 IAM
- EC2 aws 접속 후 root 계정→
aws configure set default.s3.addressing_style virtual
aws s3 presign s3://<S3 파일의 URI> --region ap-northeast-2 --expire-in 100
- region: 지역 / expire-in : 유효 시간 (초)
콘솔
- 공유할 버킷의 파일 선택
- 작업 → 미리 서명된 URL 공유
Amazon S3 정적 호스팅
- S3를 사용하여 정적(Static) 웹 컨텐츠를 호스팅하는 기능
- 별도의 서버 없이 웹사이트 호스팅 가능
- 고가용성 / 장애 내구성을 확보
- ex. 대규모 접속이 예상되는 사전 예약 페이지, 홍보 페이지, 회사 웹사이트 등
- 유저가 클릭한 만큼만 요금 부과
정적 컨텐츠
- 서버에 저장된 파일이 모든 사용자에게 동일하게 전달되는 컨텐츠
- 매번 서버에 요청할 필요 없이 캐싱 가능
- HTML/Js 등으로 구성
동적 컨텐츠
- 시간, 사용자, 입력 등에 따라 내영이 변경되는 컨텐츠
- 매번 서버에 요청하여 내용을 구성하고 전달받아야 함
- PHP, JSP, ASP.net 등으로 서버 처리
설정 방법
- S3 → 버킷 선택 → 권한 → 퍼블릭 액세스 차단 해제 → 정적 웹사이트 호스팅 편집
- 페이지 파일 업로드
기타 기능
이벤트 호출
- 객체의 생성/삭제/변경 이벤트 발생 → 다른 서비스 호출
- ex. 파일 업로드시 람다를 호풀해 파일 무결성 검사
- SNS, SQS, Lambda 호출 가능
호출 구조
![](https://velog.velcdn.com/images/ebab_1495/post/b9c218be-800d-4102-9740-ca7497624d5a/image.png)
버전 관리 및 복제
버전 관리
- 각 객체의 변화를 버전화 시켜 저장
- 사용 사례 : 삭제/업데이트 후 기존의 버전으로 롤백
- 버전의 삭제 관리를 위해서 MFA 설정 가능
- 사용하고 싶을 때 기능 활성화 필요
복제
- 하나의 버킷의 변화를 다른 버킷에 그대로 적용하는 기능 (삭제, 업로드, 변경 포함)
- 버전 관리 활성화 필요
기타 기능
- Transfer Acceleration : CloudFront를 통해 다운로드를 최적화시키는 서비스
- 수명 주기 설정 : 일정 기간 후 다른 스토리지 티어로 옮기기
- ex. 30일 후 아카이브로 보내기, 50일 후 객체 삭제