[AWS CDA] S3, Athena

Tag·2022년 7월 25일
0

AWS 자격증

목록 보기
9/24
post-thumbnail
post-custom-banner

기본 지식

  • S3는 리전 리소스이다. 글로벌 콘솔로 설정하지만 리전 선택은 필수라고 보면 된다.
  • 이름은 글로벌적으로 유니크한 이름을 가져야 하고, 소문자 또는 숫자로 시작하며, 대문자를 쓸 수 없고, _를 쓸 수 없다.
  • Key는 패스를 의미한다. 버켓주소/{Key}로 데이터를 가져가며, Keyprefix(folder)/Object-name 으로 구성된다.
  • 한 객체는 5TB까지 저장 가능하지만 한번에 5GB씩 업로드 가능하기 때문에 나눠서 업로드 해야한다.
  • VPC endpoint 사용 가능하다.
  • 100-200ms latency를 가진다.

Version

버저닝이란 각 객체에 버전을 붙여주는데, 같은 이름의 객체가 들어왔으면 거기에 덮어씌워지지만 이전 객체는 이전 버전으로 존재하게 된다. 버저닝은 활성화, 비활성화를 선택할 수 있고, 버저닝이 비활성화에서는 버전이 null로 표기된다.

버저닝이 활성화되어 있을 때는 객체를 삭제해도 딜리트 마커가 생기고, 해당 딜리트 마커를 삭제하면 이전 버전으로 되돌릴 수 있고, 딜리트 마커와 이전 버전들까지 한 번에 삭제해버리면 진짜 삭제된다.

버전 비활성화하면 현재 남아있는 버저닝 파일들은 남아있지만 새로운 파일들이 null로 버저닝이 된다. 반대로 비활성화에서 활성화하면 이전 파일들의 버전은 null이고 새로운 파일들은 버전이 쌓인다.

암호화

상황에 따라 어떤 암호화를 하는지가 중요하다. 디폴트 암호화가 있고 버킷 폴리시에 맞는 객체만 강제해서 암호화하는 방법이 있다.

SSE-S3

AWS가 핸들하는 키로 S3 객체를 암호화한다. 주로 AES-256를 사용하며, "x-amz-server-side-encryption": "AES256" 이런 식으로 설정한다.

SSE-KMS

AWS KMS(키 매니저 서비스)를 통해서 암호화한다. 굳이 S3에서 전용으로 지원하는 암호화 대시 이렇게 쓰는 이유는 무엇이냐고 하면, 암호화에 대한 권한제어와 모니터링을 KMS를 통해 할 수 있기 때문이다.

SSE-C

사용자가 만든 암호화 키를 관리할 때 사용한다. 고객이 암호화 키를 관리하고 해당키는 AWS에서 관리하지 않는다. 객체와 클라이언트 사이드 데이터 키를 서버에 준다. (AWS에서 암호화) 해당 키를 암호화할 때 쓰고 AWS 내에 저장하지 않는다. 키를 전송하므로 전송되는 동안 무조건 암호화되어야한다. (HTTPS 필수)

SSE: Server Side Encryption인 이름 그대로 서버에서 암호화해서 객체를 저장한다.

CSE

S3에 올리기 전에 이미 암호화되어서 올라가는 경우이다.

CSE: Client Side Encryption인 이름 그대로 클라이언트에서 암호화해서 객체를 전달한다.

접근 정책

ACL 객체 레벨, ACL 버킷 레벨로 지정할 수 있고, 명시적인 거부(버킷 정책 리소스 기반)가 없으면서 유저 기반 OR 리소스 기반 액세스가 있어야 S3에 접근할 수 있다. 보통 Json Policy 설정을 통해 설정한다.

  • 유저 기반 - IAM 폴리시를 통해 어떤 API를 쓸것인지 정해준다.
  • 리소스 기반 - S3 버킷에서 보안 주체가 무엇을 할 수 있고, 무엇을 못 하는지 정한다.

S3 웹사이트

정적 웹사이트를 호스팅 할 수 있다. 밑의 둘 중 하나로 URL이 설정된다.

  • <bucket - name>.s3-website.<AWS - region>.amazonaws.com
  • <bucket - name>.s3-website-<AWS - region>.amazonaws.com

사설 url을 사용하고 싶다면, route53에 해당 url을 cname 레코드로 설정해주면 다른 주소로 사용가능하다. property 탭에서 static web site에서 설정할 수 있고, 에러, 인덱스 html 설정이 가능하며, 공개, 비공개 설정이 있어서 공개해주어야 403 페이지가 뜨지 않는다.

S3 Access Logs

로깅 버켓이 생기고, 설정한 S3 버켓에 요청된 것들이 로깅버켓에 쌓이게 된다. 모니터링 중인 버킷을 로깅버킷으로 사용하면 안된다. 로깅이 되면서 해당 로깅이 트리거가 되어 또 로깅되기 때문에 엄청난 비용이 발생하게 된다. 그러므로 어플리케이션버킷과 로깅버킷은 무조건 분리해야 한다.

복제

복제는 IAM 역할에 복제할 권한을 줘야한다. 소급적용이 아닌 새로운 객체만 복제된다. 딜리크 마커를 복제할지 안할지 정할 수 있다. 특정 버전은 복제군에 삭제 못하도록 막기가 가능하다.

연쇄 복제가 불가능하다. 예를 들면, 1번 버켓에 데이터를 넣어서 2번 버켓으로 복제하고 2번 버켓이 복제된 데이터를 가지게 되었으니 그 데이터가 3번 버켓에 복제하게 한다는 것이 불가능하다는 것이다. 1 -> 2 복제하고 나서 2 -> 3으로 복제가 되지않으니 주의해야 한다. 하고싶다면 1 -> 2, 1 -> 3 복제로 해야한다.

CRR

cross region replication라고 하며, 복제할 버킷이 다른 리전에 있는 경우를 뜻한다. 해당 복제를 하는 이유는 규정 준수나 다른 리전으로의 데이터 액세스 지연시간 단축 등이 있다.

SRR

same region replication라고 하며, 복제할 버킷이 같은 리전에 있는 경우를 뜻한다. 여러 버켓의 로깅을 한 버켓에 집중화할 때나, 테스트 계정과 라이브 서버 복제 등이 있다.

pre-signed URLs

서명이 된 URL을 뜻한다. S3 콘솔에서 우리가 데이터를 바로 볼 때, 엄청나게 긴 URL로 접속이 되는데, 해당 URL이 pre-signed URL이다. 서명의 유효시간은 디폴트 1시간이고 설정으로 변경가능하다. 이를 사용할만한 예제는 영화 대여같은 사용자가 몇일간 볼 수 있게끔하는 영화를 대여해주는 시스템에 쓸 수 있다.

스토리지 클래스

S3에는 스토리지 클래스가 존재하고 중간에 변경이 가능한데, 클래스의 단계가 내려가면 윗 단계로 올라오지 못 한다. 범용 클래스는 제일 상단의 윗 단계의 클래스이다.

또한 수면 주기 구성을 통해 자동으로 객체를 다른 클래스로 변경할 수 있다. 예를 들면, 60일 후에는 IA class로 보내고 글래시어로 6개월 후에 보내고 일년 넘으면 삭제해달라고 하는 것이다.

S3 standard

범용으로 쓰인다. 만년에 한 객체가 손실되기 때문에 거의 손실되지 않는다(이건 다른 모든 클래스도 마찬가지다). 기능장애를 한번에 2개 버틸 수 있어서 좋다. 재해 내구성이 있다.

컨텐츠 배포, 게임 어플리케이션, 모바일 어플리케이션, 데이터 분석 등에 쓰인다.

S3 IA(Infrequent Access)

범용 보단 가용성이 낮다. 자주 액세스 하지 않을 데이터들을 넣으면 된다.

S3 One zone IA

단일 가용영역이라 존이 파괴되면 데이터를 잃을 수 있다. 비용이 비교적 저렴하며(20%) SSL 암호화 지원한다. 가용성이 낮다. 사용할만한 예시는 2차 백업, 재생성 가능한 데이터(썸네일) 등이 있다.

S3 Intelligent Tiering

약간의 모니터링 비용가 자동 티어링 비용 발생한다. S3 - S3 IA 를 액세스 빈도를 파악해서 자동으로 옮겨준다. 범용보단 가용성이 약간 낮다.

Glacier

콜드아카이빙을 위한 스토리지 클래스이다. 비용 매우 저렴하다. 각 아카이브당 40TB를 저장할 수 있고, 버킷이 아니라 Vaults라고 불리는 곳에 저장된다. 가용성이 범용과 같다. 최소 보관 기간이 90일이다.

데이터 회수를 하기 위해서는 시간이 필요한데, 3가지 옵션이 있다. 빠르게 받을 수록 비용이 크다.

  • Expedited - 1 ~ 5 분만에 데이터 받음
  • Standard - 3 ~ 5 시간만에 데이터 받음
  • Bulk - 5 ~ 12 시간만에 데이터를 받음

Glacier Deep Archive

Glacier와 비슷하고 좀 더 저렴한 버전이다. 최소 보관기간이 180일 이다.

마찬가지로 데이터 회수를 하기 위해서는 시간이 필요한데, 여긴 2가지 옵션이 있다. 빠르게 받을 수록 비용이 크다.

  • Standard - 12 시간만에 데이터 받음
  • Bulk - 48 시간만에 데이터를 받음

사용 제한

S3 API 제한

  • 각 prefix에 1초당 PUT/COPY/POST/DELETE 3500번 가능
  • 각 prefix에 1초당 GET 5500번 가능
  • 예를 들면, /folder/sub1, /folder/sub2 당 각 제한 적용
  • AWS에 요청해서 늘릴 수 있다.

KMS 제한

  • KMS를 통해서 객체 암호화할 경우 해당 서비스의 제한도 따라야 한다.
  • 각 리전마다 KMS api 리밋이 다르다. 5500, 10000, 30000 등

S3 Transfer Acceleration

업로드와 다운로드를 위한 서비스 - 분할 업로드와 호환 된다.

분할 업로드: Multi-Part Upload. 병렬화를 통해 전송속도를 높이고 대역폭을 넓힌다. 파일을 분할해서 보낸다음 해당 파일을 합친다.

예를 들어, 먼 나라의 어떤 사용자가 파일을 업로드 할 때, 바로 버킷에 가는게 아니라, 엣지 로케이션(해당 나라의)에 전송되어 그 엣지 로케이션이 전용 회선을 통해 빠르게 S3로 업로드 하게 해준다.

데이터를 빠르게 보내는 방법으로 S3 바이트 범위 가져오기(S3 Byte-Range Fetches)라는 게 있는데, 이를 사용해서 모든 데이터를 보내는게 아니라 파일의 헤더정보만 보내는 것이 있고, 하나의 데이터에서 데이터를 짤라서 병렬로 빠르게 보내는 방법(분할 업로드)이 있다.

S3 select & Glacier Select

S3가 필터링해서 모든 데이터를 찾을 필요가 없다. S3에서 CSV 파일을 필터링해서 필터링 된 파일만 보내주는 것이 가능하다. 이것의 기능이 향상된 것이 Athena이다.

Event Notification

어떤 객체가 들어왔는지에 따라 (ex. *.jpg) SNS, SQS, Lambda Function 으로 이벤트를 보낼 수 있다. 버저닝이 활성화 안되면 같은 시간에 같은 객체를 두 번 업로드 할 시, 알림이 한 번 간다. 그래서 모든 객체에 대해서 유효하게 만들고 싶다면 버저닝을 무조건 해야 한다.

Athena

서버리스 쿼리서비스이다. S3 버켓에 있는 데이터를 standard sql을 통해 쿼링해주는 것을 뜻한다. 5TB 스캔 당 5달러가 비용 청구되기 때문에 압축된 파일을 사용할 경우 비용이 감소한다. 로깅 및 분석 서비스를 이용할 경우 athena가 매우 유용하다. AWS quickSight와 연결해서 레포팅 대시보드를 사용할 수 있다.

profile
블로그 변경: https://blog.taewan.link
post-custom-banner

0개의 댓글