본문 바로가기
SK 쉴더스 루키즈

클라우드 보안(2)

by todayisfriday 2024. 8. 10.

ELB & ASG

체인다이어그램

  • 3Tier : Web > App > DB
  • WEB : 클라이언트가 웹을 통해 요청 -> 80이나 443 port 허락

- SG에 80, 443 port 0.0.0.0/0 (누구나)에 허락하자고 해 둠

--> 이런 설정으로 WEB Tier에 연결되는 EC2 만듦

  • EC2 만들면, i-xxxx이런 리소스 ID가 만들어지고, GW라면 igw-xxxx, SG면 sg-xxxx 이런 ID가 붙음
  • APP : 이제 Web에 들어온 요청을 갖고 APP에 요청을 보냄

- 얘도 마찬가지로 여기 레이어에 허락되어있는 EC2가 존재할 것

- 80번에 0.0.0.0/0 허락한다고 해도 상관은 없음

- 그러나 일반적으로 앞단의 sg-xxxx를 허락하도록 함

--> 앞단의 SG을 통과한 애만 들어오라는 의미

- 이 레벨에서도 sg-yyyy 이런식의 리소스 ID가 만들어지게 됨

  • DB : DB 인스턴스에 연결되어있는 SG에 3306(mysql)을 허락

- 마찬가지로 0.0.0.0/0 대신 sg-yyyy 사용

--> 앞단의 SG 통과한 애만 허용하겠다는 것!

- 여기도 sg-zzzz같은 리소스 ID 만들어짐

  • 이런식으로 앞단의 SG를 통과한 애들만 들어올 수 있도록 하는 것이 체인다이어그램으로 설정한다고 하는 것
  • ALB의 내부적 구성이 인스턴스 형태로 구성됨
  • ALB의 경우에는 인스턴스이기 때문에 SG 설정 가능
  • 따라서 앞에서 SG 한 번 거르고 서버 노드에 있는 곳에서도 SG 거치게 되는데 이 과정도 체인다이어그램으로 설정되는 것
  • 참고로, NLB는 그렇지 않음

실습 - ELB & ASG

  1. 기존 NW 환경 확인
  • VPC 만든 것 확인
  • AMI 확인

2. 보안그룹 생성

  • ALB의 SG 생성
  • SGALB 인바운드 설정 - 80, 0.0.0.0/0
  • SGALB 생성 확인
  • APP SG 생성
  • APPSG 인바운드 설정 - 80, 앞단의 sg ID 설정
  • SGApp 생성

3. 대상그룹 생성 : EC2 > 대상그룹

  • 인스턴스로 생성
  • MyVPC 선택
  • 대상그룹 생성 -> 대상그룹 껍데기만 만들고 ELB랑 연결할 것

4. ELB 생성 : EC2 > ELB

  • ALB 선택
  • MyALB 생성
  • My VPC, 1a와 1c에 있는 Public Subnet에 할당
  • 아까 생성해 둔 SGALB 보안 그룹에 할당
  • 생성해 둔 대상그룹과 연결
  • 요약 확인 후
  • 생성 완료

5. 런치템플릿 생성 : EC2 > 시작탬플릿

  • MyLT 생성
  • 기존의 AMI 선택
  • 인스턴스 선택, SGAPP 보안그룹 할당
  • 생성 완

6. AutoScailing 그룹 생성 : EC2 > AutoScailing 그룹

  • MyASG 생성
  • myLT와 연결
  • MyVPC, 1a와 1c의 Private Subnet 설정
  • 아까 생성한 로드 밸런서에 연결
  • ELB 상태확인 켜기 설정
  • 초기값 = 2:2:2 로 설정
  • ASG 생성 완

7. 대상그룹 상태확인

  • Healthy Check

8. 확장 확인

  • DNS 복사
  • 연결 확인
  • 확장확인을 위해 인스턴스 한 개 강제종료
  • 1개만 정상처리 되어있음
  • 인스턴스 하나 더 생김
  • TG도 2개 정상 됨

9. 마무리

  • ASG 삭제
  • ALB 삭제
  • TG 삭제
  • 인스턴스 종료

Amazon VPC

AWS VPN(Virtual Private Network)

  • Pubic Network에 제약 있을 경우 사용할 수 있는 것 중 하나가 VPN
  • IGW를 거치지 않고 서비스 간 터널링을 맺어주는 것

- 터널링 : 암호화 인증 전송을 해주는 소프트웨어적인 네트워크 채널을 따로 맺는 것

  • IPSec 플로토콜 : 양 네트워크 간 터널링을 맺어주는 서비스
  • AWS와 온프레미스간 IPSec 기반으로 암호화 인증 및 정송을 도와주는 것이 VPN
  • 내부적으로 보면 퍼블릭한 망 위에 IPSec 기반으로 터널링을 맺어주는 것이기 때문에 절대로 Public Network를 사용할 수 없는 고객사의 경우에는 Direct Connect를 사용해야 함

AWS Direct Connect

  • 네트워크 전용선을 연결해 주는 것

- 1Gbps, 10Gbps,100..등 구매 요청 시 AWS 파트너사가 와서 네트워크 망 깔아 줌

  • 파트너 사 : 연결 거점
  • 구매 옵션에 따라 다르지만(1,10,100Gbps) 예상 가능한 안정된 성능으로 대용량의 데이터 전송 가능

AWS 네트워크 구성 예시

  • VPN으로 AWS와 온프레미스 connect 가능
  • Direct Connect 로 연결 가능
  • 둘 다 사용 가능

- 하나(주로VPN)는 백업망으로 구성하는 것

VPC 피어링

  • VPC 간에 사설 네트워크 연결
  • 즉, AWS와 AWS 간의 VPC 통신
  • 원래 VPC를 만드는 의미는 VPC 자체가 Private Network이기에 네트워크 격리를 통한 보안 향상 의도한 것
  • 프로젝트 팀 별로 나누어서 리소스 격리를 VPC 안에 하고 싶기에 VPC를 여러개 사용함
  • 그러나 팀 간에 서로의 노드에 접근해야 하는 상황 발생
  • 그 때 Private하게 접근하고 싶다면 전용의 Gateway를 생성해주는 것이 VPC 피어링

VPC 피어링 제약 조건

  • 전이적 peering 지원하지 않음
  • 예를 들면, A-B 피어링 되어있고, A-C 피어링 되어있을 때, B-C 가 되고 싶다고 A한테 포워딩 요청하면 해주지 않는다는 것
  • 즉, B와 C가 따로 피어링을 해야 서로 통신할 수 있다는 이야기
  • 따라서, 많아질수록 지저분해짐
  • 이를 해결하기 위해 Transit GW 사용

Transit Gateway

  • 다수의 네트워크들을 허브 앤 스포크 형식으로 사설 연결
  • 여기에 기능이 확장되면서 VPC 뿐만 아니라 추가적으로 VPN과 Direct Connect까지 연결 가능해짐
  • 이론적으로 5000여개의 네트워크 연결 가능

VPC 엔드포인트

  • 앞서 소개한 내용들은 전부 네트워크 단위의 기능들
  • 여기서 말하는 VPC 엔드포인트는 EC2 인스턴스와 특정 서비스 간에 Private하게 통신할 수 있는 것

- VPC와 VPC를 사용하지 않는 선비스 간의 통신을 돕는 것

  • 대표적으로 EC2와 RDS

- 이외의 서비스들은 VPC 밖, 리전 내에서 만들어짐

  • 원래 NAT를 통해 IG -> 다른서비스 이런 통신을 함
  • VPC 엔드포인트를 구성하게 되면 NAT나 IG 거치지 않아도 Private 통신 구성 가능
  • VPC 엔드포인트가 모든 AWS 서비스를 지원하지는 않으나 확장중 + 별도의 것 있음
  • Interface 유형과 GW 유형이 있는데 GW를 지원하는 것은 S3와 DDS 뿐

- 나머지 Interface 유형은 Network 카드를 꽂아서 같은 허브에 연결해 두는 것

프라이빗 노드 접근

  • Bastion을 통한 프라이빗 노드 접근
  • 클라이언트 --ssh--> Bastion Host(Public Subnet) --ssh--> Private Subnet
  • 그래서 키페어 잘 나눠가져야 함

실습 - VPC Endpoint(S3)

  1. 퍼블릭노드와 프라이빗 노드 생성
  • PubNode01 생성
  • 새로운 키페어 생성
  • VPC, 서브넷, 보안그룹 설정
  • PriNode01 생성
  • 같은 키 부여
  • VPC, 서브넷, 보안그룹 설정
  • 두 노드 생성 확인

2. Bucket 만들기

  • mykpbuc0902 만들기
  • 키페어 업로드
  • 업로드 확인

3. AK 생성

  • IAM 접근
  • CLI 만들기
  • AC 생성

4. 퍼블릭노드 (Bastion)로 ssh 연결

aws configure AKIA6JTVQOPIX7IMM7VQ oSv9iijo2H9GVPe86yAJDfJ/0VzRYI2ZBxvwxNr+
  • 키페어 다운
aws s3 ls aws s3 ls s3://bunketname aws s3 cp s3://bunketname/PriKeyFileName . ls ssh -i sshPriKeyFileName ec2-user@PriNodeIP
  • IP 확인

5. 프라이빗 노드에서 S3 접근

  • private IP 확인
  • 접근

- linux가 막아서 chmod 600 *해준 것

  • 잘 들어와졌나 체크
aws configure aws s3 ls // --> X 왜냐면 네트워크가 허용이 안돼서 그럼 권한은 있음

6. VPC 엔드포인트 생성

  • VPC EP 생성
  • S3 GW 선택
  • MyVPC 선택
  • EP 생성
  • PriRT 연결
  • 연결 확인 가능
  • 이제 S3 ls 접근되는 것 확인 가능

7. 마무리

  • VPC 엔드포인트 삭제, S3 삭제, 인스턴스 종료, 엑세스키 삭제

AWS Database

데이터베이스 개요

  • 의미있는 데이터들을 모아둔 것을 데이터베이스라고 함
  • DBMS

- 프로그램 ==SQL문==> DBMS ==조작==> 데이터베이스

- MySQL(오라클), MariaDB(리눅스 기본), PostgreSQL, Amazon Aurora

  • 데이터베이스 종류

- 관계형 데이터베이스(RDBMS) : 테이블 형태(스키마) 구조 갖는 것

- 비관계형 데이터베이스(NoSQL, Not only SQL) : 테이블 형태가 아닌 스키마

--> 키벨류스토어 데이터베이스 / 문서기반 데이터베이스 / 그래프 데이터 베이스

Amazon 대표 DB 서비스

  • Amazon RDS : 관리형 서비스
  • Amazon Aurora : 좀 더 확장된 성능을 제공하는 AWS 자체 DB
  • Amazon DynamoDB : 관리형 서비스

관리형 VS 비관리형

  • 관리형 : OS 설치 및 패치, DB 설치 및 패치, 백업, 중복배포 등 모든 것 자동화
  • 비관리형 : 이 모든 것을 알아서 하는 것
  • 관리자가 편한 방식은 관리형
  • 그러나 가끔 OS를 건드러야만 원하는 대로 할 수 있음 그 때는 비관리형 사용해야 함

RDS 인스턴스 크기

  • 표준 : db.m5,db.m4, ..
  • 메모리 최적화 : db.x1e, db.x1, db.r5, db.r4, ..
  • 버스트 성능 : db.t3, db.t2

실습 - Amazon RDS 생성 및 연결

참고 링크 : https://aws.amazon.com/ko/getting-started/hands-on/create-mysql-db/

  1. DB 인스턴스 생성 : 콘솔 > RDS > DB 생성
  • MySQL 선택
  • 프리티어로 진행 (알아서 선택됨)
  • DB이름 및 관리자 이름 선택
  • 자동선택된 것들 건들지 않기
  • 스토리지 자동 조정 해제
  • 연결 확인 및 퍼블릭 액세스 허용
  • 3306 열어주는 보안그룹 생성
  • 초기 DB 설정
  • Error남 이유는?
  • VPC DNS 설정 안해놔서
  • 짠 잘됐지?

2. SQL 클라이언트 다운로드 설치 및 연결

  • DB와 연결해서 열기

3. 간단한 SQL 실행

  • 코드 작성 (DB 생성해서 Value 넣어보기)

4. DB 인스턴스 삭제

  • 언제나 실습의 마무리는 삭제

키벨류 데이터베이스

  • DynamoDB : 키-값 데이터 유형의 비관계형(NoSQL) 데이터베이스

- 완전 관리형 서비스(RDS보다 손이 덜 가는)

- 서버리스 : 서버를 관리할 필요가 없는 것

  • DynamoDB의 테이블과 관게형 DB의 테이블은 다름

- 굉장히 Flexible

DynamoDB 기능 및 특징

  • 일관된 성능 : 00ms 미만의 성능
  • 무제한 처리량
  • 완전 관리형
  • 사례 : 수백만 사용자 및 초당 수백만 건의 요청 처리 / 모바일 게임 순위표, 장바구니 및 고객 프로필

실습 - DynamoDB

1. 테이블 생성 : 콘솔 > DynamoDB

2. 테이블에 데이터 추가

3. 테이블 쿼리

  • 사진도 없고 기억도 없고..

4. 항목 삭제

그 외 AWS 데이터베이스

  • DocumentDB : 문서기반 데이터베이스
  • Neptune : 그래서 데이터베이스
  • Timestream : 시계열 데이터베이스
  • Quantum Ledger Database : 장부 데이터베이스

Amazon Route 53

Route 53 개요

  • 가용성 확장성 뛰어난 DNS 서비스
  • DNS : Domain Name system

- Name에 대한 IP가 필요한데 전세계 모든 것을 알 수 없기에 그 연결을 도와주는 것

  • 알아서 세컨더리 서버 잡아줌 (4개까지)
  • 관리형 네임 서비스
  • 도메인 네임 구매도 가능 (중개해줌)

Route 53 라우팅 정책

  • 원래 기본은 Name에 대해 IP 할당해주는 것
  • 경우에 따라 하나의 이름에 여러개의 IP 등록해두는 경우 많음
  • 따라서 클라이언트가 name에 대해 IP 요구하면 어떤 IP를 줄까 고민함
  • 그에 따른 우선 순위 정하는 방법이 있음

--> 라우팅 정책

라우팅 정책

  • 단순 라우팅 : 기본 라운드 로딩

- 돌아가면서 IP를 전달해 준다는 얘기

  • 가중치 기반 라우팅 : 말그대로 가중치를 주는 것

- 어떤 IP는 3번 주고 어떤 IP는 한 번만 주고

  • 지연시간 라우팅 : 클라이언트와 가까운 곳의 노드 제공 (지연시간 단축)
  • 지리위치 라우팅 : 위치에 따라

- 미국 : 그 주에 해당하는IP

  • 다중 응답 라우팅 : IP를 여러 개 올려두고 그 중 몇 개 던지는 것 클라이언트 쪽 앱에서 뭘로 연결할 지 선택하게 하는 것
  • 장애 조치 라우팅 : Primary와 secondary로 나눠서 Primary에 대한 상태검사 후 IP 주고 응답 없을 시 Stand-by 하거 있던 IP 제공하는 것

- 고가용성

--> 리전 장애에 대한 대비까지 가능해지는 것

- 단점 : 중복되는 스페이스를 사용하게 되므로 비용이 더 많이들고 잉여의 리소스 만들어 둬야 함

--> 리전 장애에 반드시 대비해야하는 내용이 있을 때만 사용


AWS Lambda

Lambda 개요

  • AWS 서버리스 애플리케이션
  • 애플리케이션 실행을 위한 서버 인프라 생성, 관리할 필요 없이 간편하게 애플리케이션 생성 실행
  • 지원 SDK : Python, Java, .NET, Node.js, Go, Ruby
  • 개발자 입장에서는 굉장히 간단한 앱 실행하기 위해 EC2도 만들고, 백업과 패치, 중복 배포 이런 것들을 직접 고민을 해야하니까 번거로울 수 있음

- 이럴 때 lambda 사용

  • 이벤트 트리거만 잘 걸어두면 됨
  • 코드만 바로 올려주면 EC2 관련 절차를 하지 않아도 빠르게 간단한 애플리케이션을 보급할 수 있음
  • 선호하는 언어로 사용 가능

Lambda 실행

  • 방법에는 여러가지가 있음
  • 예약을 걸수도 있음
  • 호출하는 다른 애플리케이션을 사용할 수 있음
  • 이벤트 트리거 : AWS 서비스에 특정 이벤트가 있을 때 그 이벤트가 있으면 미리 만들어놓은 람다를 실행하도록 트리거할 수 있는 기능이 있음

Lambda 특징

  • 권한 : 실행역할, 정책

- 실행역할 : 서비스 리소스들의 역할을 자동으로 처리 실행

  • 메모리 구성 : 128-10240M

- 고객이 지정하는 메모리를 기준으로해서 CPU의 크기 들어감

  • 시간제한 : 1초-15분
  • 실행 시에만 요금 부과

- 실행한 시간만큼 비용 지불

실습 - Lambda 실행

참고 자료 : https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-tutorial.html

  1. 버킷 생성
  • 하나는 소스용, 하나는 타깃

2. 정책, 역할 생성

  • 역할 생성 (정책 생성하는 거 사진 까먹)
  • 생성했던 정책 넣기
  • 역할 만들기

3. Lambda 만들기

  • 사용할 언어 선택
  • 역할 연결
  • lambda 틀 완성

5. 소스 업로드

  • python 코드 업로드

6. 트리거 설정

  • 소스용 버킷 할당

7. 파일 업로드 해서 실행해보기

  • 파일 업로드
  • 타깃 버킷 가보니 사이즈 재조정된 파일 확인 가능

8. 마무리

  • 만든 거 전부 삭제하기

*권한 경계

관리형 정택을 사용하여 IAM 엔터티(사용자 또는 역할)에 부여할 수 있는 최대 권한 설정

권한경계와 자격 증명 기반 정택에서 허용되는 작업만 수행하도록 허용(교집합)

 

PBL 문제 풀이

[PBL 풀이 1]

다음과 같은 하나의 자격증명정책만 IAM 유저 user01에 부여되어 있고, S3 버킷 정책이 구성되어 있다면, user01은 어떤 작업을 할 수 있을지 정리하여 보시오.

(예: EC2 생성 및 상세내용 보기, S3 버킷 생성 및 목록 보기, S3 버킷에 객체 업로드 및 다운로드 등)

  • IAM 정책

"Effect": "Allow",

"Action": "s3:*",

"Resource": "*"

  • S3 버킷 정책 → 버킷 찍고 들어가서 지정함 (리소스에 대해서)

"Effect": "Deny",

"Principal": "user01",

"Action": "s3:PutObject",

"Resource": "*"

  1. EC2 생성: 명시적 allow가 없음 → 암시적 deny
  2. S3 버킷 생성 및 목록보기: PutObject만 Deny → Allow
  3. 다운로드: GetObject, 업로드: PubObject → 업로드는 deny

→ 연결된 버킷말고 다른 버킷에선 정책 적용 안됨

“최소권한으로 정책 부여하자”

[PBL 풀이 2]

user01 IAM 유저에게 아래의 내용을 참조하여, 요구하고 있는 권한 제어를 설정하시오.

  • IAM 정책으로 EC2에 대한 작업 중 EC2의 모든 작업 - 상세 내용을 보거나, 정보를 참조하는(읽는) 작업 및 EC2 생성 및 변경, 삭제의 쓰기 작업 등을 허가하도록 설정
  • S3 버킷 정책을 통해 파일 업로드를 가능하게 하도록 권한 설정
  • IAM 정책에 EC2에 대한 모든 권한이 허용되어 있다 하더라도, 권한 경계 정책을 통해 특정 EC2(i-xxxxxx)의 stop/start 만 허용하도록 경계 설정

IAM에서 AmazonEC2FullAccess 허용

권한 경계 → “Resource”: permission boundary 특정 ec2 i-xxxxx 만 start, stop 가능하도록

[PBL 풀이3]

아래와 같이 EC2를 통해 웹서버 구현이 되어 있을 때, EC2로 웹서버 접근을 할 수 없었다. (제대로 된 웹서비스를 제공할 수 없다.)

문제를 해결하기 위해 확인해야 할 내용들을 계획하고, 설명하시오.

빠른 문제 해결 가이드

  1. 보안 그룹 확인
  2. public ip, public subnet 배치 확인
  3. RT에 연결된 Internet gateway 확인
  4. 아파치 확인

Well Architected Framework

  • 운영 우수성 원칙
  • 보안 원칙
  • 안정성 원칙
  • 성능 효율성
  • 비용 최적화
  • 지속 가능성

AWS 커네이너 서비스

컨테이너

  • 가상화 방식의 무겁고 느린 애플리케이션 서비스를 해결하기 위한 프로세스 격리 방안
  • 애플리케이션 코드 + 런타임 + 라이브러리 + 시스텝도구 등을 하나의 인스턴스로 패키징
  • 같은 운영체, 같은 하드웨어 박스에 나눠쓰는 OS에 후킹할 수 있는 애플리케이션
  • 컨테이너 오케스트레이션 : 컨테이너를 자동으로 시작, 중지 및 관리
  • OS 중복 안됨 -> 클라이언트가 요구 -> 컨테이너 바로 생성

- 빠르게 서비스 가능, 가벼움

ECS(Elastic Containter Service)

  • 컨테이너화 된 애플리케이션의 쉬운 배포, 관리, 크기 조정에 도움을 주는 관리형 컨테이너 오케스트레이션 서비스
  • ECS 시작 유형

- EC2 : EC2 기반의 컨테이너 조정, EC2 비용 지불

- Fargate : 서버리스 컨테이너 서비스

--> 인스턴스 구성 및 관리 불필요 (알아서 늘렸다 줄였다 해줌)

  • ECR(Elastic Container Resistry) : 컨테이너 이미지 저장 서비스

클라우드 보안

보안의 3요소 (CIA)

  • 기밀성 (Confidentiality) : 인가된 사용자에게만 허가

- 비밀스럽게 유지되며, 특정 인물만 볼 수 있는 기밀 정보

  • 무결성 (Integrity) : 부적절한 정보 변경이나 삭제로부터 보호
  • 가용성 (Availability) : 신뢰할 수 있는 정보의 접근과 사용

* 온프레미스 보안 vs 클라우드 보안

클라우드 : Gameday, Flexible

온프레미스 : 리소스 고정, 초기에 구매한 것으로 제한

AWS 보안 혜택

  • 안전한 데이터 유지
  • 규정 준수 요구 준수
  • 비용 절감
  • 빠르고 간편한 확장

공동책임 모델

  • 고객이 같이 책임진다는 의미
  • AWS 내부적으로 구성하는 것은 AWS 책임이지만, 그 위에 고객이 구성하는 부분은 고객책임이라는 것
  • 고객책임(예시)

- 암호화 : 이건 고객이 설정하는 것

- Firewall : NACL이나 SG 이용해서 어떤 클라이언트에게 어떤 포트 허락할 지 설정하는 것

- IAM은 AWS 1차적 보안, 권한 제어는 고객이 하는 설정

  • AWS 책임 : Infra쪽에 문제가 발생하 경우
  • 즉, 고객은 보안의 요구사항에 맞춰서 알아서 잘 구성해야한다는 것

AWS 보안을 고려한 설계 접근 방식

  • 요구사항 이해
  • 요구사항에 맞춰 안전한 환경 구성
  • 예시) S3 객체 데이터 암호화, IAM 권한 설정, 보안 그룹 설정 ...

- 자동으로 일관되게 구성하도록 설정할 수 있는 AWS 서비스가 또 있음 (Cloud Formation)

  • 탬플릿 사용 강제 적용 -> Catalog
  • 검증 활동 수행

- 이게 가장 중요함

- 시나리오 베이스로 잘 지켜지고 있는 지 검증할 필요 잇음

* 보안 향상 고려 사항

https://aws.amazon.com/ko/blogs/security/top-10-security-items-to-improve-in-your-aws-account/

백업 (보안사고 대비 복구)

  • 백업이 왜 필요한가?

- 언제 어디서 어떤 상황이 발생할 지 모르기 때문에 손실에 대한 대비 필요

  • 고객의 데이터 보호 책임 : AWS 공동 책임 모델

- 고객이 갖고 있는 고객의 데이터는 기본적으로 고객책임이다

  • EC2, EBS, S3, 데이터베이스 데이터 : 자산분류, 위험 및 비용 등을 고려한 보호 방법 결정

- EC2 : AMI, EBS 스냅샷 활용

- Database

--> RDS : 자동 백업 저장(0-35일)

--> Aurora : 보존 기간 내 신속 복원 가능 (1-35일 지정 가능)

--> DynamoDB : 특정 시점 복구를 위한 자동 백업(-35일)

- S3 : 리전간 복제 고려

  • 데이터 보호도 필요 : IAM 권한 설정, 암호화 옵션
  • AWS Backup : Cloud Backup 솔루션

AWS 주요 보안 서비스

접근 및 권한 제어

  • IAM
  • 보안그룹&NACL

모니터링 및 로그 수집

  • CloudWatch
  • CloudTrail

AMI

  • AMI Baking

- Full Baking : 고객생성 AMI

--> 구성의 요구사항 자주 변경되어 변경되어 변경 주기 짧으면 관리 번거로움, launch는 빨리 가능

- Half Baking : 일정 부분 고객 생성 AMI + 일정 부분 User Data

- Raw Baking : AWS가 제공하는 AMI + User Data(내가 원하는 내용)

  • 보안규정 요구 사항에 맞는 내용으로 AMI 생성
  • 민감 정보 등이 없는 지 점검

AWS 로그 수집

  • 로그 수집의 기본 원칙

- 최대한 오래 많이 로그 수집이 기본

- 문제에 대한 원인 파악하여 개선 자료로 활용

  • 리뷰 : CloudTrail

다양한 로그 활성화

  • VPC 흐름 로그 : VPC 내 로그를 수집함

- 장애나 문제 발생 시 원인 파악, 분석 등의 용도로 활용

- Subnet, ENI 등을 대상으로 활성화 가능

- 로그 게시를 S3나 CloudWatch Logs로 선택 가능

- Account-id, src_addr, dst_addr, src_port, dst_port, packets, bytes, action(ACCEPT or REJECT)

  • CloudWatch Logs

- 로그 수집 및 모니터링, 저장

--> 기존 시스템, 애플리케이션 및 사용자 지정 로그

--> 거의 실시간 모니터링 가능

  • 예시 ) EC2 애플리케이션 로그, VPC 흐름로그, CloudTrail 등
  • 특정 구문, 값 또는 패턴에 대한 로그 모니터링
  • CloudWatch 경보와 연계하여 알림 가능
  • S3 액세스 로그

- S3 버킷에 수행된 요청에 대한 상세 내용 저장

- 고객 기반 이해, 보안 및 액세스 감사 유용

- 활성화 필요

- 로그 필드 : 버킷, 버킷 소유자, 요청 시간, 원격 IP, 요청자, 작업, 객체키(객체이름),총시간(요청수신후 응답완료시간) 등

  • ELB 액세스 로그 : 로드 밸런서에 전송된 요청에 대해 자세한 정보 저장

- 트래픽 패턴 분석 문제 해결 유용

- 활성화 필요

- 로그 필드 : 요청 받은 시간, 클라이언트 IP, 지연시간, 요청 경로 등

AWS SSM(Systems Manager)

  • 다수의 EC2 운영 및 애플리케이션 보안 관리
  • 인벤토리, 패치 관리자, 세션 관리자, 명령어 실행 등

CloudFormation(IaC : 코드형 인프라)

  • 코드(탬플릿) 내용을 기반으로 AWS 인프라 자동 생성

- 일관된 AWS 인프라를 신속하게 반복 생성 가능

  • 용어 : Stack
  • 탬플릿 (JSON or YAML)
// JSON { "AWSTemplateFormatVersion": "2010-09-09", "Description": "A simple EC2 instance", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami0ff8a91507f77f867", "InstanceType": "t2.micro" } } } } // YAML AWSTemplateFormatVersion: 2010-09-09 Description: A simple EC2 instance Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro
  • 자동화 뿐 아니라 환경 버전 관리도 가능
  • 클라우드 포메이션의 결과로 만들어진 리소스들에 대해서는 과금됨

실습 - CloudFormation

  1. CloudFormation을 이용한 간단한 애플리케이션 생성
  • 스택생성
  • Lab-network.yaml 업로드
  • lab-network 설정
  • 네트워크 생성 완
  • 정보 확인 가능
  • 애플리케이션 스택 생성
  • app name 설정
  • 생성 완
  • 체크 가능
  • 잘 나오는 것 확인 가능

2. 드리프트 감지

  • 드리프트 감지되고 있는 것 확인
  • SG 설정 변경
  • 규칙 수정
  • 드리프트 된 것 감지 됨
  • 무슨 리소스가 드리프트 됐는 지 확인 가능
  • 세부 정보 확인 가능

3. 마무리

  • 스택삭제

Inspector

  • 인스턴스의 워크로드를 자동으로 검색하여, 소프트웨어 취약성 등을 스캔하는 관리형 서비스
  • (잠재적인) 보안 취약성 결과 보고
  • Agent 기반
  • CVE(Common Vulnerabilities and Exposures) 정보 기반 결과 집계

AWS Config

  • 리소스 구성 변경을 지속적으로 모니터링, 변경사항 관리
  • 규정 준수, 미준수 적용
  • 결과를 보여주는 서비스 (Rule 기반)

*CIA

자동화(CloudForamtion), 권한 제어(IAM 정책), 감사(Cloud Trail), 가시성 환경(Config)

AWS GuardDuty

  • 머신러닝 기반의 위협 탐지 서비스

- 계정 내 워크로드에 악의적인 활동을 모니터링 및 상세 보고

- CloudTrail 이벤트 로그, VPC 흐름 로그, DNS 쿼리 로그 등에서 수백억 이벤트 분석

  • 탐지 분야

- 정찰 : 공격자의 정찰로 보이는 행동

--> 비정상적 API 활동, 의심스러운 로그인 시도, 포트 스캐닝, 알려진 악성 IP 포트 탐색 등

- 인스턴스 침해 : 인스턴스 침해를 나타내는 활동

--> 코인채굴활동, 백도어 명령, 의심되는 멀웨어, 비정상적 네트워크 트래픽 볼륨 등

- 계정침해 : 계정 침해를 나타내는 패턴

--> 특이한 지리적 위치나 익명으로부터 접근, CloudTrail 로깅 사용 중지, 특이 리저에서 인프라 배포 등

- 버킷 침해 : 버킷 침해를 나타내는 활동

--> 알려진 IP로부터 S3 무단 액세스, 비정상적 위치에서 S3 데이터 검색 등

CloudWatch 주요 기능

  • 앞에서 지표와 경보(알람), 로그에 대해 본 적이 있음
  • Event (->Event Bridge) : 이벤트 관리

- 규칙(Rule) : 이벤트 정의, 특정 대상 지정

- 대상(Target) : 이벤트 처리 서비스

--> EC2, Lambda, SNS

- 이벤트 서비스가 원래 Watch 안에 있었지만 서비스 범위가 넓어지며 EventBridge로 넘어감

  • Event의 기능은 뭐가 있으면 뭘 하자 이렇게 설정할 수 있는 것
  • 자동으로 후속 조치를 진행시켜주느 ㄴ것
  • JSON으로 만든 규칙을 Target으로 처리하는 것

- 예시 ) Lambda에 함수 만들어 두고 어떤 이벤트가 있을 때, Lambda에 만들어 준 코드 자동으로 실행

DDoS 공격 완화

  • DDoS(Distributed Denial of Service)공격 : 서비스 중단을 목적으로 대상 서버, 서비스 혹은 네트워크에 대량의 인터넷 트래픽을 시도하는 악의적인 공격
  • 애플리케이션 레이어 DDoS 공격 : 완화정책을 우회하여 애플리케이션의 자원을 소모하도록 하기 위해 정상으로 보이는 요청 사용

- HTTP GET, DNS query Floods

  • 상태고갈 DDoS 공격 : 방화벽, IPS, 로드 밸런서, OS 등의 시스템에 부하를 주기 위해 프로토콜 과다 사용

- TCP SYN Flood

  • 규모 기반 DDoS 공격 : 네트워크의처리 가능한 규모보다 더 큰 트래픽을 발생시켜 네트워크 중단 초래

- UDP Reflection Attacks

AWS Shield

  • DDoS 공격을 방어하기 위해 개발된 AWS 서비스
  • AWS 서비스에 내장된 구조로 아키텍쳐의 큰 변경 없이 DDoS 완화를 빠르게 활용
  • Shield Standard / Shield Advanced 로 구분

- Standard는 무료 기본

- Advanced는 1년 약정, 추가적으로 섬세한 케어 가능, 이거 쓰면 WAF 공짜

AWS WAF(Web Application Firewall)

  • AWS 웹 애플리케이션 방화벽
  • ALB, CloudFront, API Gateway에 적용
  • WebACL을 구성하여 규칙이나 특정 패턴에 따른 허용, 거부 설정 가능
  • 규칙 예시

- IP 주소, HTTP 헤더와 본문, URL 문자열

- SQL injection, XSS(Cross Site scripting)

  • OWASP Top10과 CVE(Common Vulnerabilities and Exposures)관련 규칙들 자동 갱신

CloudFront

  • CloudFront는 AWS의 캐싱 서비스
  • 원래 S3는 서울에 있는데 고객들이 유럽 어딘가에 많이 있다고 하면 계속적으ㅏ로 유럽에서 서울에 있느 S3 데이터 요청을 많이 할 것임
  • 그럼 유럽에서 서울로 S3 요청하면 시간도 오래 걸리고 다운로드 비용도 들 것임
  • 그래서 유럽쪽에 까까운 곳에 캐싱되어 있는 데이터로 빠르게 액세스 할 수 있음
  • AWS CDN(Contents Delivery Network) 관리형 서비스 : 컨텐트 전송 서비스

- 데이터 사용량이 많은 애플리케이션의 웹페이지 로드 속도를 높이기 위한 서버들의 네트워크

--> 서버 로드 줄이고,지연시간 단축

  • Edge Location : AWS 글로벌 인프라 중에 하나

- 앞에서 DCs < AZ < Region 이런 구조를 설명 받은 적 있는데 AZ와 리전 같은 것 중 하나임

- 얘도 전세계 여기저기 있는 DC들을 말하는데 AZ에 있는 DC들과 겹치지 않음

- 왜 만들었는가 ? CloudFront를 위해서 만든 것

--> 캐싱 전용 데이터센터들

DDoS 공격 완화를 위한 대응 가이드

  • 확장이 가능한 서비스 구조 : ELB + AutoScaling
  • 공개적으로 노출되는 앤드포인트 노출 최소화
  • 웹 애플리케이션 방화벽 사용
  • 부하 상황에 대한 서비스 안정성 검증
  • 서비스 동작 모니터링 및 경보 설정
  • DDoS 발생 시 런북 작성

*Throttle 기능

짧은 시간에 같은 요청 많이 오면 잠시 멈추게 하는 기능

VPC 수신 라우팅

  • 모든 수신 트래픽을 EC2 인스턴스의 탄력적 네트워크 인터페이스로 보내도록 VPC를 구성
  • EC2 인스턴스는 모든 가상 어플라이언스를 실행할 수 있으며, 이 어플라이언스를 전달 경로에 삽입
  • 예시 ) 의심스러운 트래픽을 검사하고 차단하고 네트워크 보안 도구
  • VPC 수신 라우팅은 인터넷 게이트웨이와 가상 프라이빗 게이트웨이를 지원

AWS Gateway Load Balancer

  • 파트너 어플라이언스를 위한 간편한 배포

- 확장성과 가용성

  • 기존 VPC Ingress 라우팅은 확장성, 가용성, 운여의 오버헤드
  • 타사 가상 어플라이언스 지원 : 방화벽, 침입 감지 및 방지
  • 구현

- AWS Marketplace에서 파트너의 가상 어플라이언스 소프트웨어 찾기

- VPC에서 어플라이언스 인스턴스 시작

- 어플라이언스 인스턴스로 GWLB 및 대상 그룹 생성

- 트래픽을 검사해야 하는 GWLB 엔드포인트 생성

- GWLB 엔드포인트를 다음 홉(next-hop)으로 지정하도록 라우팅 테이블 업데이트

실습 - 인스턴스 생성 및 연결(SSM)

  1. 역할 생성
  • SSM Manager Instance 뭐시기 선택
  • ssm_instance 생성 : 고급세부정보 >> IAM 인스턴스 프로파일

- SSM으로 할건데 EC2에 Agent가 올라가야하는데 우리가 선택하는 Amazon Linux는 Agent에 설치가 되어져 있음

--> SSM과 EC2가 interaction 하는 중이기 때무네 Role이 필요함

2. EC2 인스턴스 생성

  • 네트워크 설정
  • 보안 그룹 새로 생성 : 인바운드 롤 항목 삭제

3. SSM Session Manager 연결

  • EC2 선택 후 연결 > session manager 로 연결 or Systems Manager > session manager 로 연결
  • 성공적

실습 - CloudTrail & CloudWatch

CloudTrail

  1. 이벤트 로그 확인 : CloudTrail은 최근 90일꺼까지밖에 못 봄
  • 이렇게 세부 정보 확인 가능
  • 추적 생성
  • 짠..S3 버킷 만들어짐

2. 추적 활성화

  • 요기 이렇게 S3에 따로 막 저장 됨

3. 마무리

  • 추적 삭제, S3버킷 및 객체 삭제

CloudWatch : 지표, 경보

  1. 지표 확인
  • 여기 들어가
  • 내가 아까 생성한 EC2 인스턴스 확인 가능
  • 하나 선책하면 이렇게 그래프로도 보임

2. 경보 설정

  • 지표 설정
  • 조건 설정
  • 경보 설정(SNS)

3. 마무리

  • 알람 삭제, SNS Topic 삭제

PBL Review

PBL 4

관리작업의 부담을 줄일 수 있도록 관리형 서비스를 이용하여, 재설계하시오.

-> RDS(Private Subnet), NAT Gateway (Public Subnet) 사용 권장

PBL 5

다음의 아키텍처를 관찰하여, 결합 해제가 가능한 부분이 있는지 생각해보고, 재설계하시오.

-> 한쪽이 문제가 있을 경우, 다른 쪽에 영향을 주지 않도록 3Tier 구조로 모듈화 (Web / App / RDS)

PBL 6

다음의 아키텍처를 관찰하여, 고가용성을 고려한 안전하고 유연한 애플리케이션 실행을 도울 수 있는 개선부분을 생각해 보고, 재설계하시오.

-> 또 다른 가용 영역에 중복배포 / 노드 앞단에 ALB 두고, 서비스 분산 요청 → 고가용성 / RDS → Secondary DB