udamy/AWS Devleoper

8. AWS S3 (AWS Certified Developer Associate)

머혀기 2023. 2. 20. 15:24

1. Buckets (버킷)

 S3는 객체를 저장하게 해주는 시스템이자 서비스이다. 즉 파일이 버킷 또는 디렉터리에 있고 각 버킷은 전역으로 고유한 이름을 갖는다.

이때 주의할 점은 이미사용중인 이름을 사용하여 버킷을 만들 수 없다. 

버킷은 리전 수준에서 정의된다. S3는 전역 서비스이지만 버킷은 리전 리소스이다.

- 이름 규칙은 아래 링크를 통해 확인하면 좋겟다.

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/bucketnamingrules.html

 

버킷 이름 지정 규칙 - Amazon Simple Storage Service

2018년 3월 1일 이전에 미국 동부(버지니아 북부) 리전에서 생성된 버킷의 이름은 최대 255자이며 대문자와 밑줄을 포함할 수 있었습니다. 2018년 3월 1일부터 미국 동부(버지니아 북부)의 새 버킷은

docs.aws.amazon.com

2 Object (객체)

 파일로, 키를 가진다. 이떄 키란 무엇이냐! 파일의 전체 경로이다. 아래 내용을 보면 파란색 글씨가 키이고, 해당 키는 접두와 객체 이름으로 되어있다. 이떄 주황색이 접두어, 녹색이 객체 이름이다.

- S3의 객체의 최대 크기는??? 5TB이다, 하지만 한번에 5GB이상 업로드 할 수 없어 5GB 미만으로 나누어 각각 업로드 해야된다.(멀티파트 업로드)

- 메타데이터란??? 시스템이나 사용자 메타데이터에서 사용된다. 객체에 정보와 태그를 추가할때 사용한다. 수명 주기 정책 관련 보안이 없는 경우 유용한 키 값  페어와 태그를가질 수 있다.

3. Versioning

> 파일 버저닝 하려면 먼저 버킷 레벨에서 활성화가 되어야한다. 즉 같은 키로 파일 버전을 다시 업로드하는 경우에 기존 파일을 덮어쓰지만 새로운 버전을 생성하는 것 버저닝을 활성화 하기전 버전 관리되지 않은 파일은 null 버전이 된다. 그리고 버저닝을 중단하면 이전 버전을 삭제하는 것이 아닌 이후의 파일 버전을 할당받지 못하도록 하는것

 

4. Encryption for object (객체 암호화)

4-1. SSE-S3

 AWS가 처리 및 관리하는 키를 사용해 S3객체를 암호화하는 방법

객체는 서버 측에서 암호화가된다. 그리고 암호화 유형은 AES-256알고리즘을 사용한다.

이렇게 객체를 업로드 하고 SSE-S3 암호화를 설정하렴녀 "x-amz-server-side-encryption":"AE256"로 헤더를 설정해야된다.

x-am는 Amazon이며 x Amazon 서버 측 암호화 AES-256, 이런식으로 헤더 이름을 기억할 수 있다. Amazon S3에서 데이터 키를 전부 소유 및 관리한는 방식이다. 아래 그림도 참고하자!

SSE-S3 관련 자료

4-2. SSE-KMS

 AWS 키 관리 서비스를 사용해 암호화 키를 관리하는 방법이다. 

암호화 키는 KMS 서비스에서 처리 및 관리한다. 이 기능을 사용하는 이유는 누가 어떤 키에 접근할 수 있을지 제어 가능하고 감사 추적을 할 수 있기 때문이다.

각각의 객체는 마찬가지로 서버 측에서 암호화되며 이를 위해서 헤더를 설정할 수 있다. 헤더는 "x-amz-server-side-encryption":"aws:kms"이다. 마찬가지로 HTTPS와 헤더를 사용해 업로드한다. 그리고 S3는 미리 정해둔 KMS 고객 마스터 키를 사용해 암호화가 이루어지고 파일을 SSE-KMS암호화 방식 하에 버킷에 저장된다.

4-3. SSE-C

 사용자가 만든 암호화 키를 관리할 때쓰는 방식

AWS가 외부에서 고객이 관리하는 키를 사용한다. 이경우 S3는 고객이 제공한 암호화 키를 지정하지 않고 암호화를 위해 사용 후 키를 폐기한다. 그리고 데이터를 AWS로 전송할 떄에는 HTTPS를 사용해야한다. AWS로 암호를 전달할 테니 전송되는 동안 암호화가 반드시 필요하다. 모든 HTTP요청마다 암호화키는 ㅁ매번 제공되어야 한다. 클라이언트는 암호화키를 함께 제공해야되기 때문에 오직 HTTPS 패킷으로 통신을해야된다. 이때 데이터 키는 헤더 안에 존재한다. 만약 S3로부터 다시 받으려면 사용된 클라이언트 측 데이터 키를 제공해야만한다. 

4-4. 클라이언트 측 암호화

 S3에 업로드전 클라이언트가 객체를 암호화해 저장하는 방법이다.

만약 전달받은 데이터가 클라이언트 측 암호화(CSE)를 사용해 암호화되었다면 데이터를 해독할 책임도 전적으로 클라이언트에 달려있다. 따라서 올바른 키가 준비되어있어야 해독이 가능하다. 모든 키와 암호화 주가 전체를 클라이언트가 전부 관리하기 떄문이다.

5. Encryption in transit (SSL/TLS) 통신암호화

 S3가 서비스를 주도하며 암호화된 HTTPS 엔드 포인트를 노출해 전송 중 암호화 서비스를 제공한다.

이때 SSL과 TLS 인증서의 도움을 받는다. 기본적으로 HTTPS 엔드 포인트를 ㄷ사용하는데 이를 사요하려면 클라이어트 및 Amazon S3 사이를 이동하는 데이터가 모두 암호화되며, 이것 때문에 전송 중 암호화라는 이름이 붙었다.

6. S3 Security (S3 보안)

6-1. S3 Security 종류

6-1-1. User based (사용자 기반 보안)

 IAM 사용자는 IAM 정책을 가지고 있어 어떤 API 호출이 허용될지 결정해준다. 만약 유적가 IAM 정책을 통해 Amazon S3 버킷으로의 액세스 방법을 승인 받게되면 실행이 가능해진다.

6-1-2. Resource based (리소스 기반 보안)

- Bucket Policies : S3 콘솔에서 설정 가능한 버킷 전반의 규칙이며 S3 버킷에서 보안 주체가 무엇을 할 수 있는지,없는지 결정하는 정책이다. 이를 통해 S3 버킷으로의 교차 계정 액세스가 활성화된다.

- Object Access Control List (ACL), - Bucket Access Control List(ACL)

6-2. Bucket Policies (버킷 정책) 

- JSON기반 정책