Amazon S3

wjdghks95·2024년 7월 26일
post-thumbnail

Amazon Simple Storage Service(Amazon S3)는 업계 최고의 확장성과 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스입니다. Amazon S3는 99.999999999%의 내구성을 제공하도록 설계되었으며, 전 세계의 수백만 애플리케이션을 위한 데이터를 저장합니다.

Amazon S3 소개

Amazon S3

  • what: AWS에서 제공하는 오브젝트 스토리지 서비스
  • when:
    • 파일을 저장하고 활용하고 싶을 때(미디어, 로그, 소스코드, 파일, 백업)
    • Static Hosting 기능으로 서버 없이 웹 페이지를 제공하고 싶을 때
    • 기타 파일을 관리하고 싶을 때
  • How:
    • 99.999999999%의 내구성 / 99.99%의 가용성을 가진 분산 스토리지로 파일 저장
    • 다양한 기능
      • Presigned URL: 제한된 사람에게만 전달, 버저닝/권한 관리
      • 주기적인 복제, 일정기간 파일 삭제 방지, 버저닝, 암호화 등
  • 객체 스토리지 서비스: 파일 보관만 가능 <-> Block Storage Service(EBS, EFS 등)
    • 어플리케이션 설치 불가능
  • 글로벌 서비스. 단, 데이터는 리전에 저장
  • 무제한 용량
    • 하나의 객체는 0byte에서 5TB의 용량

※ 파일 스토리지 VS 오브젝트 스토리지

파일 스토리지

  • 파일을 계층 구조로 관리
  • 빠르게 찾고 업데이트 작업 가능
  • 확장이 제한적(수십 테라바이트 수준)

오브젝트 스토리지

  • 파일을 오브젝트(데이터, 메타데이터, 아이디) 단위로 관리
  • 정확한 경로를 알아야 찾기 가능
  • 확장이 쉬움(수십 페타파이트 이상)

Amazon S3 기초

버킷

  • S3의 저장공간을 구분하는 단위
  • 디렉토리/폴더와 같은 개념
  • 버킷 이름은 전 세계에서 고유 값: 리전에 관계없이 중복된 이름이 존재할 수 없음

S3 객체의 구성

  • Owner: 소유자
  • Key: 파일의 이름
  • Value: 파일의 데이터
  • Version Id: 파일의 버전 아이디
  • Metadata: 파일의 정보를 담은 데이터
  • ACL: 파일의 권한을 담은 데이터
  • Torrents: 토렌트 공유를 위한 데이터

S3의 내구성

  • 최소 3개의 가용영역(AZ)에 데이터를 분산 저장(Standard의 경우)
  • 99.999999999% 내구성
  • 99.9% SLA 가용성(스토리지 클래스에 따라 다름)

S3 보안 설정

  • S3 모든 버킷은 새로 생성 시 기본적으로 Private(비공개)
    • 따로 설정을 통해 불특정 다수에게 공개 가능
  • 보안 설정은 객체 단위와 버킷 단위로 구성
    • Bucket Polkicy: 버킷 단위
    • ACL(Access Control List): 객체 단위
  • MFA를 활용해 객체 삭제 방지 가능
  • Versioning을 통해 파일 관리 가능
  • 액세스 로그 생성 및 전송 가능
    • 다른 버킷 혹은 다른 계정으로 전송 가능

실습 - S3 버킷 생성하기

  1. S3 검색 후 버킷 만들기
  2. 파일 업로드 (혹은 드래그 앤 드롭)

실습 - EC2 실행 시 S3 파일 불러오기

  1. S3 권한을 가진 IAM 역할 생성
  2. EC2 인스턴스 생성 시 IAM 설정 및 UserData 설정

    #!/bin/bashsudo -sdnf install httpd -yservice httpd startchkconfig httpd onaws s3 cp s3://[버킷명]/index.html /var/www/html --region ap-northeast-2

S3 스토리지 클래스

S3 스토리지 클래스

  • S3는 다양한 스토리지 클래스를 제공
  • 클래스 별로 저장의 목적, 예산에 따라 다른 저장 방법을 적용
  • 총 9가지 클래스

S3 스토리지 클래스 종류

S3 스탠다드

  • 99.99% 가용성
  • 99.999999999% 내구성
  • 최소 3개 이상의 가용영역에 분산 보관
  • 최소 보관 기간 없음, 최소 보관 용량 없음

S3 스탠다드 IA(Infrequently Accessed)

  • 자주 사용되지 않는 데이터를 저렴한 가격에 보관
  • 최소 3개 이상의 가용영역에 분산 보관
  • 최소 저장 용량: 128kb
  • 최소 저장 기간: 30일
  • 데이터 요청 비용 발생: 데이터를 불러올 때마다 비용 지불(per GB)
  • 사용 사례: 자주 사용하지 않는 파일 중 중요한 파일

S3 One Zone-IA

  • 자주 사용되지 않고, 중요하지 않은 데이터를 저렴한 가격에 보관
  • 단 한 개의 가용영역에만 보관
  • 최소 저장 용량: 128kb
  • 최소 저장 기간: 30일
  • 데이터 요청 비용 발생: 데이터를 불러올 때마다 비용을 더 많이 지불(per GB)
  • 사용 사례: 자주 사용하지 않으며 쉽게 복구할 수 있는 파일

S3 Express One Zone

  • 매우 빠른 퍼포먼스를 위해서 하나의 가용영역에 위치한 특별한 저장소에 저장
    • millisecond 단위의 응답속도(약 10배 빠름)
    • standard와 비교해 50% 저렴한 요청 비용
  • Amazon S3 Directory Bucket에 저장
  • 컴퓨팅 리소스와 스토리지 리소스를 같은 공간에 위치시켜 더 빠른 액세스 가능
  • 몇몇 리전만 사용 가능

S3 Glacier Instant Retrieval

  • 아카이브용 저장소
  • 최소 저장 용량: 128kb
  • 최소 저장 기간: 90일
  • 바로 액세스 가능
  • 사용 사례: 의료 이미지 혹은 뉴스 아카이브 등

S3 Glacier Flexible Retrieval

  • 아카이브용 저장소
  • 최소 저장 용량: 40kb
  • 최소 저장 기간: 90일
  • 분~시간 단위 이후 액세스 가능
  • 사용 사례: 장애 복구용 데이터, 백업 데이터 등

S3 Glacier Deep Archive

  • 아카이브용 저장소
  • 최소 저장 용량: 40kb
  • 최소 저장 기간: 90일
  • 데이터를 가져오는데 12~48시간 소요
  • 사용 사례: 오래된 로그 저장, 사용할 일이 거의 없지만 법적으로 보관해야 하는 서류 등

S3 Intelligent-Tiering

  • 머신 러닝을 사용해 자동으로 클래스 변경
  • 퍼포먼스 손해/오버헤드 없이 요금 최적화

S3 on Outposts

  • 온프레미스 환경에 S3 제공
  • 내구성을 확보한 상태로 파일을 저장하도록 설계
  • IAM, S3 SDK 등 사용가능

S3의 권한

S3의 권한 관리 방법

  • IAM 정책: 자격 증명(IAM 사용자, 그룹, 역할) 등에 부여하는 정책으로 S3에 대한 권한 부여/거부
  • 버킷 정책: 버킷 자체에 특정 주체가 행사할 수 있는 권한 부여/거부
    • 주체: IAM 사용자, 역할 등
  • ACL
    • 버킷 혹은 객체 단위로 읽기, 쓰기의 권한을 부여
    • S3에서 설정을 통해 ACL을 활성화 시킨 후에 적용 가능
    • 파일 업로드 시 설정 가능
    • 간단하고 단순한 권한 관리만 가능
    • 점점 사용하지 않는 추세. 대부분의 경우 버킷 정책 / IAM 정책으로 대체 가능

S3의 계층 구조

  • AWS 콘솔에서는 S3의 디렉토리(폴더)를 생성 가능하고 확인 가능
  • S3 내부적으로는 계층 구조가 존재하지 않음
    • 키 이름에 포함된 "/"로 계층 구조를 표현

S3 버킷 정책

  • 버킷 단위로 부여되는 리소스 기반 정책
  • 해당 버킷의 데이터에 "언제 어디서 누가 어떻게 무엇을"할 수 있는지 정의 가능
    • 리소스의 계층 구조에 따라 권한 조절 가능
      • 예: "resource": "arn:aws:s3:::my-bucket/images/*" -> my-bucket의 images/로 시작하는 모든 객체에 대해서
    • 다른 계정에 엔티티에 대해 권한 설정 가능
    • 익명 사용자에 대한 권한 설정 가능

S3 버킷 관리 방법의 선택

  • IAM 정책
    • 같은 계정의 IAM 엔티티의 S3 권한을 관리할 때
    • S3 이외의 다른 AWS 서비스와 같이 권한을 관리할 때
  • 버킷 정책
    • 익명 사용자 혹은 다른 계정의 엔티티의 S3 이용 권한을 관리할 때
    • S3만의 권한을 관리할 때

실습 - S3 권한 부여: IAM 정책

  1. 사용자 그룹 생성
  2. 권한 추가

    ※ 정책 연결: AWS에서 지정한 권한 설정
    ※ 인라인 정책 생성: 임의로 정책 생성 가능
  3. 사용자를 생성하여 생성한 그룹에 추가

실습 - S3 권한 부여: 버킷 정책

  1. S3 버킷 생성
  2. 버킷 권한 탭에서 버킷 정책 설정
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListSpecificBucket",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::demo-my-home-bucket-342849269408",
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "",
                        "home/",
                        "home/${aws:username}/*"
                    ]
                }
            }
        },
        {
            "Sid": "FullAccessToUserHome",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::demo-my-home-bucket-342849269408/home/${aws:username}",
                "arn:aws:s3:::demo-my-home-bucket-342849269408/home/${aws:username}/*"
            ]
        }
    ]
}

S3 업로드/다운로드

S3의 업로드/다운로드 방법

  • AWS Web Console
  • AWS SDK/AWS CLI
  • 일반 URL(버킷/파일이 공개되어 있을 경우, 다운로드만 가능)
  • 미리 서명된 URL(Presigned URL)

※ 수동 파일 공유의 문제점

  • IAM 유저의 개수 제한
  • 관리가 어려움
  • 만료 기간 설정이 어려움
  • 유출 시 모두에게 다시 공유 필요
  • 세세한 권한 조절 불가능

미리 서명된 URL(Presigned URL)

  • S3의 파일을 안전하게 공유하고 싶을 때 사용
  • 생성자가 가진 권한으로 파일에 접근 가능한 임시 URL을 생성
    • URL의 만료 기간 지정 가능
    • Method(Get, Put 등) 설정 가능
  • URL의 권한은 생성자가 가진 권한 중 일부 혹은 전체 사용
    • 예: 생성자가 Get 권한이 없다면 URL로 GET 불가능

Amazon S3 멀티파트 업로드

  • 하나의 파일을 여러 파트로 나누어서 업로드 하는 방식
  • 장점
    • 빠른 속도
    • 파일 업로드의 컨트롤 보장(예: 중간부터 업로드하기)
  • 단점
    • 업로드 로직이 단일 파트보다 조금 더 복잡
    • 업로드에서 발생하는 파일들의 관리 포인트 증가

※ AWS에서는 100mb 이상의 파일을 업로드 할 경우 멀티파트 업로드를 권장

* 주의사항

  • 멀티파트 업로드가 중지되거나(명시적 중지가 아닌 에러 등), 업로드 이후 합치지 않을 경우 업로드 된 파트 파일은 S3에 잔류 => 비용 발생!
    • S3 Storage Lens 등의 서비스로 현재 완료되지 않은 멀티파트 업로드 파일 확인 가능
    • S3 생명주기 설정을 통해 일정 시간 이후 삭제 가능

S3 버전관리 및 객체 잠금

S3 버전 관리

S3 버전 관리

  • 객체의 생성, 업데이트, 삭제의 모든 단계를 저장
    • 삭제 시에는 실제 객체를 삭제하는 대신 마커를 추가
  • 버킷 단위로 활성화 필요(기본적으로 비활성화)
  • 수명 주기 관리와 연동 가능
  • MFA 인증 후 삭제 기능을 통해 보안 강화 가능

S3 버전 관리 유의사항

  • 중지 가능. 단, 비활성화 불가능
    • 한번 버전 관리를 시작하면 비활성화 불가능(버킷 삭제 후 재생성으로 해결은 가능)
  • 모든 버전에 대해 비용 발생
    • 10gb 객체의 버전이 5개 있다면, 총 50gb에 대해 비용 발생

S3 객체 잠금

S3 객체 잠금

  • Write Once, Read Many(WORM) 모델을 활용하여 객체를 저장
  • 고정된 시간, 혹은 무기한으로 객체의 삭제/덮어쓰기 방지 가능
  • 규정 준수 및 객체의 보호를 위해 사용
  • 버전의 활성화 필요

S3 객체 잠금의 종류

  • 보관보드(Rentention Mode): 일정 기간 동안 수정 방지
    • 규정 준수 모드: 누구도 잠금 설정 변경, 객체 삭제 불가능
    • 거버넌스 모드: 특별한 권한 없이 삭제 혹은 잠금 설정 변경 불가능
      • 객체 삭제 방지 혹은 규정에 따라 보관하기 위해 사용
      • 규정 준수 모드의 테스트
  • 법적 보존(Legal Hold)
    • Hold를 객체에 부여하고, Hold가 존재하는 한 객체 삭제, 수정 불가능
    • 제한 기간이 없음

※ 버전 관리 활성화

※ 버전 표시

S3 수명주기

수명주기

  • 일정 기간 이후 오브젝트의 상태 변경 가능
    • 전환 작업(Transition actions): 다른 스토리지 티어로 옮기기
      • 예: 30일 후 아카이브(Glacier)로 보내기
      • 예: 50일 후 객체를 IA로 보내기
    • 만료 작업(Expiration actions): 오브젝트 삭제
  • 수명 주기 설정 시 소급 적용
    • 예: 30일 이후 만료 작업을 설정했다면 기존 버킷의 모든 30일 이상된 오브젝트도 같이 적용
  • 필터 및 날짜 적용 가능
    • 예: image/thumbnail/production 디렉토리의 5mb 이상 파일을 30일 뒤에 모두 아카이브
    • 예: 2024-05-30 부터 /image/dev 디렉토리의 1mb 이상 이미지를 모두 삭제

전환 작업

  • 일정 기간 이후 오브젝트의 스토리지 클래스 변경
  • Waterfall 모델
  • 제약 사항 있음
    • 예: 다른 클래스 -> Standard로 변경 불가능
    • 예: 128KB 미만 파일의 경우 Standard/IA -> S3-Intelligent or Glacier Instant Retieval로 변경 불가능

만료 작업

  • 버저닝에 따라 다른 방식
    • 버저닝이 없을 때: async로 영구 삭제
    • 버저닝이 있을 때: delete marker가 현재 버전이 아니라면 marker 추가 후 현재 버전으로 격상
      ※ 현재 버전이 delete marker라면 동작하지 않음
  • 삭제 날짜에 바로 삭제되지 않고 일정 딜레이 발생 가능
    • 그 동안은 비용 없음
    • HeadObject/GetObject API로 삭제 예정 확인 가능

조건

  • 객체의 수명
    • 전환 혹은 생성부터 일정 기간 경과 후 효과 발생
  • 날짜
    • 특정 날짜부터 효과 발생. 단, 콘솔로 설정 불가능(확인만 가능)
    • 예: 5월 30일부터 모든 오브젝트 삭제
  • 필터
    • 두 조건 모두 필터링의 조건을 만족해야 발동
    • 특정 조건으로 필터링 가능
      • prefix
        - 예: /log, /log/production, /image/thumbnails
      • tag
        - 특정 태그가 있을 때
        - And로 연결 가능
      • 오브젝트 사이즈
    • 필터링 조건 조합 가능

※ S3 수명주기 설정

S3 암호화

S3의 객체 암호화

  • S3의 데이터의 암호화는 3가지 단계로 구성

On Transit

  • SSL/TLS(HTTPs)

At Rest(Server Side)

  • SSE-S3: S3에서 알아서 암호화(Default)

  • SSE-KMS: KMS 서비스를 이용해 암호화

  • SSE-C: 클라이언트에서 제공한 암호화 키를 통해 암호화

  • DSSE-KMS: KMS를 활용해서 Dual Layer(2계층) 암호화를 적용하는 암호화

Client Side

  • 클라이언트가 직접 암호화

※ 암호화 시 데이터의 복제가 불가능한 경우 발생

S3 정적 호스팅

Amazon S3 Static Hosting

  • S3를 사용해서 정적(Static) 웹 컨텐츠를 호스팅하는 기능
  • 별도의 서버 없이 웹사이트 호스팅 가능
  • 사용 사례: 대규모 접속이 예상되는 사전 예약 페이지, 홍보 페이지, 회사 웹사이트 등
  • 장점
    - 고가용성/장애 내구성을 확보
    • Serverless
      • 즉, 사용한 만큼만 비용을 지불
      • 배포와 수정이 쉬움
  • 자체적으로 도메인 주소 변경, HTTPs 불가능. 단, Route53/CloudFront 등과 연동하여 주소 변경 및 HTTPs 구현 가능

실습 - S3 정적 호스팅

  1. 버킷 생성 시 퍼블릭 액세스 차단 해제
  2. 정책 설정(불특정 다수가 접근 가능한 정책)
  3. 정적 웹사이트 호스팅 활성화

S3 기타기능

Amazon S3 액세스 로깅

  • Amazon S3의 버킷을 정해 활동 로그를 다른 S3 버킷에 저장하는 기능
    • 지정한 버킷에 로그 파일 저장
    • 반드시 기록 대상 버킷과 로그 저장 버킷의 분리 필요 -> 무한 파일 생성 방지
  • 보안 감사 및 분석 목적으로 활용

이벤트 호출

  • 객체의 생성/삭제/변경 이벤트 발생 -> 다른 서비스 호출
    • 예: 파일 업로드 시 람다를 호출해 파일 무결성 검사
  • SNS, SQS, Lambda 호출 가능

S3 기타기능

  • 복제(Replication): 지정 S3 버킷의 변경 내역을 다른 버킷으로 비동기로 복제하는 기능
    • 다른 리전, 다른 계정의 버킷으로도 복제 가능
    • Delete Marker 복제 가능
  • Transfer Acceleration: CloudFront를 통해 다운로드를 최적화시키는 서비스
  • Requester Pay: 버킷의 소유자 대신 요청자가 요청 및 다운로드 비용을 부담하는 모드
    • 주요 사용 사례: 기업 간 데이터 공유, 리서치 데이터 공유 등

실습 - 이벤트 호출을 통한 썸네일 이미지 만들기

  1. IAM 역할 생성
  2. 람다 함수 생성

    ※ 람다 함수 생성 시 생성한 IAM 역할 등록
  3. S3 이벤트 알림 생성


    ※ 무한 루프 방지를 위해 접두사 설정 필수!

S3 활용 - Amazon Athena 맛보기

Amazon Athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스입니다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다.

Amazon Athena

  • 인터렉티브 쿼리를 통해 S3의 데이터를 조회할 수 있는 서비스
    • S3를 SQL 기반의 언어로 조회
  • 별도의 프로비저닝 혹은 서버 없이 동작 = Serverless
  • 사용 사례
    • 여러 로그 파일이 저장된 S3에서 필요한 데이터를 조회
    • 정형화된 메타데이터 혹은 저장 데이터를 조회
    • 이벤트 데이터에서 필요한 정보를 추출(A/B 테스트) 등
  • 주로 AWS Glue 서비스로 데이터 스키마 생성

AWS Glue는 완전 관리형 추출, 변환 및 로드(ETL: extract, transform, and load) 서비스로 효율적인 비용으로 간단하게 여러 데이터 스토어 및 데이터 스트림 간에 원하는 데이터를 분류, 정리, 보강, 이동합니다.

로그 수집/분석 아키텍처

실습 - Athena를 활용한 로그 분석

  1. S3 로그 버킷 생성 및 로그 업로드
  2. AWS Glue Crawler를 사용해 S3 버킷에 저장된 로그의 스키마 생성

    a. Add data source 시 로그 버킷 선택

    b. IAM 역할 생성

    c. 데이터베이스 선택
  3. Athena 쿼리 편집기 탐색
  4. 쿼리 결과 및 암호화 설정


    ※ S3 로그 버킷과 다른 S3 쿼리 result 버킷
  5. Athena 쿼리 편집기에서 쿼리 입력

참고

https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard

0개의 댓글