S3 암호화

Jihun Kim·2022년 3월 19일
0

aws solutions architect

목록 보기
28/57
post-thumbnail

S3 암호화

  • SSE-S3
    - AWS에서 관리 되는 keys를 이용해 암호화 한다.
  • SSE-KMS
    - KMS를 이용해 암호화 한다.
  • SSE-C
    - 사용자에 의해 정의된 keys를 이용해 암호화 할 수 있다.
  • Client Side Encryption
    - 클라에서 암호화를 해결 한다.


Server-side Encryption

SSE-S3

  • SSE는 Server Side Encryption의 약자이다.
    - 말 그대로 서버에서 암호화를 담당한다.
  • AES-256 알고리즘을 이용해 암호화 한다.
  • 서버에서 암호화 하도록 만들기 위해서는 헤더에 아래 내용을 보내야 한다.
    - “x-amz-server-side-encryption": "AES256" (amz는 amazon의 약자이다)
  • 아래의 과정을 거쳐 암호화 된다.
    1. S3는 요청에 들어온 헤더를 통해 S3에 의해 관리되는 키를 적용해야 한다는 사실을 알게 된다.
    2. 그러면 object는 암호화 되어 저장 된다.
  • S3 managed data key는 S3에 의해 완전히 소유되고 관리 된다.


SSE-KMS

  • keys를 이용해 암호화 하며 KMS에 의해 관리 된다.
  • 사용 이점
    - 사용자가 직접 누가 어떤 키에 엑세스 할 수 있는지 통제할 수 있다.
    - 감사 추적(audit trail)이 가능하다.
  • 객체는 SSE-S3에서와 마찬가지로 서버에서 암호화 된다.
  • 헤더는 다음과 같이 보내야 한다.
    - “x-amz-server-side-encryption": ”aws:kms"


SSE-C

  • AWS 밖에서 정의된 keys를 이용해 서버에서 암호화 하는 것을 말한다.
  • S3는 암호를 저장하지 않으며 사용한 암호는 바로 폐기 된다.
  • 전송 중 암호화 되어야 하기 때문에 HTTPS를 반드시 사용해야 한다.
    - 암호화 key는 사용시 폐기 되기 때문에 매 요청마다 HTTP 헤더에 실어 전송 되어야 한다.
  • 클라에서 데이터 키를 함께 HTTPS 요청을 이용해 보내면 object는 클라가 제공한 데이터 키를 버킷에 저장한다.
    - 그런데 다시 한 번 같은 객체를 꺼내 오려 할 때는 같은 data key를 이용해야 하기 때문에 더 많은 관리가 필요해진다.

SSL/TLS

  • HTTPS를 이용하는 경우 전송 중 암호화를 하게 되는데, 이 때 SSL/TLS 인증서를 이용하게 된다.
  • SSE-C를 이용하는 경우 HTTPS가 필수이다.


Client Side Encryption

  • 객체를 S3에 업로드 하기 전에 클라에서 암호화 한다.
  • 아마존 S3 Encryption Client를 이용해 클라에서 암호화 할 수 있다.
    - 이 때문에 복호화 할 때도 클라에서 알아서 암호 키를 이용해 복호화 해야 한다.
  • 클라가 암호 키와 암호화 과정을 알아서 관리하게 된다.



실습
객체를 업로드 할 때마다 encrytpion 설정을 줄 수도 있지만 번거롭기 때문에
S3 properties > default encryption에서 encryption을 수정하면 된다.

개별적으로 encryption 설정을 줄 때는 아래와 같이 나타난다.

그런데 이 때, client-side-encryption은 나타나지 않는데 그 이유는 클라에서 암호화를 해서 보내는 것이기 때문에 aws s3 자체에서 설정해줄 것은 없기 때문이다.

profile
쿄쿄

0개의 댓글