[AWS]S3 (나도 이제 버켓을 가졌어요!)

차보경·2022년 11월 6일
1

AWS

목록 보기
4/13
post-thumbnail

S3 (Simple Storage Service)

  • 안전하고 가변적인 Object(운영체제는 사용X) 저장공간을 제공 (ex: Google Cloud)
    AWS에서 모든 파일에 안전장치를 걸어 외부에서 접근을 막아 안심하고 쓸 수 있음.
    알아서 저장공간을 조절함
  • 편리한 UI 인터페이스를 통해 어디서나 쉽게 데이터를 저장하고 불러올 수 있음
  • 파일 크기는 0KB부터 5TB까지 지원
  • 저장공간 무제한(가변적이니 직접 파티션/디스크 용량 설정X)
  • Bucket이라는 이름을 사용함 (디렉토리와 유사함)
  • Bucket은 보편적인 namespace를 사용함 (버켓이름은 고유해야한다. IAM처럼 S3도 지역이 글로벌임 -> 리전과 상관없이 고유해야함)

S3 Object 구성요소

  • Key : file 명
  • Value : file에 대한 data
  • Version ID : S3의 고유특징. 같은 파일이라도 다른 버전으로 올릴 수 있도록. (이전으로 복원 가능)
  • Metadata : data의 data로 data에대한 정보가 들어있음(누가 올리고 언제올리고 ...)
  • CORS (Cross Origin Resource Sharing) : 한 버킷의 파일을 다른 버킷에서 접근 할 수 있도록 함(지역 상관 X)

S3 Data Consistency Model

  1. Read after Write Consistency (PUT)
  • S3 버켓에 데이터 넣을 때 PUT을 사용함. API처럼. 파일이 S3버켓에 올라가면 그 파일을 즉시 사용할 수 있다는 것. 딜레이가 없음
  1. Eventual Consistency (UPDATE, DELETE)
  • 버켓에 올라간 데이터를 처리할 시 그 결과가 바로 나타나지 않음. 외부에선 바로 나타나는 것 같지만 S3 내부에선 그렇지 않음!

S3는 단순 HDD가 아니라 다양한 스토리지 시스템이 있음

S3 스토리지

  • 일반 S3
  • S3 - IA (Infrequent Access)
  • S3 - One Zone IA
  • Glacier
  • Intelligent Tiering
  1. 일반 S3
  • 가장 보편적으로 사용되는 스토리지 타입
  • 높은 내구성, 가용성 (Durability, Availability)
    - 내구성 : 손상없이 잘 복원되는지
    • 가용성 : 데이터 접근이 용이한지
  1. S3 - IA (Infrequent Access)
  • 자주 접근되지는 않으나 접근시 빠른 접근이 요구되는 파일이
    많을시 유용 (자주쓰는거엔 적합하지 X)
  • 일반 S3에 비해 비용은 저렴하나 접근시 추가 비용 발생
  • 멀티 AZ를 통한 데이터 저장
  1. S3 - One Zone IA
  • 단일 AZ를 통한 데이터 저장 (서버다운되면 접근 X)
  • 단일 AZ에 의한 데이터 접근 제한 (조금 낮은 가용성)
  • 데이터 접근시 S3 - IA보다 20% 비용 저렴 (비용과 접근성을 잘 생각해봐야함)
  1. Glacier
  • 거의 접근하지 않을 데이터 저장 시 유용 (몇년에 1-2번 접근할까말까)
  • 매우 저렴한 비용
  • 데이터 접근시 대략 4-5시간 소요(빙하에 저장한거잖오 녹여야해ㅋㅋ)
  1. Intelligent Tiering
  • 데이터 접근 주기가 불규칙할때 매우 유용
  • 2가지 티어 존재(분석해서 부여함)
    • Frequent Tier
    • Infrequent Tier(한달이내에 접근 없으면 IT로 바꿈)
  • 데이터 접근주기에 따라 두가지 티어중 하나로 선택됨
  • Frequent Tier가 비용이 약간 더 비쌈
  • 최고의 비용 절감 효율을 누릴 수 있음 (1,000개에 0.25$)

S3 요금

➢ GB당 (GB당 0.023$ 정도?)
➢ PUT, GET, COPY 요청 횟수당 (다른 버킷으로 얼마나 보내는지, 얼마나 자주 데이터를 쓰는지)
➢ 데이터 다운로드시 / 다른 리소스로 전송시
➢ Metadata (object tag)


S3 - 버켓 생성시 알아야 할 것들

생성 후 보안을 위해 막아두고 있는게 있음

S3 사용 용례

  • 파일 저장소 (로그, 다양한 파일들(이미지, 비디오, 압축파일 등))
    어떤 파일이 S3에 들어오면 다른 서비스와 연동시키는 작업도 가능함
  • 웹사이트 호스팅
    thml, css, js 파일을 올려서 web을 돌리기 위한 파일을 업로드 한 후, S3를 실제 도메인 DNS로 사용할 수 있음 (Route 53을 이용해서 S3를 도메인으로 할 수 있음)
  • CORS(Cross Origin Resource Sharing)
    웹사이트 호스팅과 비슷함 S3도 특정 리전이 있음. 버켓A(웹사이트 호스팅),B(데이터 업로드)가 다른 리전에 있음 -> 버켓 A에서 B에 있는 데이터 접근을 하려면 리전이 달라서 접근 불가 -> 이걸 해결하는게 CORS

최초 S3 버켓 생성시 -> 비공개(PRIVATE)

  1. 버켓 정책 변경 (Bucket Policy)
    JSON으로 되어있음
  2. 접근 제어 리스트 변경 (Access Control List)
    파일 하나하나에 다른 접근 권한 줌

S3 암호화(Encryption)

  1. 파일 업로드/다운로드시 (AWS에서 관리)
  • SSL(Secure Socket Layer) / TLS(Transport Layer Security)
    - SSL : 주소 앞에 https가 붙어 주소가 안전하다고 알려줌
    • TLS : SSL에서 파생됐으나 업데이트된 보안 시스템
  1. 가만히 있을시
    1) SEE-S3
    : S3버킷에 올라간 파일들은 고유의 키가 있음. SEE-S3는 마스터키가 있어서 일정시간마다 키값을 변경시킴. 마스터키의 키값은 AES-256bit로 구성됨
    2) SSE(Server-Side Encryption)-KMS
    : SEE-S3처럼 AWS에서 일괄 관리. 언제 누가, 어떻게 암호를 풀었는지에대한 기록이 있어 체계적인 관리 가능(SEE-S3는 이기능 없음)
    3) SSE-C
    : 직접 암호키값을 다룰 수 있음 -> 계속 변경시켜줘야함.

S3 암호화 과정

  • 파일을 올리면 PUT 요청이 생성됨
# 파일이름, 버켓이름, 등 metadata 생성
PUT /simon-image.jpg HTTP/1.1    # 파일이름
Host: SimonBucket.s3.<Region>.amazonaws.com # 버켓이름
Date: Thu, 12 Feb 2020 14:26:00 GMT #언제 요청이 생성됐는지
Authorization: authorization string 
Content-Type: text/plain
Content-Length: 82253
x-amz-meta-author: Simon
Expect: 100-continue
[82253 bytes of object data]

x-amz-server-side-encryption-paramerer가 딸려나오는게 중요함
만약 S3에 업로드될때 헤더에 해당 파라미터가 있으면, 암호화를 요청한 것으로 간주해서 암호화 함

Host: SimonBucket.s3.<Region>.amazonaws.com
Date: Thu, 12 Feb 2020 14:26:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-Length: 82253
x-amz-meta-author: Simon
Expect: 100-continue
x-amz-server-side-encryption-parameter: AES-256 ## 이 부분
[82253 bytes of object data]

암호화 알고리즘으로 AES-256걸로 설정했다고 알 수 있음

Q. 암호화가 되지 않은 파일은 올리지 않는 기능은 없나용?

  • 있음! 버켓정책설정에서 조절 가능. 암호화 없으면 Reject 하는거.

실습!

  • S3는 글로벌 서비스라 모든 지역 사용함. -> 리전 선택할 필요 없음

  • 버켓이름 : 지역에 상관없이 유일한 이름!

  • 기타 설정 : 객체 잠금
    WORM(Write-Once-Read-Many) 모델을 사용하여 객체를 저장하면 고정된 시간 동안 또는 무기한으로 객체가 삭제되거나 덮어쓰이지 않도록 할 수 있습니다 (= 원본 파일 그대로 저장하고 싶을 때)

  • 메타데이터 : 나중에 sort할 때 유용하게 쓸 수 있음

이미지 열기

  • URL로도 가능한데, 우선은 거부당함. -> 퍼플릭 접근을 차단했기 때문

  • 파일을 퍼블릭으로 해도 거부당함 -> 버켓 정책에서 변경, 파일의 ACL(액세스 제어 목록)도 변경해주면 URL로도 읽기가 가능해집니당(다른 파일은 읽기X)

  • 버켓의 정책을 변경하기 위해서 정책 편집에 들어가고 JSON형식에 벙찌지 말구 편하게 정책 생성기를 눌러줍니다


    Principal엔 IAM 값을 넣어주고, 밑에 ARN은 바로 위 사진에 있는 버켓 ARN을 넣어주면 JSON값이 만들어지고 이를 정책에 넣어주면 됩니다!
    그리고 이런저런 정책을 추가해주면 되겠죠~?

보안 설정

  • 신규 버켓을 만들 때 서버측 암호화 활성화를 시키면 아까 봤던 SSE-S3, SSE-KMS 등을 선택할 수 있습니다:)
  • 그리고 파일을 올릴때도 암호화 설정을 활성화 시켜주면 파일에 서버암호화가 걸린 것을 확인할 수 있습니다:)!
profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

0개의 댓글