S3 simple storage Service
데이터 저장 방식
오브젝트 스토리지
오브젝트라고 불리는 개별 유닛에 데이터를 저장하는 스토리지 포맷
각 유닛에는 고유의 식별자 혹은 키가 있어서 분산된 시스템 내 어디에 저장되어 있던지 상관없이 데이터를 찾을 수 있음
각각의 오브젝트에는 키, 데이터 및 옵션 메타데이터가 포함
-amazon S3
브록 스토리지
데이터를 고정된 사이즈의 블록으로 나누어 각각 고유한 식별자와 함께 저장하는 방식
각 데이터 블록은 고유 식별자를 부여 받아 스토리지 시스템이 데이터 조각을 원하는 곳에 배치 가능
예, 일부 데이터는 리눅스 환경에 저장하고 일부는 windows 장치에 저장
-amazon의 EBS
파일 스토리지
데이터는 계층적 파일 디렉터리 내의 폴더에서 파일로 저장
해당 데이터에 액세스 하는 경우, 컴퓨터는 그 데이터를 찾기 위해 경로를 알아둬야함
파일에 저장된 데이터는 제한된 양의 메타데이터(해당 파일 자체가 보관된 정확한 위치를 알려주는 데이터)를 사용해 구성 및 검색
Amazon EFS, Amazon FSx
S3 개요, 버킷 및 객체
거의 무제한 저장용량을 제공하는 객체 스토리지 서비스
최소 3개의 가용영역에 데이터를 자동 분산 저장하기에 성능, 확장성, 가용성, 내구성이 높음
대표적인 사례 : 백업 및 복원, 재해복구, 아카이브, 클라우드 스토리지, 정적 웹사이트 호스팅
버킷이름은 고유해야함!!!
해당 버킷은 region 단위의 서비스이
서울에 이 버킷이 생성이 됨
*버킷 액서스 정책
퍼블릭에 제한이 되어있기 때문에
but signed url통해서는 접근 가능
s3 버전관리 (versioning)
객체(파일)이 여러 버전을 가질 수 있음
동일한 파일 이름을 업로드하면 여러 버전으로 저장됨 (예, 버전1, 버전2)
실수로 객체를 덮어쓰거나 삭제한 경우 이전 버전으로 복구 가능
실수로 객체를 삭제하는 것을 방지하기 위해 MFA Delete 옵션을 추가 할 수 있음
(버전관리 + MFA Delete를 조합하면 삭제 방지가 더 강력함)
객체를 하나의 파일이 아닌 여러 버전으로 보존할 수 있고
버전 관리 기능을 사용하면 해당 기능을 활성화 해야함
버전관리할려면 활성화해야함
널값의 경우 버전관리 활성화한 이전에 저장된 파일이기 때문에 널값이라고 나옴
두개의 파일을 업로드하고 버전표시를 활성화하면 욜케 확인 가능
삭제를 해주면
그러나 버전관리를 하면 (삭제 마커라고 되어있음)
실제로 삭제한것은 아니지만, 단순히 마커해서 보이지 않게함
영구적으로 삭제하려면 버전표시를 한다음에
파일을 삭제 하면 영구삭제가 가능
S3 객체 암호화
• 데이터를 전송 중에 그리고 스토리지에 저장된 동안 보호하기 위해 암호화 사용
✓ 클라이언트 측 암호화: 데이터를 전송하기 전에 클라이언트 사이드에서 암호화
✓ 전송 중 암호화: 전송 보안 프로토콜 SSL/TLS를 이용해 데이터를 암호화 HTTPS 보안 프로토콜을 사용하여 전송
✓ 서버 측 암호화(SSE- Server Side Encryption): 데이터가 서버에 저장되기 전에 객체를 암호화
SSE-S3: S3에서 관리하는 암호화
SSE-KMS: KMS(키 관리 서버)에서 관리하는 암호화 키 관리 서버를 이용하므로 키를 자동 교체하거나 감사기능을 지원 가능
SSE-C: 고객(사용자)가 관리하는 암호화 데이터 전송 시 "반드시 HTTPS"를 사용해야 함
서버측 암호화 하기 (기존에 업로드 되어있는것)
새롭게 업로드 할때 암호화 하기
커스터머키는 명령어를 통하여 지정해줘야함
버킷 자체에 설정을 할수도 있음
S3 버킷 정책 (액세스 제어)
버킷정책
-s3 버킷 액세스 제어 정책
-json 형식
-조건에 따라 버킷에 액세스를 부여하고 제한하는 기능으로 사용
-예, 특정 aws리소스에서만 s3 버킷에 액세스 허용
-다른 aws 계정에 버킷 액세스 권한을 부여 가능
(교차 계정 액세스 권한)
퍼블릭 액세스 차단(버킷 설정)
-버킷과 객체에 대한 퍼블릭 액세스를 차단하거나 허용
-데이터 보호를 위해 기본적으로 퍼블릭 액세스 차단
ACL(access control list) : 액세스 제어 목록
-AWS 계정에 버킷이나 객체에 읽기/쓰기 권한을 부여하는 기능
-버킷 레벨에서 ACL을 적용하거나 객체 레벨에서 ACL을 적용 가능
대부분의 정책은 버킷정책을 사용하고, 퍼블릭 액세스는 정적 웹사이트를 사용할때 사용함
액세스 제어 목록보다는 버킷정책에서 계정이나 버킷이나 객체에 릭기쓰기 권한을 부여하는것을 더 많이 사용함
기본적으로 모든 퍼블릭 엑세스 차단임
ARN : AMAZON RESOURCE NAME
-> 암호화하지 않으면 업로드 하는것을 모두 거부
S3-정적 웹사이트 호스팅
정적 웹사이트 : 언제 접속해도 항상 같은 내용을 보여주지 않는 변하지 않는 사이트
(예, 회사 소개 홈페이지)
동적 웹사이트 : 접속할 때마다 다른 내용이 변하는 사이트(커뮤니티 홈페이지, SNS홈페이지, 쇼핑몰등)
S3에서 웹사이트 호스팅을 하면 EC2등의 별도의 웹서버 운영을 하지 않아도 됨
웹사이트 주소는 버킷이름.S3-website-리전.amazonaws.com 형식
만약 접속했는데 403 forbidden 이면 정적인 웹사이트의 액세스 허용이 안되어있다는것!!
버킷에 대한 퍼블릭 에세스가 안되어있어서임!!
버킷에서 액세스 차단 풀어주기!
getobect 권한에 권한추가!
링크가 잘못되면 error를 가져옴!
CORS(Cross-Origin Resource Sharing)
Origin=S3 버킷의 주소 (예, 예, http://website.s3-website.us-east-1.amazonaws.com
CORS는 다른 오리진(다른 웹 주소)에 버킷에 대한 액세스를 공유하는 것
해더값을 가져와서 불러올수 있음
ACCESS logs
S3 버킷의 모든 활동(접속, 읽기, 쓰기, 변경 등)을 파일로 만들어 S3버킷이 저장하는 기능
감사 목적으로 활동 가능
로그 분석을 위해 Amazon Athena 같은 분석 도구를 사용 가능
절대로 로그 파일 저장소를 같은 버킷에 하지 말것 (무한 루프로 인해 로그파일의 지속적인 증가가 일어날 수 있음
S3 replication (복제 규칙)
s3 버킷 간에 객체를 자동으로 복제하는 기능
2가지 복제 유형
✓교차 리전 복제 (CRR, Cross Region Replication)
서로 다른 AWS 리전의 S3 버킷으로 객체를 복사
사용사례:
지리적으로 가까운 액세스가 필요한 경우 재해복구(DR)
✓동일 리전 복제 (SRR, Same Region Replication)
같은 AWS 리전의 S3 버킷으로 객체를 복사
사용사례:
동일한 데이터를 사용하는 프로덕션과 테스트계정 간의 복제
법적 준수사항으로 같은 리전안에 데이터 복사본을 만들어 놓아야 하는 경우
• 버킷 복제를 위해서는 원본과 대상 버킷 모두 ""버전관리""가 활성화 되어 있어야 함
• 다른 AWS 계정의 버킷으로도 복제 가능
-기존에 있는걸 복제를 할지 말지에 대한 부분
S3 스토리지 유형 (Storage Class)
✓ S3 Standard(범용)
• 짧은 지연 시간과 많은 처리량을 제공
• 일반적인 용도의 다양한 사용 사례에 적합
✓ S3 Intelligent-Tiering (액세스 패턴을 알 수 없거나 예측할 수 없는 데이터용)
• 액세스 패턴을 모니터링하고, 액세스하지 않은 객체를 저렴한 액세스 계층으로 자동으로 이동
• 액세스 패턴을 알 수 없거나 액세스 패턴이 변화하는 데이터에 대한 스토리지 비용을 최적화하려는 경우에 사용
• 액세스 계층 이동
✓ S3 Standard-IA(빈번하지 않은 액세스용)
• 자주 액세스하지 않지만 필요할 때 빠르게 액세스해야 하는 데이터에 적합
• 최소 과금 기간 30일 (30일이 끝나기 전에 객체를 삭제하면 30일 요금이 부과)
✓ S3 One Zone-IA(빈번하지 않은 액세스용)
• 자주 액세스하지 않지만 필요할 때 빠르게 액세스해야 하는 데이터에 적합
• 최소 3개의 가용 영역(AZ)에 데이터를 저장하는 다른 S3 스토리지 클래스와는 달리 단일 AZ에 데이터를 저장하며 비용이 S3 Standard-IA보다 저렴
• 가용성 및 복원력이 필요 없는 고객에게 적합
• 최소 과금 기간 30일 (30일이 끝나기 전에 객체를 삭제하면 30일 요금이 부과)
✓ Glacier Instant Retrieval (아카이브용)
• 저렴한 비용으로 장기 보관하는 백업 용도
• 분기에 한 번 액세스하는 오래된 아카이브 데이터 용도
• 검색시간 : 밀리초 내에 즉시 검색
• 최소 과금 기간 90일
✓ S3 Glacier/Glacier Flexible Retrieval (아카이브용)
• 저렴한 비용으로 장기 보관하는 백업 용도
• 일 년에 한 번 액세스하는 오래된 아카이브 데이터 용도
• 검색시간 : 몇 분 내지 몇 시간의 검색 시간 소요 (신속 검색 1 – 5 분, 표준 3 – 5시간, 대량 5 -12 시간)
• 최소 과금 기간 90일
✓ S3 Glacier Deep Archive(아카이브용)
• 가장 저렴한 비용의 스토리지 클래스
• 일 년에 한 번 미만으로 액세스하는 오래된 아카이브 데이터 용도
• 7-10년 이상 데이터를 장기 보관하는 용도
• 검색시간: 몇 시간 (표준 12시간이내, 대량 48시간 이내)
• 최소 과금 기간 180일
업로드 할때도 스토리지 클래스를 지정해줘서 비용을 아낄수 있음
객체 수명주기 관리 (Lifecycle Policy)
객체가 저장되어서 삭제될 때 까지 수명 주기를 비용 효율적으로 저장 되도록 관리하는 기능
***버전관리가 활성화 되어있을 경우 객체의 버전 별로 수명 주기 정책을 적용할 수 있음
Amazon S3 Analytics - 스토리지 클래스 분석
데이터 액세스 패턴을 관찰해 자주 액세스하지 않는 STANDARD 스토리지를 STANDARD_IA 스토리지 클래스로 옮길 시점을 알려줌
S3- Glacier Vault Lock and Object Lock
S3 Glacier Vault Lock
• S3 Glacier Vault는 아카이브 데이터를 저장 하는 컨테이너
• S3 Glacier Vault Lock을 사용하여 파일 저장 후 삭제, 편집을 못하도록 정책을 잠금
• Write Once Read Many(WORM) 모델을 적용
• Vault Lock을 사용하기 위해서는 Vault Lock 정책을 생성
• Vault 정책이 생성된 이후에 더 이상 변경이나 삭제 불가
• 데이터 보관 규정 준수 정책이 있는 경우에 사용 - 법적인 보안정책이 있는경우
S3 Object Lock (S3 객체 잠금)
• 일정시간 또는 무기한으로 객체가 삭제되거나 덮어쓰이지 않도록 하는 기능으로 읽기만 가능
• 보관 기간을 설정해여 정해진 시간 동안 객체를 보호하도록 설정 가능
• Write Once Read Many(WORM) 모델을 적용
• 객체 잠금을 사용하려면 버전관리가 활성화 되어 있어야 함
• 두 가지 보관 모드를 사용 가능
거버넌스 모드(Governance Mode) : 필요에 따라 일부 사용자에게 보관 설정을 변경하거나 객체를 삭제할 수 있는 권한을 부여할 수 있음
규정준수 모드(Compliance Mode) : AWS 계정의 루트 사용자를 포함한 어떤 사용자도 덮어쓰거나 삭제할 수 없음
• Legal Hold(법적 보존)
객체 버전을 덮어쓰거나 삭제할 수 없도록 하는 기능
객체를 수정해야 하는 사용자의 IAM 정책에 s3 PutObjectLegalHold 권한을 추가하면 해당 사용자는 객체를 수정, 삭제 가능
S3 기타기능
이벤트 알림(Event Notification)
• S3의 이벤트가 발생할 때마다 알리는 기능
• 이벤트는 객체의 생성, 복제, 복원 등이 있음
• 생성된 이벤트 알림을 Amazon SNS, Amazon SQS, AWS Lambda로 보낼 수 있음
예, 객체가 삭제될 때마다 S3에서 Amazon SNS로 이벤트 알림을 보내 사용자의 이메일로 전송
예, 객체가 생성될 때마다 Lambda를 이용하여 파일을 처리하는 함수 구성
• 이벤트 알림을 Amazon EventBridge와 통합하여 이벤트 애플리케이션 구축 가능
S3 Select & S3 Glacier Select
• SQL 구문을 사용해 S3 객체의 콘텐츠를 필터링하여 원하는 데이터만 가져오는 기능
• 데이터를 검색하는 데 필요한 비용을 절감하고 지연시간을 감소(성능 향상)
요청자 지불 버킷(Requested Pays)
• 일반적으로 버킷에 데이터를 다운로드 하거나 업로드 할 때 비용은 버킷 소유자가 지불
• 데이터 전송비용을 버킷 소유자가 아닌 요청자(데이터를 다운로드 업로드 하는 사람)이 지불하는 기능
미리 서명된 URL (Pre-Signed URL)
• 미리 서명된 URL을 사용하여 제한 된 시간동안 객체를 공유 또는 업로드하는 만료 시간을 설정
전송 가속화(Amazon S3 Transfer Acceleration)
• S3버킷의 객체를 사용자에게 더 빠르게 전송해 주는 기능
• AWS의 엣지로케이션을 활용해서 S3데이터를 사용자와 가까운 곳에 캐싱하여 전송
• 전 세계 각지에서 중앙의 버킷으로 업로드하는 고객이 있는 경우에 사용
멀티 파트 업로드
• 대용량의 파일을 분할하여 병렬로 S3에 업로드 하는 방식
• 파트를 병렬로 업로드 하기에 빠른 처리 속도로 업로드 가능
• 업로드가 실패하면 재전송 또는 수명 주기 정책을 통해 완료되지 않은 업로드 삭제 가능
S3 데이터 검색
• Athena, S3 Select, Redshift 등의 서비스를 사용해서 S3의 데이터를 다른 플랫폼으로 이동하지 않고 바로 검색 가능
• SQL 쿼리문을 사용해서 검색 가능
AWS Transfer for SFTP
• S3 버킷을 저장소로 하는 SFTP 서비스
• SFTP(Secure File Transfer Protocol)는 보안 파일 전송 프로토콜
• 온-프레미스나 외부의 다른 시스템에서 SFTP를 이용하여 S3 버킷으로 파일을 전송하고 관리 가능
S3 Access Point
• 특정한 그룹, 사용자, 애플리케이션이 허용된 S3 데이터만 액세스 할 수 있게 하는 기능
• 예, 재무팀 사용자는 재무관련 S3 데이터만 액세스하여 업로드, 수정, 삭제 가능
S3 Object Lambda
• AWS Lambda 함수를 사용해 S3 객체의 데이터를 수정 및 처리 하는 기능
• 예, S3 객체의 개인 식별 정보를 수정
• 예, S3 객체의 XML 형식을 JSON으로 변환하는 등의 데이터 형식 간 변환
• 예, 데이터 추가, 파일 압축/해제, 이미지크기 조정 및 워터 마킹
S3 Batch Operation (배치 작업)
• 단일 요청으로 많은 수(수백만~수억 개)의 S3 객체를 간편하게 처리하는 기능
• 예, 다른 버킷에 객체를 복사, 태그 또는 ACL(액세스 제어 목록)을 설정, Glacier에서 복원을 시작, 각 객체별로 AWS Lambda 함수 호출