Skip to content

Latest commit

 

History

History
244 lines (175 loc) · 11 KB

S3.md

File metadata and controls

244 lines (175 loc) · 11 KB

S3 (Simple Storage Service)

S3

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

버전 관리 (Versioning)

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

객체 암호화

data-transmission

  • 데이터를 전송 중에 그리고 스토리지에 저장된 동안 보호하기 위해 암호화 사용
  • 서버 측 암호화 (SSE / Server Side Encryption)
    • 데이터가 서버에 저장되기 전에 객체를 암호화
    • SSE-S3 : S3에서 관리하는 암호화
    • SSE-KMS : KMS에서 관리하는 암호화, KMS를 이용하므로 키를 자동으로 교체하거나 감사기능을 지원
    • SSE-C : 사용자가 관리하는 암호화, 데이터 전송시 반드시 HTTPS를 사용해야 함
  • 클라이언트 측 암호화 (CSE / Client Side Encryption)
    • 데이터를 전송하기 전에 클라이언트에서 암호화
  • 전송 중 암호화
    • 전송 보안 프로토콜 SSL/TLS를 이용해 데이터를 암호화, HTTPS 보안 프로토콜을 사용하여 전송

버킷 정책

  • 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" : "*"
    }
  ]
}

퍼블릭 엑세스 차단

image.png

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

ACL (엑세스 제어 목록)

image.png

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

정적 웹사이트 호스팅

website-hosting

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

CORS (Cross-Origin Resource Sharing)

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

CORS

엑세스 로깅

  • S3 버킷의 모든 활동을 파일로 만들어 S3 버킷이 저장하는 기능

  • 감사 목적으로 활용 가능

  • 로그 분석을 위해 Amazon Athena같은 분석 도구를 사용 가능

  • 로그 파일 저장소를 같은 버킷에 저장하면 무한 루프로 인해 로그파일이 지속적으로 증가

    image.png

Replication (복제 규칙)

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

스토리지 클래스

storage-class

  • 접근 빈도로 클래스를 나눔

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번 정도 접근하는 데이터를 장기 보관용도로 저장하는 서비스

객체 수명주기 관리 (Lifecycle Policy)

lifecycle-policy

  • 객체가 저장되어 삭제될 때까지의 수명주기를 비용효율적으로 저장 되도록 관리하는 기능
  • 버전 관리가 활성화 되어 있을 경우 객체의 버전 별로 수명 주기 정책을 적용할 수 있음
  • Amazon S3 Analytics
    • 스토리지 클래스 분석
    • 데이터 엑세스 패턴을 관찰해 자주 엑세스하지 않는 STANDARD 스토리지를 STANDARD IA 스토리지 클래스로 옮길 시점을 알려줌

S3 Object Lock (S3 객체 잠금)

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

이벤트 알림(Event Notification)

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

S3 Select & S3 Glacier Select

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

요청자 지불 버킷 (Requested Pays)

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

PreSignedURL

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

S3 Access Point

  • 특정한 그룹, 사용자, 애플리케이션이 허용된 S3 데이터만 엑세스 할 수 있게 하는 기능

전송 가속화 (Amazon S3 Transfer Acceleration)

  • S3 버킷의 객체를 사용자에게 더 빠르게 전송해 주는 기능
  • AWS의 엣지로케이션을 활용해서 S3데이터를 사용자와 가까운 곳에 캐싱하여 전송
  • 전 세계 각지에서 중앙의 버킷으로 업로드하는 고객이 있는 경우에 사용

AWS Transfer for SFTP

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

멀티 파트 업로드

  • 대용량의 파일을 분할하여 병렬로 S3에 업로드 하는 방식
  • 파트를 병령로 업로드 하기에 빠른 처리 속도로 업로드 가능
  • 업로드가 실패하면 재전송 또는 수명 주기 정책을 통해 완료되지 않은 업로드 삭제 가능

S3 데이터 검색

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

S3 Batch Operation

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

S3 Object Lambda

  • AWS Lambda를 사용해 S3 객체의 데이터를 수정 및 처리하는 기능
    • 데이터 추가, 파일 압축 / 해제, 이미지 크기 조정 및 워터 마킹