Module Project 1
최종 아키텍처

서브넷
서브넷의 경우 WebServer를 운영하기 위한 Private Subnet 2개와 RDS를 위한 6개의 서브넷을 생성했다.
#Private 서브넷의 경우 단일 실패 지점을 없애기 위해 2개를 만들어 분산 운영을 하기 위함이다.
#RDS 서브넷의 경우 리전마다 다르지만 나의 경우 버지니아 북부(us-east-1)를 사용하여 6개의 가용영역이 존재했다.

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

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

S3

EC2 AMI
이미지의 경우 아래와 같은 순서로 만들었다.
1. 아파치 서버에 그누보드 설치
2. RDS 연결
3. RDS 연동
4. S3 버킷에서의 다운로드를 위한 폴더 권한 상승
5. crontab을 이용한 자동 동기화


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


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


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


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

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

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



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

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

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

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

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

2. 업로드 확인

3. 세션 확인 및 접속

4. IP 비교


5. 동기화 확인

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


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



보안이 잘 된 부분
- 프라이빗 서브넷의 보안 그룹에서 SSH 포트를 열지 않아도 프라이빗 서브넷에 접근이 가능하다. -> 침입 경로가 될 수 있는 포트를 닫았다는 것에 의미를 둠
- RDS 보안 그룹을 서브넷으로 지정하여 지정된 서브넷이 아닌 경우 접근 할 수 없다는 장점이 있다. -> 정보의 기밀성을 확보
- 프라이빗 서브넷을 2개의 가용영역을 사용하여(us-east-a, us-east-c) 가용성을 챙겼다.
- Ssm 접속 및 행동한 부분에 관한 로그를 저장해서 로그를 통한 모니터링이 가능하다.
보안이 잘 안된 부분
- 보안 그룹의 아웃바운드를 전체트래픽을 허용해 내부유출을 막기는 힘든 것 같다.
- AWS 아이디가 해킹당하면 공격자가 SSM을 통해 자유롭게 접근이 가능해진다. (삭제 방지 기능을 넣고 삭제할 수 있는 권한을 root계정만 가질 수 있게 하면 될 것 같다.)
- 웹 서버에 SSL을 적용시키지 못해 HTTP통신으로만 웹 서비스를 운영하게 됐다.
- RDS가 한개여서 RDS가 오류가 날 시 대체할 DB가 없어서 서비스 작동이 안된다.
- S3에서 백업파일을 다운받을 때 폴더의 권한 부족으로 오류가 난 부분을 해결하기 위해 data이하의 폴더의 권한을 chmod 777로 전 권한을 주었다. -> 누가 들어와도 폴더 수정이 가능해졌다.
- 탄력적 아이피로만 들어갔을 시 아파치 서버가 그대로 나와 서버에 따른 취약점 공격이 수월할 것 같다 (그누보드를 root경로에 못 넣었다.)