본문 바로가기

Infrastructure/Certificate

[SOA] Amazon S3

Amazon S3

이번 장에서는 SysOps Administrator를 준비하며 Simple Storage Service의 약자인 S3에 대해서 알아보도록 한다.


Simple Storage Service (S3)

  • S3는 AWS의 주요 구성 요소 중 하나다.
  • '무한 확장' 가능한 스토리지다.
  • 많은 웹 사이트에서 S3를 백본으로 사용하고 있다.
  • 많은 AWS 서비스에서도 S3와 통합하는 기능을 제공한다.
  • S3는 많은 사용 사례를 가지고 있다.
    • 백업 및 저장
    • 재해 복구
    • 보관소
    • 하이브리드 클라우드 스토리지
    • 애플리케이션 호스팅
    • 미디어 호스팅
    • 데이터 레이크 및 빅데이터 분석
    • 소프트웨어 제공
    • 정적 웹사이트
  • "Nasdaq"에서는 7년간 저장되어 있는 데이터를 S3 Glacier로 이전하였다.
  • "Sysco"는 데이터에 대한 분석을 실행하고 비즈니스 통찰력(Business Insights)을 얻고 있다.

Bucket

  • S3를 사용하면 사용자는 버킷(디렉터리)에 객체(파일)을 저장할 수 있다.
  • 버킷은 전역적으로 고유한 이름을 가져야 한다.(모든 리전, 모든 계정)
  • 버킷은 리전 수준에서 정의된다.
  • S3는 글로벌 서비스처럼 보이지만 버킷은 하나의 리전에 생성된다.
  • 따라야 하는 명명 규칙은 아래와 같다.
    • 대문자와 밑줄(_)을 사용할 수 없다.
    • 3~63 길이의 이름을 가질 수 있다.
    • IP를 사용할 수 없다.
    • 소문자 또는 숫자로 시작해야 한다.
    • 접두사를 xn--사용할 수 없다.
    • 접미사를 -s3alias사용할 수 없다.

Object

  • 객체(파일)에는 키가 있다.
  • 키는 전체 경로다.
    • s3://my-bucket/my_file.txt
    • s3://my-bucket/my_folder1/another_folder/my-file.txt
  • 키는 접두사 + 객체 이름으로 구성된다.
    • s3://my-bucket/my_folder1/another_folder/my_file.txt
  • 버킷 내에 '디렉터리'라는 개념이 없다. (UI가 사용자를 속여서 다르게 생각하도록 유도할 수 있다.)
  • 키는 슬래시(/)를 포함하는 아주 긴 이름이고 키는 접두사와 객체 이름으로 이루어져 있다.
  • 객체의 값은 본문의 내용이다.
    • 최대 객체의 크기는 5TB(5,000GB)다.
    • 5GB크기 이상의 파일을 업로드하는 경우 '멀티파트 업로드'를 사용해야 한다.
  • 메타데이터(텍스트 키/값 쌍 목록 - 최대 10개) - 보안/수명 주기에 유용하다.
  • 버전 관리가 활성화된 경우 "Version ID"를 가지고 있다.

S3 Security

  • User-Based
    • IAM Policy: IAM의 특정 사용자에게 허용되는 API 호출이 허용되는지 승인한다.
  • Resource-Based
    • Bucket Policy: S3 콘솔의 버킷 전체 규칙을 설정한다. 교차 계정 액세스를 허용할 수 있다.
    • Object Access Control List (ACL): 더 세부적인 내용 (비활성화 가능)
    • Bucket Access Control List (ACL): 덜 일반적임 (비활성화 가능)
  • 참고: IAM 주체는 다음과 같은 경우 S3 객체에 액세스할 수 있다.
    • 사용자 IAM 권한이 이를 허용하거나 리소스 정책이 이를 허용한다.
    • 명시적인 DENY 정책이 없다.
  • 암호화: 암호화 키를 사용하여 S3의 객체를 암호화한다.

S3 Bucket Policy

  • JSON 기반 정책
    • Resources: 버킷 또는 객체
    • Effect: 허용(Allow) / 거부(Deny)
    • Actions: 허용 또는 거부를 위한 API 집합
    • Principal: 정책을 적용할 계정 또는 사용자
  • 정책에 S3 버킷을 사용하여 아래의 항목을 수행할 수 있다.
    • 버킷에 대한 공개 액세스 권한을 부여한다.
    • 업로드 시 객체를 강제로 암호화한다.
    • 다른 계정에 대한 액세스 권한을 부여한다.(교차 계정)

  • Principal은 *이므로 누구든지 GetObject를 할 수 있다.

Public Access - 버킷 정책 사용

  • S3 버킷 정책을 이용해 버킷에 Public Access를 부여할 수 있다.
  • 오른쪽에 있는 버킷에서 업로드하는 객체를 암호화하거나 다른 계정에 액세스 권한을 부여할 수 있다.
  • 익명의 www 사용자가 S3 버킷 내의 파일에 액세스하기를 원하는 경우 S3 버킷 정책을 사용하여 공용 액세스를 허용할 수 있다.

User Access - IAM 정책 사용

  • 계정에 IAM 사용자가 버킷에 접근하는 것을 원하는 경우가 있을 수 있다.
  • IAM 정책을 통해서 권한을 할당할 수 있다.
  • 정책이 S3 액세스할 수 있는 권한을 할당하기 때문에 IAM 사용자는 S3 버킷에 접근할 수 있다.

Instance Access - IAM 역할 사용

  • EC2 인스턴스의 S3 버킷 액세스를 허용하는 경우 IAM 사용자는 적합하지 않다.
  • 대신 IAM 역할을 사용해야 한다.
  • 올바른 IAM 사용 권한으로 EC2 인스턴스 역할을 만들고 역할을 인스턴스에 연결하여 S3 버킷에 액세스할 수 있도록 설정할 수 있다.

Cross-Account Access - 버킷 정책 사용

  • 다른 계정의 IAM 사용자에게 S3 버킷 접근 권한을 할당하고 싶다면 버킷 정책을 사용해야 한다.
  • 다른 계정의 IAM 사용자의 접근을 허용하는 버킷 정책을 생성하면 다른 계정의 IAM 사용자는 버킷에 접근할 수 있고 API를 호출할 수 있다.

Block Public Access

  • AWS가 회사 데이터 유출을 방지하기 위해 추가로 개발한 설정이다.
  • 공개적인 S3 버킷 정책을 설정하더라도 이 설정이 되어 있다면 Public 접근을 할 수 없다.
  • 계정 수준에서 설정할 수 있다.

S3 Bucket Policy Advanced

  • 정책에 S3 버킷을 사용하여 다음을 수행한다.
    • 버킷에 대한 공개 액세스 권한을 부여한다.
    • 업로드 시 객체를 강제로 암호화한다.
    • 다른 계정에 대한 액세스 권한을 부여(교차 계정)한다.
  • 선택 조건이 있다.
    • Public IP 또는 Elastic IP (Private IP는 지원하지 않음)
    • Source VPC 또는 Source VPC Endpoint - VPC 엔드포인트에서만 작동한다.
    • CloudFront 원본 ID
    • MFA
  • 여러 가지 버킷 정책은 공식 홈페이지에서 확인할 수 있다.

예시

  • 아래는 예시는 aws:PrincipalOrgID 조컨 키를 사용하여 AWS 조직 내의 AWS 계정의 보안 주체로만 액세스를 제한한다.

  • 아래는 예시는 s3:x-amz-server-side-encryption 조건 키를 사용하여 암호화되지 않은 객체가 S3 버킷에 업로드되는 것을 방지한다.

  • 아래의 예시는 NotIpAddress 조건 키를 사용하여 특정 IP 주소에 대한 액세스를 제한한다.

  • 아래는 S3 버킷의 모든 객체를 나열하고 다운로드할 수 있는 사용자 액세스 권한을 부여한다.

  • 아래는 MultiFactorAuthPresent 조건 키를 사용하여 MFA를 사용하여 인증된 사용자로 액세스를 제한한다.


Static Website Hosting

  • S3는 정적 웹사이트를 호스팅하고 인터넷에 액세스할 수 있도록 한다.
  • 웹사이트 URL은 아래와 같으며 리전에 따라 달라진다.
    • http://bucket-name.s3-website-aws-region.amazonaws.com
    • http://bucket-name.s3-website.aws-region.amazonaws.com
  • 403 Forbidden 오류가 발생하는 경우 버킷 정책이 공개 읽기를 허용하는지 확인해야 한다.


Versioning

  • Amazon S3에서 파일의 버전을 지정할 수 있다.
  • 버킷 수준에서 활성화된다.
  • 동일한 키를 덮어쓰면 "버전"이 1, 2, 3...과 같이 변경된다.
  • 버킷의 버전을 지정하는 것이 모범 사례다.
    • 의도하지 않은 삭제로부터 보호(버전 복원 기능)할 수 있다.
    • 이전 버전으로 쉽게 롤백할 수 있다.
  • 참고
    • 버전을 활성화하기 전에 버전이 관리되지 않은 모든 파일은 버전이 null이다.
    • 버전 관리를 일시 중단해도 이전 버전은 삭제되지 않는다.

 


Replication (CRR & SRR)

  • 소스 및 대상 버킷에서 버전 관리를 활성화해야 한다.
  • CRR은 Cross-Region Replication의 약자로 교차 지역 복제를 의미한다.
  • SRR은 Same-Region Replication의 약자로 동일 지역 복제를 의미한다.
  • 버킷은 다른 AWS 계정에 있을 수 있다.
  • 복사는 비동기 방식으로 이루어진다.
  • S3에 적절한 IAM 권한을 부여해야 한다.
  • 사용 사례
    • CRR: 규정 준수, 짧은 지연 시간 액세스, 교차 계정 복제
    • SRR: 로그 집계, 운영 계정과 테스트 계정 간의 실시간 복제

  • 복제를 활성화한 후에는 새롭게 생성되는 객체만 복제된다.
  • 선택적으로 S3 배치 복제를 사용하여 기존 객체를 복제할 수 있다.
    • 기존 객체 및 복제에 실패한 객체를 복제한다.
  • DELETE 작업의 경우
    • 소스에서 타겟으로 삭제 마커를 복제할 수 있다. (선택적으로 설정 가능)
    • 버전 ID가 있는 삭제는 복제되지 않는다. (악의적인 삭제를 방지하기 위해)
  • 복제 체인 연결이 없다.
    • 버킷 1이 버킷 2로 복제되고 버킷 3으로 복제되는 경우
    • 버킷 1에서 생성된 객체는 버킷 3에 복제되지 않는다.

S3 Storage Classes

  • S3에는 여러 종류의 스토리지가 있다.
    • Amazon S3 Standard - General Purpose
    • Amazon S3 Standard-Infrequent Access (IA)
    • Amazon S3 One Zone-Infrequent Access
    • Amazon S3 Glacier Instant Retrieval
    • Amazon S3 Glacier Flexible Retrieval
    • Amazon S3 Glacier Deep Archive
    • Amazon S3 Intelligent Tiering
  • 수동으로 또는 S3 수명 주기 구성을 사용하여 클래스 간에 이동할 수 있다.

Durability and Availability

  • Durability:
    • 여러 AZ에 걸쳐 객체의 높은 내구성(99.999999999%)을 제공한다.
    • S3에 10,000,000개의 객체를 저장하는 경우 평균적으로 10,000년에 한 번씩 단일 객체의 손실이 발생할 것으로 예상할 수 있다.
    • 모든 스토리지 클래스에 동일하다.
  • Availability:
    • 서비스를 얼마나 쉽게 사용할 수 있는지 측정한다.
    • 스토리지 등급에 따라 다르다.
    • 예를 들어, S3 Standard는 99.99%의 가용성을 제공하며 1년에 53분동안 사용할 수 없음을 의미한다.

Standard - General Purpose

  • 99.99% 가용성을 제공한다.
  • 자주 액세스하는 데이터에 사용된다.
  • 짧은 지연 시간과 높은 처리량을 제공한다.
  • 동시 설비 장애 2개를 유지한다.
  • 빅 데이터 분석, 모바일 및 게임 애플리케이션, 콘텐츠 배포 등에 사용된다.

Infrequent Access

  • 자주 액세스하지 않지만 필요할 때 빠른 액세스가 필요한 데이터의 경우 사용한다.
  • S3 Standard보다 비용이 저렴하다.
  • Amazon S3 Standard-Infrequent Access (S3 Standard-IA)
    • 99.9%의 가용성을 제공한다.
    • 재해 복구 및 백업과 같은 작업에 사용된다.
  • Amazon S3 One Zone-Infrequent Access (S3 One Zone-IA)
    • 단일 AZ에서 높은 내구성(99.999999999%)을 제공하지만 AZ가 파괴되면 데이터가 손실된다.
    • 99.5%의 가용성을 제공한다.
    • 온프레미스 데이터 또는 다시 생성할 수 있는 데이터의 보조 백엡 복사본을 저장하는 작업에 사용된다.

Glacier Storage Classes

  • 아카이빙/백업을 위한 저렴한 객체 스토리지다.
  • 가격: 스토리지 가격 + 객체 검색 비용
  • Amazon S3 Glacier Instant Retrieval
    • 밀리초 단위 검색 기능으로 분기에 한 번 액세스하는 데이터에 적합하다.
    • 최소 저장 기간은 90일이다.
  • Amazon S3 Glacier Flexible Retrieval (Amazon S3 Glacier의 새로운 이름)
    • 신속(15분), 표준(35시간), 대량(5~12시간)
    • 최소 저장 기간은 90일이다.
  • Amazon S3 Glacier Deep Archive - 장기 보관용
    • Standard(12시간), 대량(48시간)
    • 최소 보관 기간은 180일이다.

Intelligent-Tiering

  • 소액의 월간 모니터링 및 자동 계층화 비용을 지불하면 된다.
  • 사용량에 따라 액세스 계층 간에 객체를 자동으로 이동한다.
  • S3 Intelligent-Tiering의 경우 검색 비용이 발생하지 않는다.
  • Frequent Access Tier (자동): 기본 계층
  • Infrequent Access Tier (자동): 30일 동안 액세스되지 않은 객체
  • Archive Instant Access Tier (자동): 90일 동안 액세스되지 않은 객체
  • Archive Access Tier (선택): 90일에서 700일 이상 구성 가능
  • Deep Archive Access Tier (선택): 180일에서 700일 이상 구성 가능

비교

  • 아래는 스토리지 클래스 간 차이를 비교할 수 있는 표다.

  • 아래는 스토리지 클래스 간 가격 차이를 비교할 수 있는 표다. (us-east-1 기준)


'Infrastructure > Certificate' 카테고리의 다른 글

[SOA] S3 Security  (0) 2023.11.10
[SOA] S3 Advanced  (0) 2023.11.09
[SOA] EC2 Storage Data Management  (0) 2023.11.05
[SOA] Lambda  (0) 2023.11.01
[SOA] CloudFormation  (0) 2023.10.30