# Security & Encryption

**System Manager(SSM) Parameter Store** - 아무거나 다 저장

**Secrets Manager** - 암호 + Key Rotation

**ACM**            - 인증서 발급

**KMS            ** -** **대칭키, 비대칭키 저장소

**CloudHSM** - KMS보다 보안이 많이 강화됨

**Shield**         - DDos 공격 (Standard) + AWS 서비스에 대한 공격 (Advanced)

**WAF**            - SQL Injection 등의 공격 + 주로 CloudFront, ALB, API Gateway에 붙어있음

**GuardDuty** - CloudTrail , VPC Flow Logs, DNS 로그를 자동 분석

**Inspector**    - EC2 자동 보안 평가 서비스 

**Macie         ** - S3에서 개인 정보 보유 여부를 평가하고 보안을 감시함

## 암호화란?

[[암호학] 대칭키 vs 공개키(비대칭키) 암호화 차이](https://liveyourit.tistory.com/183)

### 암호화 사용 방법

- **Encryption in flight (SSL)**

전송할 때 암호화하는 방법. SSL 인증서를 통해 HTTPS 통신을 한다. 이렇게 하면 MITM(man in the middle attack - 중간에서 가로채기) 공격을 방지할 수 있다.

- **Server side encryption at rest**

서버는 파일 받고는 암호화해서 저장한다. 사용자가 파일을 요청할 때는 복호화해서 보내준다.

- **Client side encryption**

내가 파일을 보낼 때부터 암호화하는 방법이다. 서버는 그냥 저장만 할 뿐 어떤 데이터인지는 알지 못한다.

## 1. KMS (Key Management Service)

> 시험에서 `encryption`이란 말이 나오면 이 서비스를 떠올리자

AWS 서비스 전반에 걸쳐 암호화 키를 저장하는 서비스이다. 암호화 키를 제공하진 않고 KMS에 데이터를 던져주면, 암호화된 데이터를 뱉는 느낌?

- 대칭키 (AES-256)과 비대칭키 (RSA & ECC)를 모두 지원한다.

- 키 순환이 가능하며 CloudTrail로 감사를 할 수 있다.

- KMS Key의 종류에는 3가지가 있다.

|  | 생성 주체 | 키 정책 | CloudTrail | 키 순환 (디폴트) |
| --- | --- | --- | --- | --- |
| Customer Managed Keys | 유저 | 수정 가능 | 감사 가능 | 선택 (매 1년) |
| AWS Managed Keys | AWS | 확인만 가능 | 감사 가능 | 필수 (매 3년) |
| AWS Owned Keys | AWS | 확인 불가 | 감사 불가 | 다양 |

- 요청당 최대 4KB 데이터만 암호화 가능하다.

- 유저에게는 Key 정책을, API 요청에는 IAM 정책을 붙여준다.

### 키 정책

S3 버킷 정책과 비슷하다. 하지만 S3 버킷 정책과는 다르게 무조건 키 정책으로 유저의 접근을 제어해야 한다.

- **기본 키 정책** 

- **커스텀 키 정책** - KMS Key에 접근 가능한 유저와 역할을 지정할 수 있다. 여러 계정에 키를 줄 때 유용하다.

### 키 순환

- 자동 - 유저가 관리하는 CMK는 매 1년 마다 자동으로 키를 교체할 수 있다. 이전 키는 저장되어서 옛날 데이터를 복호화할 때 사용하며, CMK ID는 교체해도 동일하다.

- 수동 - 원하는 날마다 바꾸게 할 수도 있다. CMK ID는 달라지지만 alias를 사용해서 일관성을 유지한다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134148_IeFhVvnknnsjErq7sj?q=80&s=1280x180&t=outside&f=webp)

### (SAP) 키 구성 요소 (Key Material)

키를 만들기 위해 중요한 값이다. 키 생성시에만 설정할 수 있고, 3가지 소스에서 가져온다.

- KMS (AWS_KMS)

- External (EXTERNAL) - 유저가 구성 요소를 관리해야 하며, 대칭키만 되며, 수동 키 순환만 된다.

- Custom Key Store (AWS_CLOUDHSM) - 좀 더 높은 보안 수준을 지켜야 할 때 사용한다.

### (SAP) 멀티 리전 키

키 정보를 똑같이 복사해서 사용하고 리전별로 각자 독립적으로 관리된다. Primay와 Replicas로 구별되며, 한 리전에서 암호화하고, 다른 리전에서 복호화하는 식으로 작동한다. 이러면 cross-region API call을 할 필요가 없다.

## 2. SSM Parameter Store

KMS가 키를 저장했다면, SSM Parameter Store는 키를 이용해 다양한 **설정값****과 암호값**(Configuration)을 암호화해 저장하는 완전 관리형 서비스이다.

- IAM 권한을 통해 관리한다.

- `/aws/reference/manager/rsd_id` 처럼 경로를 통해 호출한다.

- CloudFormation과 통합될 수 있으며, CloudWatch Events로 알림을 보낼 수도 있다.

- Standard/Advanced 버전이 있으며, Advanced 버전은 파라미터 정책을 지원한다.

- **파라미터 정책** - TTL(만료 시간)을 지정해 패스워드를 강제로 갱신/삭제할 수 있다.

## 3. Secrets Manager

SSM이 이것저것 다 저장했다면 Secrets Manager는 **암호값**만 저장한다.

- 매 X일 마다 키 교체를 강제한다.

- X일 마다 이벤트가 invoke된다.

- Lambda는 이 invoke를 통해 자동으로 암호를 생성하고 적용할 수 있다.

- Amazon RDS, Redshift, DocumentDB와 통합할 수 있다.

- KMS 키로 암호화된다.

### 4. AWS Certificate Manager (ACM)

SSL/TLS certificate을 생성/관리해준다.

- AWS에서 생성하거나 외부 SSL을 가져올 수 있다. 갱신도 똑같다.

- ELB, CloudFront, API Gateway에서 사용이 가능하다.

- 직접 CA를 발급하고 해당 CA를 쓸 수도 있다.

- 리전별로 다 다른 SSL 인증서를 발급해야 한다. (No cross-region)

## 5. Shield

- AWS Shield Standard - 공짜고, **DDos** 공격을 방어한다.

- AWS Shield Advanced - 유료고, AWS 서비스에 대한 공격을 방어한다.

## 6. CloudHSM

KMS가 AWS에서 관리하는 거라면, CloudHSM은 **하드웨어**를 구매해 회사 자체에서 키를 관리한다. 

- FIPS 140-2 Level 3 (KMS는 Level 2)

- SSL로 AWS와 연결한다. 

- SSE-C 암호화에 적합하다.

## 7. WAF (Web Application Firewall)

ALB, API Gateway와 CloudFront에 붙여 웹 어플리케이션(L7)에 대한 공격을 막는 서비스이다. Web Access Control List를 정의해서 특정 IP를 차단할 수 있다.

- SQL Injection, XSS 공격을 감지해 보호한다.

- 지역별로 차단을 할 수 있다.

- 속도 기반 규칙(특정 IP가 얼마나 자주 접근)으로 DDos 공격을 차단할 수 있다.

## 8. Firewall Manager

AWS Organization의 모든 계정을 규칙을 통해 관리할 수 있다.

- WAF Rule

- AWS Shield Advanced

- EC2 Security Group

- VPC ENI resources

![DDos 공격을 방어하는 간단한 아키텍처](https://upload.cafenono.com/image/slashpageHome/20240820/134149_M9FnqcnGMZkr22W3mg?q=80&s=1280x180&t=outside&f=webp)

## 기타

### 9. GuardDuty

머신 러닝으로 CloudTrail Logs, VPC Flow Logs, DNS Logs 자료들을 분석해 위협을 찾아낸다. 찾아내면 CloudWatch Event로 알릴 수 있다. 암호화폐 공격을 막을 수 있다.

### 10. Inspector

**EC2** 보안 평가를 하는 서비스. 운영체제에 알려진 취약점과 의도되지 않은 네트워크 접근을 분석한다. Inspector Agent가 EC2에 설치되어야 하며 SNS를 통해 알릴 수 있다.

### 11. Macie

머신 러닝을 통해 S3가 **PII**** **(개인식별정보) 같은 민감한 정보를 가지고 있는지 찾는 서비스이다.

## 12. AWS 공유 책임 모델

AWS는 **클라우드의** 보안을 책임지고, 고객은 **클라우드 안의** 보안을 책임진다.

**RDS**로 예를 들어보자.

AWS는 아래를 책임져야 한다.

- SSH 접근 방지

- DB, OS 패치 관리

- 하드웨어 관리

고객은 아래를 책임져야 한다.

- DB의 SG를 설정해 트래픽 차단

- DB 유저 권한 관리

- DB에 외부 접근 차단

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134149_SRrjIflqaGj9QAJdRg?q=80&s=1280x180&t=outside&f=webp)

For the site tree, see the [root Markdown](https://slashpage.com/kaonmir.md).
