2015년 10월 9일 금요일

AWS Security Bootcamp


1. 교육 목적
앱, 운영체제, 방화벽, 데이터등 상위 계층에서 보안 문제가 발생시 책임은 사용자에게 있음을 분명히 함.
대신 AWS 인스턴스나 서비스 자체에 대한 보안성은 아마존에서 보장하고 책임짐.
아마존에서 구현해놓은 이러한 보안 서비스도 어느정도 사용자가 상황에 맞게 설정해야 하므로 이를 위해 교육 함.

2. 내용 요약
1. Preview
2. 데이터 암호화 (KMS), Replication
3. 권한 (IAM)
4. 보안 관련 모니터링

3. 주의 사항
여기서 나오는 서비스들은 AWS의 서비스이며, 계정이라 함은 OS의 계정이 아니라 AWS서비스의 계정임.
따라서 AWS 서비스, 이름에 대해 미리 알고 있어야 함. 예를 들어 AWS에서 쓰는 DNS서버를 Route53이라고 부름.

4. 교육 내용
1. Preview
요약 : 교육내용 전체 Preview, AWS의 서비스와 장점 (서버실을 직접 운영하면 생기는 단점들)

a. NACL(Network Access Control List)
방화벽과 동일한 방식. 사용자가 필요한 룰들을 설정해 놓으면
위에서부터 아래로 내려오면서 Inbound/Outbound 패킷을 Allow/Deny 할지 결정.

b. Security Group
룰 관리를 쉽게 하기 위해 계층적으로 되어있는 보안 규칙 그룹.
여러 보안 그룹들을 만들수 있고, 모든 그룹에 추가해야하는 공통의 룰이 있다면
해당 룰을 상위 그룹으로 설정하면 하위그룹에도 함께 적용됨.

c. VPE (Virtual Private Endpoint)
기존에는 EndPoint 를 위해 방화벽 룰들을 세우고 proxy구성을 해서 설정했어야 했는데
쉽게 그러한 설정을 해줄 수 있도록 새로 나온 서비스.

d. DDoS 대응 방안
대부분의 DDoS 공격이 TCP, UDP등 Layer3, Layer4 공격임.
따라서 AWS (S3, CloudFront, Route53)를 가장 앞단에 두면 대부분의 DDoS공격은 자동으로 막힘.
그리고 VPC를 구성해서 내부 서비스(EC2 ,WAS, DB 등)들을 보호.

2. 데이터 암호화
요약 : 아마존에서 제공하는 KMS서비스에 대한 것.
키는 아마존에서 관리하여 안전하고 사용자는 API호출해서 암호화 하면됨.

a. KMS (Key Management Service)
AWS데이터 암호화 서비스의 핵심임.
사용자는 가장 먼저 API로 MasterKey를 생성해 달라고 요청하고 이름을 지음.
MasterKey 자체는 어떠한 형태로도 제공되지 않으며 어떤 사용자도 알 수 없음.
어떤 데이터를 암호화 하고 싶으면 먼저 API로 DataKey를 요청.
그럼 MasterKey로 암호화된 DataKey와 평문 DataKey가 도착함.

도착한 평문 DataKey는 데이터 암호화하는데 쓰고 반드시 폐기해야함.
도착한 암호화된 DataKey는 저장해 놓고 다음에
API호출하면 KMS에서 MasterKey로 복호화해서 평문 DataKey를 전달해줌

모든 암/복호화를 KMS에서 처리하지 않고, DataKey를 발급받아 로컬에서 처리하라고 하는 이유는
속도 때문임. 대신 4KB 이하 작은 데이터는 KMS에서 직접 암호화 해줌.

a-1. 개인적으로 KMS에 대해 알아낸 점.
Decrypt 시 KMS는 어떤 MasterKey를 갖고 암호화 했는지 알아서 자동으로 복호화 한다고 함.
DataKey, Data 각각을 MasterKey로 암호화 한 결과를 유심히 보았는데 앞부분에 동일한 문자열이 붙음.
복호화시 암호화된 부분 중 앞쪽 문자열을 분석해 어떤 MasterKey로 암호화 되었는지 판별하는것으로 추정.

b. 가격
MasterKey는 한 계정에 최대 2개 생성가능.
키 하나당 $1/달
암,복호화 API 호출 $2/백만번

c. KMS 사용 가능 서비스(자동)
- EBS (Volume 단위 암호화)
- RDS (DB)
- Red Shift

d. Replication (RDS)
저장소 클라이언트는 현재 DB가 암호화 되어있는지 아닌지 알 수 없음.
따라서 일반적인 툴을 사용해서 DB를 Replication 하듯 사용하면 됨. (DB Full load 하고 보낸 다음 변경값 Capture해서 보내고 복사)
다른 Region으로 Replication 할때 PlainText이므로 반드시 VPN, SSL을 사용해서 보내 줘야함.

e. Replication (Red Shift)
Red Shift 자체가 AWS 에서 제공하는 서비스이므로 KMS 암호화된 상태로 보냄
다른 Region으로 Replication 될 때 암호화 된 snapshot이 전송됨.
MasterKey가 Region에 종속적이므로, 서로 다른 Region이면 MasterKey를 알 수 없음.
따라서 snapshot이 전송될 때 AWS 내부적으로 masterKey의 정보를 함께 보내줌.

3. IAM ( Identity and Access Management )
요약 : IAM을 통해 AWS 서비스 사용자 계정을 만들고 권한을 부여할 수 있음.
모든 AWS서비스에 대해 권한 제어를 IAM Policy로 할 수 있음.

a. Root 계정으로 모든 작업을 하는 것은 권장되지 않으므로
IAM을 통한 사용자 계정 제작 및 제한된 권한을 부여해서 사용 권장

b. IAM Policy
AWS의 모든 권한 제공의 핵심. Json형태로, 룰들을 섞어서 매우 정밀한 권한을 부여할 수 있음.
-Person 어떤 사용자에 대해서 Deny/Allow
-Action 어떤 행위에 대해서 Deny/Allow
-Resource 어떤 자원에 대해서 Deny/Allow
-Condition 어떤 IP, 시간에 대해서 Deny/Allow

Dynamo DB, Instance 접근, 콘솔 접근 등 모든 AWS 서비스에 대한 권한을 IAM Policy로 부여.
이러한 IAM Policy를 설정하는 권한도 IAM Policy로 부여.
방화벽 룰과 다르게 Deny가 룰 위치에 상관없이 가장 먼저 우선순위를 가진다.

c. IAM Policy Auto test
자신이 JSON 포맷으로 설정해 놓은 IAM Policy가 제대로 작동하는지 테스트 해 볼 수 있음.
자동으로 다양한 API를 던져보고 Allow/Deny 결과를 정리해서 보여줌.

d. Cognito
개발자들이 서비스를 제작할 때 로그인, 데이터 싱크/공유, SNS연동 등 당연히 만들어야 하는 모듈 존재
아마존은 이러한 필수 구성요소들을 미리 만들어놓고 쉽게 사용할 수 있도록 Cognito 서비스 제공.
이때 필요한 DB접근 권한, 사용자들의 권한, 개발자의 권한 등도 IAM Policy로 설정해서 사용.

4. Trusted Advisor Security
a. 이메일로 Security 관련 조언을 받을 수 있음. 물론 자동화된 조언.
이메일 Noti는 다음과 같이 구성되어 있음.
- Short Summary
- 조치했던 것과 개선점
- Security 체크에서 배제된 것 (설정 가능)

b. 점검 항목 (12가지)
- Security Group 특정 알려진 취약 포트 점검
- Security Group 전체 포트 점검
- ELB Listener SSL, TLS, Protocol suite 사용하는 Cipher가 안전한 것인지
- ELB Security 실제 포트는 닫혀있는데 Policy 에서는 Allow 되어있거나 한 것들 점검
- Bucket 권한 설정 (유/무) 점검
- RDS 보안 위협 불필요한 포트 Allow 점검
- IAM Use IAM 사용 여부
- IAM Password IAM Password 길이나 주기 점검
- MFA Root Multifactor 인증 사용 여부
- Cloud Trail 사용 여부
- Route53 설정 점검
- Cloud front Custom SSL 점검
- 인증서 검증 만료기간, 도메인 이름 등 점검

체크에서 배제하고 싶은것은 배제해서 이메일로 전달 받을 수 있고 취약부분은 링크가 제공되어 쉽게 개선 가능

c. Trusted Advisor Access Control
어떤 부분이 취약한지 종합적으로 알려주므로 이걸 볼 수 있는 권한도 IAM Policy로 제어해야함.

d. Logging
AWS 서비스는 API 콜로 이루어지고, 모든 API콜은 Logging됨.
권한을 가진 사용자가 적법하게 API를 호출했어도 AWS에 Logging되고 볼 수 있음.