참고
암호화(Encryption)
전송 중 암호화(SSL)
NOTE
데이터가 전송되기 전 암호화되고 서버가 데이터를 받으면 복호화하는 방식!
암호화 하고 복호화 하고..
이렇게 해야 신용카드로 결제할 때 신용카드 번호가 노출안됨
•
클라이언트와 서버만이 암호화-복호화 방법을 알고 있음
•
SSL 인증서가 암호화를 해주고 다른 방법은 HTTPS가 있음
•
Amazon 서비스를 다룰 때 HTTPS 엔드포인트가 있다면 전송중 암호화가 됐음을 보장
•
기본적으로 전송 중 암호화를 활성화 하면 중간자의 공격으로 부터 보호받을 수 있음!
•
MITM(중간자 공격)이 발생하지 않도록 한다!
서버 측 저장 데이터 암호화
NOTE
데이터가 서버에 수신된 후 암호화하는 방식!
서버로 들어온다음 암호화/복호화를 거친다!
•
데이터 키로 데이터는 암호화된 형태로 저장된다.
•
암호화와 복호화에 필요한 키는 주로 KMS같은곳에 따로 관리
•
서버 자체가 암호화와 복호화를 관리하고 데이터 키를 통해 접근
클라이언트 측 암호화
NOTE
데이터는 사용자가 암호화하고 서버는 그 데이터를 복호화할수 없고 데이터를 받는 사용자에 의해 복호화가 가능!
클라이언트가 다한다
•
서버는 최선의 방법으로도 데이터를 복호화 할 수 없음
AWS KMS(Key Management Service)
NOTE
AWS 서비스로 암호화하는 방식!
•
KMS는 권한 부여를 위해 IAM과 완전히 통합되고 KMS로 암호화한 데이터에 관한 액세스를 쉽게 제어할 수 있게 함
•
CloudTrail을 통해서 키를 사용하기 위해 호출한 모든 API를 감시할 수 있다는 장점
•
대부분의 AWS 서비스에 KMS를 원활하게 사용할 수 있음
◦
EBS, S3, RDS, SSM 등..
•
KMS 사용을 위해 API 호출이나 CLI, SDK 사용가능
•
실시간으로 인증서를 암호화하고 복호화할 수 있음!
KMS키 유형
NOTE
대칭키와 비대칭키..
•
대칭 키(AES-256)
◦
데이터 암호화와 복호화에 사용되는 단일 암호화 키만 존재
◦
KMS와 통합된 모든 AWS 서비스는 대칭 키를 사용
◦
KMS 대칭키를 사용하려면 KMS API를 호출해야함
•
비대칭 키(RSA & ECC Key pairs)
◦
데이터 암호화에 사용하는 퍼블릭 키와 데이터 복호화에 사용하는 프라이빗 키, 두키의 쌍
◦
암호화 및 복호화 서명 및 확인에 사용
◦
KMS에서 퍼블릭 키를 다운로드 할 수 있지만 프라이빗 키에는 액세스 할 수 없음
◦
프라이빗 키에 액세스하려면 API 호출로만 가능
KMS키 정책
NOTE
•
KMS키에 KMS키 정책이 없다면 누구도 액세스 할 수 없다!
•
기본 KMS키 정책
◦
사용자 지정 KMS키 정책을 제공하지 않으면 생성됨
◦
기본적으로 계정의 모든 사람이 키에 액세스 하도록 허용
•
사용자 지정 KMS키 정책(CMK)
◦
KMS키에 액세스 할 수 있는 사용자 또는 역할을 정의
◦
키를 관리할 수 있는 사람을 정의
◦
KMS키에 관한 교차 계정 액세스 시 유용
KMS 다중지역
NOTE
다른 지역에 원본의 복제본을 준다.
•
다른 AWS리전에서 사용할 수 있는 KMS키 세트로 서로 교체해서 사용할 수 있다.
•
한 리전에서 암호화하고 다른 리전에서 복호화 가능!
•
다음 리전으로 복제할 때 교차 리전 API호출을 실행할 때 데이터를 재 암호화하지 않아도 된다.
•
KMS 다중 지역키는 전역으로 사용할 수 없다, 기본 키가 있고 복제본이 있는 개념
KMS 키 정책
NOTE
•
KMS는 리전에 따라 범위가 지정된다.
•
기본키 KMS 키 정책
◦
특정 KMS 키 정책을 제공하지 않으면 생성된다.
◦
기본적으로 계정의 모든 사람이 키에 액세스하는걸 허용한다.
•
맞춤형 KMS 키 정책
◦
KMS키에 엑세스할 수 있는 사용자 정의
◦
누가 키를 관리하는가에 대한 정의
◦
KMS키의 교차 계정 접근에 유용하다!
S3 복제 암호화 시 고려사항
NOTE
•
한 버킷에서 다른 버킷으로 S3 복제를 활성화하면 암호화되지 않은 개체 및 SSE-S3로 암호화된 객체는 기본적으로 복제된다.
•
SSE-C(고객 제공 키)로 암호화된 개체는 복제되지 않는다.
•
SSE-KMS로 암호화된 객체의 경우 옵션을 활성화 해야 한다.
◦
대상 버킷 내의 객체를 암호화할 KMS키 지정
◦
대상 키에 대한 KMS키 정책 사용
◦
대상 KMS키로 대상 버킷 데이터를 다시 암호화하면 복제가 활성화 된다.
•
다중 리전 AWS KMS키를 사용할 수 있지만 현재는 S3에서 독립키로 취급한다.
SSM Parameter Sotre
NOTE
구성 및 암호를 위한 보안 스토리지!
IAM을 활용해서 비밀정보 얻음
•
구성을 암호화할지 선택할 수 있어서 KMS 서비스를 이용해 암호를 만들 수 있음
•
서버리스 서비스이며 확장성과 내구성이 뛰어나며 SDK 사용이 용이
•
매개변수를 업데이트할 때 구성과 암호의 버전을 추적할 수 있음
•
IAM을 통해 보안이 제공
•
KMS 서비스로 암호화 및 복호화에 사용가능
•
EventBridge로 알람을 받을 수 있다.
실제 자바에서 사용하는 예시
AWS Secrets Manager
NOTE
암호를 저장하는 최신 서비스로 SSM Parameter Store와 다른 서비스!
다중 지역을 지원해 가용성도 높음!
•
AWS Secrets Manager는 X일마다 강제로 암호를 교체하는 기능이 있다! (암호 관리 수월)
◦
교체할 암호를 강제 생성 및 자동화하는 Lambda함수를 정의해야 한다.
•
암호는 KMS 서비스를 통해 암호화된다
•
RDS, Aurora의 통합 또는 암호에 대한 이야기가 나오면 AWS Secret Manager를 생각하자!