부트캠프 과정에서 AWS VPC에 대한 이론 수업 후 관련해서 VPC를 만드는 과제의 실습 내용을 기록해본다.
이론에 대한 내용은 차차 정리해서 포스팅할 계획이다.
혹시 틀린 부분이 있다면 자유롭게 댓글로 피드백 남겨주시면 감사하겠습니다!
[과제 구현 순서]
1. VPC 생성
2. 서브넷 4개 생성: Public 2개 , Private 2개
- 2개씩 만드는 이유는 Multi AZ 설정을 위함이다 => 가용성 확보
- 한쪽의 AZ에서 장애가 생기면 다른 한쪽의 AZ로 커버하기 위함.
3. 서브넷 라우팅테이블 연동
4. IGW 연결 전, 테스트 인스턴스 생성 후 퍼블릭 인터넷 연결 여부 실패 확인
5. Public 서브넷에 인터넷 경로 구성 : IGW
6. EC2 연결 테스트
7. private 서브넷에 EC2 생성
8. Bastion host로 Private 서브넷 접속
9. NAT Gateway 생성

과제로 구현한 VPC를 시각화해보았다.
이번 과제에서는 가용영역 한 곳에서만 인스턴스를 만들어보았고
두 가용영역을 논리적으로 연결하는 것까지는 시도하지 않았다.
VPC 생성
VPC 창에 들어가면, AWS 계정을 생성하면 기본적으로 이름이 없는 VPC와 서브넷이 생성되어 있다.


여기서 'VPC 생성' 을 눌러준다.

'VPC등'을 보면 VPC 이외에 구성요소인 서브넷, 라우팅 테이블 등을 만들어줄 수 있다.
하지만 과제 목적 상 하나씩 구축해보기 위해 'VPC만'을 선택해주었다.
설정은 다음과 같이 해주었다.

IPv4 CIDR은 10.0.0.0/16으로 큰 IP대역을 가진 VPC 생성
따로 IPv6 블록은 설정하지 않았다.
VPC를 생성하고나면 AWS에서 기본적으로 라우팅 테이블, 네트워크 ACL, 보안그룹을 만들어준다.
서브넷 생성
VPC > 서브넷 >서브넷 생성

방금 만들어준 VPC를 연결해준다.

위와 같이 첫 번째 public 서브넷을 생성해주었다.
Cidr를 직접 만들어볼 수 있는 페이지.

같은 가용영역에 들어갈 private 서브넷을 생성해준다.
이때 가용영역이 위 퍼블릭 서브넷과 같은지, Ipv4 subnet CIDR block이 중첩되지 않는지 확인하자.

다른 가용영역에도 public subnet 과 private subnet을 생성해준다.



서브넷을 생성하면 AWS에서 자동으로 네트워크ACL(NACL)과 라우팅 테이블을 연결시켜준다.


라우팅 테이블 연결
라우팅 테이블은 트래픽이 어디로 가야하는 지 알려주는 이정표로 IP가 어디로 가야하는지에 대한 답변이다.
AWS: 라우팅 테이블에는 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정하는 라우팅이라는 규칙 세트가 포함되어 있습니다.
먼저 private 서브넷들끼리 연결하기 위한 라우팅 테이블을 만들어주자
vpc > 라우팅테이블

우선 VPC를 생성할 때 기본으로 생성된 라우팅테이블의 이름을 'my-private-subnet-rt'로 바꿔주었다.
해당 라우팅테이블ID>서브넷 연결> 명시적 서브넷 연결에서 private subnet들을 연결해주자

다음으로 public 서브넷 라우팅 테이블도 생성해주자

서브넷 연결 > 명시적 서브넷 연결 > 서브넷 연결 편집에서 public서브넷들을 연결해준다.

이렇게 private 서브넷과 public 서브넷 각각 라우팅 테이블 연결을 완료해주었다.
EC2 테스트용 인스턴스 만들기
console> ec2>인스턴스 시작
다음 사항들만 설정해주고 나머지는 그대로 둔다.


만들어둔 VPC로 연결해주고 퍼블릭 서브넷 중 1개를 연결해준다.
퍼블릭 IP 자동할당은 활성화로 설정해준다. 이는 서브넷에서 직접 설정이 가능한데,
서브넷 > 작업> 세부 정보보기> 서브넷 설정 편집 > 자동할당 IP 활성화 를 해주면 다음부터는 활성화가 기본으로 되어 있다.

본 과제에서는 SSH 접근 테스트만 할 것이기 때문에 22 포트만 열어주는 설정을 해주었다.
내 IP로 할 경우 인스턴스가 연결되지 않았다 => 소스유형은 Anywhere IPv4(0.0.0.0/0)로 설정!
인스턴스 접근 시도해보기
아직 public 서브넷을 IGW로 연결해주지 않았기 때문에 EC2 인스턴스에 접근이 안될 것이다.
EC2> 인스턴스> 인스턴스 ID > 인스턴스에 연결

연결을 시도해보면

의도한대로 연결 실패하는 걸 볼 수 있다.
IGW
VPC는 private network이기 때문에 외부 인터넷과 연결해주지 않으면 외부 접근이 되지 않는 인트라넷이다.
따라서 IGW를 public 서브넷과 연결하여 인터넷과 통신하도록 만들어주자
AWS 공식문서: 인터넷 액세스 활성화
- 인터넷 게이트웨이를 생성하여 VPC에 연결합니다.
- 인터넷 바인딩된 트래픽을 인터넷 게이트웨이로 전달하는 라우팅을 서브넷의 라우팅 테이블에 추가합니다.
- 서브넷의 인스턴스에 퍼블릭 IPv4 주소나 IPv6 주소가 있는지 확인합니다.
- 네트워크 액세스 제어 목록 및 보안 그룹 규칙에서 원하는 인터넷 트래픽이 인스턴스로, 그리고 인스턴스에서 흐르도록 허용되는지 확인합니다.
VPC> 인터넷 게이트웨이 >인터넷 게이트웨이 생성


VPC 연결을 해준다.
이때 목록에 디폴트 vpc가 뜨지 않는 이유는 이미 IGW를 가지고 있기 때문이다.
하나의 VPC는 하나의 IGW를 가질 수 있다.
이제 라우팅 테이블로 가서 IGW와 public 서브넷을 연결 시켜주자
라우팅테이블> my-public-subnet-rt-라우팅 테이블ID> 라우팅 >라우팅 편집

10.0.0.0/16: vpc 안에 있는 트래픽이면 로컬 안으로 다른 서브넷으로 간다
0.0.0.0/0: 로컬 트래픽이 아닌 것은 인터넷 게이트웨이로 가도록 설정해준다. (자동으로 뜨는 설정)


다시 EC2 연결을 시도해보면 성공적으로 연결된다!
테스트를 위해 ping google.com을 해보면 정상적으로 수행되는 걸 볼 수 있다.
혹시라도 연결이 잘 되지 않는다면 EC2> 인스턴스> 인스터스id> 보안> 인바운드 규칙> 보안그룹 에서 인바운드 규칙 소스를 확인해보자.
Private 서브넷에 EC2 생성
인스턴스> 인스턴스 시작
이름은 알아서 짓고, 키페어 생성과 네트워크 설정만 건드린다.

키페어 생성-> 자동으로 다운된 파일을 잘 저장해두자

만들어준 VPC를 연결해주고 서브넷은 프라이빗으로 연결해준다.
프라이빗 서브넷이기 때문에 퍼블릭IP자동할동은 끈다.
보안그룹은 우선 default를 선택해준다.
EC2 생성 후 실행 중으로 바뀌면 연결에 들어가본다

다음과 같이 인스턴스에 퍼블릭 IPv4가 없다고 한다. (퍼블릭 IP 자동할당을 껐었다)
이는 퍼블릭 주소가 할당되었어도 연결이 불가능하다.
왜냐하면 private 서브넷 안에 있기 때문에 서브넷의 라우팅 테이블이 외부(인터넷)으로의 경로를 가지고 있지 않기 때문이다.
public 서브넷에서 Private 서브넷으로 접속하기 위해 Public 서브넷에 위치하며, Private 서브넷과 통신을 도와주는 Bastion host를 사용한다.

먼저 private 서브넷 보안 그룹의 규칙을 변경 해주어야 한다
인바운드 규칙 편집에 들어가서, Public EC2의 보안그룹으로 부터만 허용 가능하도록 설정해준다.

이는 퍼블릭 서브넷에 생성했던 인스턴스>인스턴스ID > 보안> 보안그룹에서 보안그룹ID를 복사해 붙여넣으면 된다.
퍼블릭 서브넷에 위치한 인스턴스를 연결한 후 private 서브넷으로 연결하는 과정이다.


private 서브넷을 생성할 때 다운받은 키페어.pem을 열어 내용을 복붙해준다.
ctrl+x > y > enter 로 저장.
chmod 400 demo-my-vpc-keypair.pem 해당 파일에 권한을 준다 (나에게만 읽기 권한을 줌)


private 서브넷에 만들어준 인스턴스의 프라이빗 IPv4 주소를 복사한 후
ssh -i 만들어준keypair.pem ec2-user@프라이빗IPv4주소
를 입력해준다.
그러면 정상적으로 프라이빗 서브넷 안의 인스턴스로 연결이 완료되었다.

외부 인터넷으로 http요청을 보내보지만 응답이 오지 않는다.
private 서브넷에서 외부로 요청을 보내는 경로가 구성되지 않았기 때문이다.
이를 위해 NAT gateway를 생성해준다.
VPC> NAT gateways> NAT 게이트웨이 생성

NAT 게이트웨이를 연결하기 위해 라우팅 테이블을 편집해주자
VPC> 라우팅테이블> private-subnet >라우팅 편집

라우팅 추가 > 외부로 가는 경로는 NAT gateway로 연결해준다

정상적으로 http요청이 보내지는 걸 확인할 수 있다!
참고
https://kimjingo.tistory.com/179
쉽게 설명하는 AWS기초강좌
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html
https://bluese05.tistory.com/45
'웹개발 > Server' 카테고리의 다른 글
오라클 클라우드 기본개념 정리 -1 Physical Architecture Concepts (0) | 2024.03.05 |
---|
부트캠프 과정에서 AWS VPC에 대한 이론 수업 후 관련해서 VPC를 만드는 과제의 실습 내용을 기록해본다.
이론에 대한 내용은 차차 정리해서 포스팅할 계획이다.
혹시 틀린 부분이 있다면 자유롭게 댓글로 피드백 남겨주시면 감사하겠습니다!
[과제 구현 순서]
1. VPC 생성
2. 서브넷 4개 생성: Public 2개 , Private 2개
- 2개씩 만드는 이유는 Multi AZ 설정을 위함이다 => 가용성 확보
- 한쪽의 AZ에서 장애가 생기면 다른 한쪽의 AZ로 커버하기 위함.
3. 서브넷 라우팅테이블 연동
4. IGW 연결 전, 테스트 인스턴스 생성 후 퍼블릭 인터넷 연결 여부 실패 확인
5. Public 서브넷에 인터넷 경로 구성 : IGW
6. EC2 연결 테스트
7. private 서브넷에 EC2 생성
8. Bastion host로 Private 서브넷 접속
9. NAT Gateway 생성

과제로 구현한 VPC를 시각화해보았다.
이번 과제에서는 가용영역 한 곳에서만 인스턴스를 만들어보았고
두 가용영역을 논리적으로 연결하는 것까지는 시도하지 않았다.
VPC 생성
VPC 창에 들어가면, AWS 계정을 생성하면 기본적으로 이름이 없는 VPC와 서브넷이 생성되어 있다.


여기서 'VPC 생성' 을 눌러준다.

'VPC등'을 보면 VPC 이외에 구성요소인 서브넷, 라우팅 테이블 등을 만들어줄 수 있다.
하지만 과제 목적 상 하나씩 구축해보기 위해 'VPC만'을 선택해주었다.
설정은 다음과 같이 해주었다.

IPv4 CIDR은 10.0.0.0/16으로 큰 IP대역을 가진 VPC 생성
따로 IPv6 블록은 설정하지 않았다.
VPC를 생성하고나면 AWS에서 기본적으로 라우팅 테이블, 네트워크 ACL, 보안그룹을 만들어준다.
서브넷 생성
VPC > 서브넷 >서브넷 생성

방금 만들어준 VPC를 연결해준다.

위와 같이 첫 번째 public 서브넷을 생성해주었다.
Cidr를 직접 만들어볼 수 있는 페이지.

같은 가용영역에 들어갈 private 서브넷을 생성해준다.
이때 가용영역이 위 퍼블릭 서브넷과 같은지, Ipv4 subnet CIDR block이 중첩되지 않는지 확인하자.

다른 가용영역에도 public subnet 과 private subnet을 생성해준다.



서브넷을 생성하면 AWS에서 자동으로 네트워크ACL(NACL)과 라우팅 테이블을 연결시켜준다.


라우팅 테이블 연결
라우팅 테이블은 트래픽이 어디로 가야하는 지 알려주는 이정표로 IP가 어디로 가야하는지에 대한 답변이다.
AWS: 라우팅 테이블에는 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정하는 라우팅이라는 규칙 세트가 포함되어 있습니다.
먼저 private 서브넷들끼리 연결하기 위한 라우팅 테이블을 만들어주자
vpc > 라우팅테이블

우선 VPC를 생성할 때 기본으로 생성된 라우팅테이블의 이름을 'my-private-subnet-rt'로 바꿔주었다.
해당 라우팅테이블ID>서브넷 연결> 명시적 서브넷 연결에서 private subnet들을 연결해주자

다음으로 public 서브넷 라우팅 테이블도 생성해주자

서브넷 연결 > 명시적 서브넷 연결 > 서브넷 연결 편집에서 public서브넷들을 연결해준다.

이렇게 private 서브넷과 public 서브넷 각각 라우팅 테이블 연결을 완료해주었다.
EC2 테스트용 인스턴스 만들기
console> ec2>인스턴스 시작
다음 사항들만 설정해주고 나머지는 그대로 둔다.


만들어둔 VPC로 연결해주고 퍼블릭 서브넷 중 1개를 연결해준다.
퍼블릭 IP 자동할당은 활성화로 설정해준다. 이는 서브넷에서 직접 설정이 가능한데,
서브넷 > 작업> 세부 정보보기> 서브넷 설정 편집 > 자동할당 IP 활성화 를 해주면 다음부터는 활성화가 기본으로 되어 있다.

본 과제에서는 SSH 접근 테스트만 할 것이기 때문에 22 포트만 열어주는 설정을 해주었다.
내 IP로 할 경우 인스턴스가 연결되지 않았다 => 소스유형은 Anywhere IPv4(0.0.0.0/0)로 설정!
인스턴스 접근 시도해보기
아직 public 서브넷을 IGW로 연결해주지 않았기 때문에 EC2 인스턴스에 접근이 안될 것이다.
EC2> 인스턴스> 인스턴스 ID > 인스턴스에 연결

연결을 시도해보면

의도한대로 연결 실패하는 걸 볼 수 있다.
IGW
VPC는 private network이기 때문에 외부 인터넷과 연결해주지 않으면 외부 접근이 되지 않는 인트라넷이다.
따라서 IGW를 public 서브넷과 연결하여 인터넷과 통신하도록 만들어주자
AWS 공식문서: 인터넷 액세스 활성화
- 인터넷 게이트웨이를 생성하여 VPC에 연결합니다.
- 인터넷 바인딩된 트래픽을 인터넷 게이트웨이로 전달하는 라우팅을 서브넷의 라우팅 테이블에 추가합니다.
- 서브넷의 인스턴스에 퍼블릭 IPv4 주소나 IPv6 주소가 있는지 확인합니다.
- 네트워크 액세스 제어 목록 및 보안 그룹 규칙에서 원하는 인터넷 트래픽이 인스턴스로, 그리고 인스턴스에서 흐르도록 허용되는지 확인합니다.
VPC> 인터넷 게이트웨이 >인터넷 게이트웨이 생성


VPC 연결을 해준다.
이때 목록에 디폴트 vpc가 뜨지 않는 이유는 이미 IGW를 가지고 있기 때문이다.
하나의 VPC는 하나의 IGW를 가질 수 있다.
이제 라우팅 테이블로 가서 IGW와 public 서브넷을 연결 시켜주자
라우팅테이블> my-public-subnet-rt-라우팅 테이블ID> 라우팅 >라우팅 편집

10.0.0.0/16: vpc 안에 있는 트래픽이면 로컬 안으로 다른 서브넷으로 간다
0.0.0.0/0: 로컬 트래픽이 아닌 것은 인터넷 게이트웨이로 가도록 설정해준다. (자동으로 뜨는 설정)


다시 EC2 연결을 시도해보면 성공적으로 연결된다!
테스트를 위해 ping google.com을 해보면 정상적으로 수행되는 걸 볼 수 있다.
혹시라도 연결이 잘 되지 않는다면 EC2> 인스턴스> 인스터스id> 보안> 인바운드 규칙> 보안그룹 에서 인바운드 규칙 소스를 확인해보자.
Private 서브넷에 EC2 생성
인스턴스> 인스턴스 시작
이름은 알아서 짓고, 키페어 생성과 네트워크 설정만 건드린다.

키페어 생성-> 자동으로 다운된 파일을 잘 저장해두자

만들어준 VPC를 연결해주고 서브넷은 프라이빗으로 연결해준다.
프라이빗 서브넷이기 때문에 퍼블릭IP자동할동은 끈다.
보안그룹은 우선 default를 선택해준다.
EC2 생성 후 실행 중으로 바뀌면 연결에 들어가본다

다음과 같이 인스턴스에 퍼블릭 IPv4가 없다고 한다. (퍼블릭 IP 자동할당을 껐었다)
이는 퍼블릭 주소가 할당되었어도 연결이 불가능하다.
왜냐하면 private 서브넷 안에 있기 때문에 서브넷의 라우팅 테이블이 외부(인터넷)으로의 경로를 가지고 있지 않기 때문이다.
public 서브넷에서 Private 서브넷으로 접속하기 위해 Public 서브넷에 위치하며, Private 서브넷과 통신을 도와주는 Bastion host를 사용한다.

먼저 private 서브넷 보안 그룹의 규칙을 변경 해주어야 한다
인바운드 규칙 편집에 들어가서, Public EC2의 보안그룹으로 부터만 허용 가능하도록 설정해준다.

이는 퍼블릭 서브넷에 생성했던 인스턴스>인스턴스ID > 보안> 보안그룹에서 보안그룹ID를 복사해 붙여넣으면 된다.
퍼블릭 서브넷에 위치한 인스턴스를 연결한 후 private 서브넷으로 연결하는 과정이다.


private 서브넷을 생성할 때 다운받은 키페어.pem을 열어 내용을 복붙해준다.
ctrl+x > y > enter 로 저장.
chmod 400 demo-my-vpc-keypair.pem 해당 파일에 권한을 준다 (나에게만 읽기 권한을 줌)


private 서브넷에 만들어준 인스턴스의 프라이빗 IPv4 주소를 복사한 후
ssh -i 만들어준keypair.pem ec2-user@프라이빗IPv4주소
를 입력해준다.
그러면 정상적으로 프라이빗 서브넷 안의 인스턴스로 연결이 완료되었다.

외부 인터넷으로 http요청을 보내보지만 응답이 오지 않는다.
private 서브넷에서 외부로 요청을 보내는 경로가 구성되지 않았기 때문이다.
이를 위해 NAT gateway를 생성해준다.
VPC> NAT gateways> NAT 게이트웨이 생성

NAT 게이트웨이를 연결하기 위해 라우팅 테이블을 편집해주자
VPC> 라우팅테이블> private-subnet >라우팅 편집

라우팅 추가 > 외부로 가는 경로는 NAT gateway로 연결해준다

정상적으로 http요청이 보내지는 걸 확인할 수 있다!
참고
https://kimjingo.tistory.com/179
쉽게 설명하는 AWS기초강좌
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html
https://bluese05.tistory.com/45
'웹개발 > Server' 카테고리의 다른 글
오라클 클라우드 기본개념 정리 -1 Physical Architecture Concepts (0) | 2024.03.05 |
---|