SK Rookies 9/Module Project

Module Project 1

CodeBeginer 2022. 10. 18. 23:12

최종 아키텍처

아키텍쳐

서브넷

서브넷의 경우 WebServer를 운영하기 위한 Private Subnet 2개와 RDS를 위한 6개의 서브넷을 생성했다.

#Private 서브넷의 경우 단일 실패 지점을 없애기 위해 2개를 만들어 분산 운영을 하기 위함이다.

#RDS 서브넷의 경우 리전마다 다르지만 나의 경우 버지니아 북부(us-east-1)를 사용하여 6개의 가용영역이 존재했다.

서브넷

라우팅 테이블

라우팅테이블의 경우 인터넷게이트와 로컬을 라우팅 해주고, WebServer가 운영되고 있는 Private Subnet를 연결해 주었다.

라우팅 테이블

엔드포인트

엔드포인트의 경우 VPC외부에 존재하는 서비스(S3, SSM 등)를 이용하기 위해 아래와 같이 6개를 만들었다.

엔드포인트

S3

S3

EC2 AMI

이미지의 경우 아래와 같은 순서로 만들었다.

1. 아파치 서버에 그누보드 설치
2. RDS 연결
3. RDS 연동
4. S3 버킷에서의 다운로드를 위한 폴더 권한 상승
5. crontab을 이용한 자동 동기화

이미지 history
자동예약

보안그룹

Private Subnet의 경우 80, 443포트만 열어주었다.

Private Subnet inbound
Private Subnet outbound

RDS의 경우 3306포트만을 열어주었고, Private Subnet을 대상으로 지정하여 그 외에서는 들어오지 못하게 설정했다.

RDS Subnet inbound
RDS Subnet outbound

로드밸런서

로드밸런서의 경우 EIP를 중복되서 사용하지 못하여 한 곳에 부착한 후 교차 영역 로드 밸런싱을 활성화 하여 EIP가 없는 곳에도 트래픽이 분산될 수 있도록 하게 하였다.

로드밸런싱1
로드밸런싱2

대상그룹

대상그룹의 경우 오토스케일링이 만든 인스턴스를 대상으로 하였다.

Target Group

시작구성

시작구성의 경우 앞서 만든 이미지로 만들었고, SSM접속을 위해 만든 IAM 권한을 부착했다.

시작구성

오토스케일링

앞서 만든 Private Subnet 2개에 생성하도록 가용영역을 설정했고, BTS 팬페이지라는 가정을 하여 BTS콘서트 당시에 크기조정이 되도록 설정했다.

AS 1
AS 2
AS 3

RDS

RDS의 경우 MySQL을 사용하여 앞서 만든 서브넷과 보안그룹을 사용했다.

RDS

IAM

SSM을 사용하여 로그를 남기기위해 SSM, S3의 정책을 연결하여 권한을 생성했다.

IAM

CloudWatch

로그를 남기기 위해 로그그룹 하나를 생성했다.

CloudWatch

Systems Manager - Session

세션의 경우 이미지를 Ubuntu로 하여 아이디를 Ubuntu로 설정 (아마존 리눅스의 경우 ec2-user이다.)

SSM

 

#시연모습#-----------------------------------------------------------------------

1. EIP로 접속
2. 게시물 작성 -> 버킷 확인 -> 업로드 잘 됨
3. 세션 매니저에서 접속이 되는지 여부확인
4. SSM 접속(IP 비교)
5. 두개의 EC2의 파일 비교 (동기화 확인)
6. 버킷에 수동으로 사진 아무거나 업로드
7. EC2에 정상적으로 다운로드 되는지 확인
8. 종료 후 로그가 남는지 확인

1. EIP 접속

접속한 모습

2. 업로드 확인

버킷

3. 세션 확인 및 접속

SSM

4. IP 비교 

EC2 ID
ssm을 이용한 접속

5. 동기화 확인

동기화

5. 수동으로 올린 버킷 객체를 잘 다운받는지 확인

버킷에 수동으로 올려봄
동기화가 잘 된 모습

6. 종료 후 로그가 잘 남는지 확인

CloudWatch
S3 log
S3 log

보안이 부분

  1. 프라이빗 서브넷의 보안 그룹에서 SSH 포트를 열지 않아도 프라이빗 서브넷에 접근이 가능하다. -> 침입 경로가 될 수 있는 포트를 닫았다는 것에 의미를 둠
  2. RDS 보안 그룹을 서브넷으로 지정하여 지정된 서브넷이 아닌 경우 접근 할 수 없다는 장점이 있다. -> 정보의 기밀성을 확보
  3. 프라이빗 서브넷을 2개의 가용영역을 사용하여(us-east-a, us-east-c) 가용성을 챙겼다.
  4. Ssm 접속 및 행동한 부분에 관한 로그를 저장해서 로그를 통한 모니터링이 가능하다.

보안이 안된 부분

  1. 보안 그룹의 아웃바운드를 전체트래픽을 허용해 내부유출을 막기는 힘든 것 같다.
  2. AWS 아이디가 해킹당하면 공격자가 SSM을 통해 자유롭게 접근이 가능해진다. (삭제 방지 기능을 넣고 삭제할 수 있는 권한을 root계정만 가질 수 있게 하면 될 것 같다.)
  3. 웹 서버에 SSL을 적용시키지 못해 HTTP통신으로만 웹 서비스를 운영하게 됐다.
  4. RDS가 한개여서 RDS가 오류가 날 시 대체할 DB가 없어서 서비스 작동이 안된다.
  5. S3에서 백업파일을 다운받을 때 폴더의 권한 부족으로 오류가 난 부분을 해결하기 위해 data이하의 폴더의 권한을 chmod 777로 전 권한을 주었다. -> 누가 들어와도 폴더 수정이 가능해졌다.
  6. 탄력적 아이피로만 들어갔을 시 아파치 서버가 그대로 나와 서버에 따른 취약점 공격이 수월할 것 같다 (그누보드를 root경로에 못 넣었다.)