https://growth-coder.tistory.com/169
이전 포스팅에서 public subnet에 EC2 인스턴스를 생성해보았다.
이번 시간에는 private subnet에 RDS 인스턴스를 생성해서 EC2에서만 접근할 수 있도록 해 볼 예정이다.
RDS를 생성하기 전에 서브넷 그룹부터 만들어볼 예정이다. EC2의 경우 인스턴스 하나에 서브넷 하나를 할당했지만 RDS는 "서브넷 그룹"을 할당한다.
서브넷 그룹에 서로 다른 가용 영역에 존재하는 서브넷 두 개를 넣어서 할당할 예정이다.
이렇게 서로 다른 가용 영역을 두는 것을 멀티 AZ(avaialble zone)이라고 한다.
그런데 프리 티어에서는 RDS의 멀티 AZ 기능을 사용할 수 없다.
이번 포스팅에서 실제로는 단일 인스턴스에 하나의 가용 공간을 이용하겠지만 RDS를 만들기 위해서는 서로 다른 가용 영역에 존재하는 서븐세 두 개를 서브넷 그룹으로 묶어서 할당해야한다.
1. 서브넷 두 개 생성
이전 포스팅과 과정을 비슷하다. 이전 포스팅에서 만들었던 VPC를 선택한다.
적절한 이름을 지어주고 가용 영역은 "ap-northeast-2a"를 선택하고 CIDR 블록은 10.0.2.0/24로 설정하고 생성한다.
두 번째 서브넷을 생성한다. 가용 영역을 다르게 해야한다.
역시 이전 포스팅에서 만들었던 VPC를 선택한다.
적절한 이름을 지어주고 가용 영역은 "ap-northeast-2b"를 선택하고 CIDR 블록은 10.0.3.0/24로 설정하고 생성한다.
2. 서브넷 그룹 생성
RDS -> 서브넷 그룹에 들어간다.
DB 서브넷 그룹 생성을 클릭한다.
역시 이전에 만들었던 VPC를 선택한다.
방금 만든 서브넷 두 개를 추가한다. 가용 영역은 2a, 2b 모두 선택하고 서브넷도 모두 선택한다.
참고로 ap-northeast-2a에 이전 포스팅에서 만들었던 퍼블릭 서브넷도 포함되어있는데 그걸 선택하지 않도록 주의해야한다.
이번 포스팅에서 만든 private subnet 두 개를 선택해야한다.
3. 보안 그룹 생성
EC2와 마찬 가지로 보안 그룹을 생성한다. 보안 그룹은 인스턴스 단위에 적용되는 트래픽 제한이고 지금 만들 보안 그룹은 private subnet에 해당하는 보안 그룹이다.
public subnet에 있는 EC2와 달리 private subnet에 있는 데이터베이스는 EC2에서만 접근하도록 할 예정이므로 인바운드 규칙에 EC2의 보안 그룹을 선택하면 된다.
VPC -> 보안 그룹 -> 보안 그룹 생성에 들어간다.
이전 포스팅과 마찬가지로 VPC가 기본 default VPC로 설정되어있다. 삭제하고 우리가 만든 VPC를 선택한다.
인바운드 규칙의 유형은 MYSQL/Aurora를 선택한다.
소스에서는 EC2 인스턴스가 존재하는 보안 그룹을 선택한다.
인바운드 규칙은 다음과 같이 설정되어있어야 한다.
이렇게 설정하면 해당 서브넷에 존재하는 EC2 만이 이 데이터베이스에 접근할 수 있다.
역시 아웃바운드 규칙은 따로 설정할 필요는 없다.
사실 이러한 과정은 데이터베이스를 선택할 때 EC2 리소스에 연결하면 손쉽게 보안 그룹을 생성할 수 있다.
그런데 이전 포스팅에서 말했듯이 하나하나 직접 만들어보는 편이 이해하는데 좋을 것 같아서 직접 만드는 방식을 선택했다.
4. 데이터베이스 생성
RDS -> 데이터베이스 -> 데이터베이스 생성에 들어간다.
표준 생성 선택
Mysql 선택
프리티어 선택
원하는 식별자를 지어주고 마스터 사용자 이름과 암호는 기억해둔다.
인스턴스 구성과 스토리지는 그대로 둔다.
연결 부분에서는 우리가 만든 VPC를 선택한다.
우리는 보안 그룹을 미리 만들었기 때문에 "EC2 컴퓨팅 리소스에 연결 안 함"을 선택한다.
보안 그룹을 미리 만들지 말고 EC2 컴퓨팅 리소스에 연결을 선택하면 손쉽게 만들 수 있다.
서브넷 그룹 또한 만들었던 서브넷 그룹을 선택한다.
퍼블릭 액세스를 거부하고 미리 만들어두었던 보안 그룹을 선택한다.
우리는 프리 티어를 선택했기 때문에 멀티 AZ를 사용할 수 없어서 가용 영역을 선택해야한다.
2a를 선택한다.
나머지 설정은 그대로 두고 데이터베이스를 생성한다.
4. EC2에서 데이터베이스에 접근해보기
우선 이전 포스팅에서 했던 대로 ssh로 EC2에 원격으로 접속한다.
그리고 데이터베이스에 접근하기 위해서 우리가 생성한 데이터베이스에서 다음과 같은 정보들이 필요하다.
- 데이터베이스 엔드포인트
- 마스터 사용자 이름
- 암호
이제 다음 명령어를 입력하면 password를 입력하라고 할 것이다.
mysql -u [마스터 사용자 이름] -p -h [데이터베이스 엔드포인트]
암호를 입력해주면 mysql에 접속이 될 것이다.
mysql 명령어들을 한번 입력해보자.
이렇게 public subnet에 EC2를 두고 private subnet에 rds를 생성해서 보안을 강화해보았다.
외부에서는 private subnet에 접근할 수 없고 EC2를 통해서만 접근할 수 있다.
정리
- 서로 다른 가용 영역에 존재하는 서브넷 두 개를 생성한다.
- 두 서브넷을 서브넷 그룹으로 묶는다.
- EC2가 존재하는 보안 그룹을 인바운드 규칙으로 설정한 보안 그룹을 생성한다.
- 데이터베이스를 생성할 때 만들어두었던 VPC와 서브넷 그룹과 보안 그룹을 선택해서 생성한다.
- EC2에서 데이터베이스에 접근해본다.
'공부 > AWS' 카테고리의 다른 글
[AWS] HTTPS로 서버 배포하기 1편 (session manager 방식으로 private EC2 접근하기) (0) | 2023.05.22 |
---|---|
[AWS] EC2 속도가 급격하게 저하되는 현상 (time out) (0) | 2023.05.16 |
[AWS] public subnet에 EC2, private subnet에 RDS 인스턴스 생성하기 (1) (0) | 2023.05.02 |
[AWS][Spring] Amazon Lex 스프링 부트에 배포하기 (2) (0) | 2023.04.17 |
[AWS][Lex] Amazon Lex 사용해서 챗봇 구현하기 (1) (0) | 2023.04.13 |
댓글