There are 4 methods of encrypting objects in S3

  • SS3-S3 : encrypts S3 objects usung keys handled & managed by AWS
  • SSE-KMS : leverage AWS key Management Service to manage encryption keys
  • SSE-C : when you want to manage your own encryption keys
  • Client Side Encryption

It's important to understand which ones are adapted to which situation for the exam.

S3에 객체를 업로드 할 경우, 객체들은 AWS 내의 서버가 되므로 객체로 접근할 때 보호하려 할 것이다.

누군가가 Amazon 서버에 들어오거나, 회사에서 설정한 보안 기준을 준수하기 등이 예시이다.

SSE-S3는 AWS가 다루고 관리하는 키를 사용해 S3 객체를 암호화하는 방법

SSE-KMS는 AWS 키 관리 서비스를 사용해 암호화 키를 관리하는 방법

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

클라이언트 측 암호화가 있다.

특정 상황에서 어떤 방법을 적용해야 할지 아는 것이 중요하다.


SSE-S3

  • SSE-S3 : encyption using keys handled & managed by Amazon S3
  • Object is encrypted server side
  • AES-256 encryption type
  • Must ste header : "X-amz-server-side-encryption":'AES256"

Amazon S3에서 처리하고 관리하는 키를 암호화에 사용하는 방식이다.

객체는 서버 측에서 암호화 된다.

암호화 유형은 AES-256 알고리즘이다.

"X-amz-server-side-encryption":'AES256" 헤더가 설정된다.


SSE-KMS

SSE-KMS : encryption using keys handled & managed by KMS

KMS Advantages : user control + audit trail

Object is encrypted server side

Must ser header : "x-amz-server-side-encryption": "aws:kms"

KMS는 키 관리 서비스를 의미하며 암호화 서비스들 중 하나이다.

  • 암호화 키는 KMS 서비스에서 처리 및 관리한다.
  • SSE-S3 대신 KMS를 사용하는 이유가 무엇일까?
    • 누가 어떤 키에 접근할 수 있을지 제어 가능 + 감사 추적을 할 수 있다.

  • 객체는 서버 측에서 암호화 된다.
  • 헤더는 "x-amz-server-side-encryption": "aws:kms" 로 지정해야 한다

원리는 SSE-S3와 동일하며 키만 다르다. KMS Customer Master Key(미리 지정해둔) 키를 사용한다.


SSE-C

SSE-C : server-side encryption using data keys fully managed by the customer outside of AWS

-Amazon S3 does not store the encryption key you provide

-HTTPS must be used

-Encryption key must provieded in HTTP headers, for every HTTP request made

SSE-C는 서버측 암호화 방식, AWS가 외부에서 customer가 관리하는 키를 사용한다.

  • S3는 고객이 제공한 암호화 키를 저장하지 않는다. (사용 후 키를 폐기한다.)
  • 데이터를 AWS로 전송할 때는 HTTPS를 사용해여 한다. (전송 중 암호화)
  • 암호화 키가 HTTP 헤더에 제공되어야 함. 모든 HTTP 요청마다 매번 제공되어야 함. (사용 후 폐기되어서)

클라이언트 측이 데이터 키를 제공해야 해서 관리하는 것이 더 많아짐.


Client Side Encryption

Client library such as th Amazon S3 Encryption Client

Clients must encrypt data themselves before sending to S3

Clinets must decrypt data themselves when retrieving from S3

Customer fully manages the keys and encryption cycle

  • S3에 객체를 업로드 하기 전, 클라이언트가 객체를 암호화를 한다.
  • 클라이언트 라이브러리를 사용할 수 있는데 Amazon S3 Encryption Client 등으로 클라이언트 측 암호화를 수행할 수 있다.
  • 클라이언트는 데이터를 S3에 보내기 전에 암호화 해야 한다.
  • 또한 데이터를 해독할 채임도 클라이언트의 책임이다.
  • 클라이언트 측 암호화에서는 키와 암호화 cycle 전체를 클라이언트가 전부 관리해야 한다.


Encryption in transit (SSL/TLS)

Amazon S3 exposes:

HTTP endpoint : non encrypted

HTTPS endpoint : encryption in flight

You're free to use the endpoint you want, but HTTPS is recommended

Most clients would use the HTTPS endpoint by default

HTTPS is mandatory for SSE-C

Encryption in flight is also called SSL / TLS

  • 전송 중 암호화
  • SSL 및 TLS 연결이 해당된다.
  • S3가 이 서비스를 주도한다.
    • 암호화되지 않은 HTTP 엔드포인트를 노출
    • 암호화된 HTTPS 엔드포인트를 노출해 전송 중 암호화 서비스를 제공한다.

이때 SSL과 TLS 인증서의 도움을 받게 된다.

  • 사용자는 원하는 엔드포인트를 사용해도 된다. 하지만 대부분 사용자들은 HTTPS를 기본적으로 사용한다.
  • SSE-C 서버 측 암호화를 사용해 클라이언트가 키를 제공하는 경우에는 HTTPS 사용이 의무이다.
  • 전송 중 암호화는 SSL/TLS라고도 불린다.

<AI스쿨 리팩토링 과정>

  • You can version your files in Amazon S3

S3에서 파일을 버전 관리할 수 있다.

  • It is enabled at the bucket level 파일을 버저닝하려면, 버킷 레벨이 활성화 되어야 한다.

  • Same key overwrite will increment the 'version' 1, 2, 3 . . .

동일한 key로 파일 버전을 업로드 할 경우 기존 파일을 덮어쓰지 않고 해당 파일의 새로운 버전이 생성된다.

예를 들면 버전1, 버전2, 버전3이라고 생각하면 된다.

  • It is best pratice to version your bukets
    • protect against unintended deletes (ability to restore a version)
    • Easy roll back to pervious version

파일 버전을 유지하는 것이 가장 좋은 방법이다.

원치 않은 삭제로부터 보호받을 수 있고, 손쉽게 필요할 때 이전 버전으로 되돌릴 수 있다.

Notes:

-Any file that is not versioned prior to enabling versioning will have version 'null'

-Suspending versioning does not delete the previous versions

참고사항:

Versioning 활성화하기 전에 관리되지 않은 파일은 null버전이 된다.

버킷에서 Versioning을 중단하면 이전 버전을 삭제하는 것이 아니라 이후의 파일이 버전을 할당받지 못하도록 한다.

S3 Section

-Amazon S3 is one of the main building blocks of AWS

AWS에서 가장 중요한 구성 요소 중 하나이다.

-it's advertised as "infinitely scaling" storage 무한히 확장 가능한 스토리지로 광고되고 있다.

크기를 사전에 프로비저닝 힐 필요가 없음

-Many websites use Amazon S3 as as backbone 많은 웹사이트가 S3를 중추로 사용하고 있다.

S3 - Buckets

-S3 allows people to store objects(files) in 'buckets' (directories) 객체를 저장하게 해주는 시스템이자 서비스.

-Buckets must have a <globally unique name> 반드시 고유한 이름을 가져야 함

-Buckets are defined at the region level 버킷은 리전 레벨에서 정의됨 (S3는 전역 서비스이지만 버킷은 리전 리소스)

Naming convention 이름 규칙

-No uppercase 대문자 X

-No underscore 언더바 금지

-3-63 characters long 3~63자

-Not an IP IP주소 금지

-Must start with lowercase letter or number 소문자나 숫자로 시작할 것.

-Objects (files) have a key 객체는 (파일로) 키를 가진다.

-The key is the FULL path: 파일의 전체 경로이다.

-만약 버킷 이름이 my-bucket이며, 객체 이름이 myfile.txt라고 할 경우 s3://my-bucket/myfile.txt 키는 myfile.txt이다.

-만약 S3 버킷 내에 폴더 구조가 있다면 키는 전체 경로이다.

ex)s3://my-bucket/myFolder/anotherFolder/myfile.txt my폴더부터가 전체 경로 키이다.

-The key is composed of prefix + object name 키는 2개로 구성되며 접두어와 객체 이름이다.

-s3://my-bucket/myFolder/anotherFolder/myfile.txt myFolder~anotherFolder는 접두어, myfile.txt 는 객체이름이다.

-There's no concept of "directories" within buckets (although the UI will trick you to think otherwise)

버킷 내에는 디렉터리 개넘이 없다. UI가 디렉터리가 있다고 우릴 헷갈리게 할 것이다.

-Just keys with very long names that contain slashes / S3에서 가질 수 있는 것은 /를 가진 매우 긴 이름의 키뿐이다.

-Object values are the content of the body:

-Max object Size is 5TB (5000GB) 객체의 최대 크기는 5TB

-if uploading more than 5GB, must use "multi-part upload' 한 번에 5GB 이상 업로드할 수 없다.

즉 5GB 이상 객체를 업로드 할 경우 5GB미만으로 나누어서 각각 업로드 해야 한다. 이를 멀티파트 업로드라고 한다.

-Metadata (list of text key / value pairs - system of user metadata)

S3의 각 객체는 키 페어의 리스트인 메타데이터가 있다. 이는 시스템이나 사용자 메타데이터에서 사용된다.

객체에 정보와 태그를 추가할 때 사용한다.

-Tags (Unicode key / value pair - up to 10) - useful for security / lifecycle

객체나 수명 주기 정책 관련 보안이 없는 경우 유용한 키 값 페어와 태그를 가질 수 있다.

-Version ID (if versioning is enabled) S3 객체에 버전 ID가 있다.

+ Recent posts