목표
- 프라이빗 리소스에 안전하게 연결할 수 있는 Virtual Private Cloud(VPC) 환경 구축
- 프라이빗 리소스가 인터넷에 연결할 수 있도록 설정
- VPC에 추가 보안 계층을 생성하여 프라이빗 리소스 안팎으로 전송되는 트래픽 제어
카페 직원이 웹 애플리케이션 서버를 원격으로 안전하게 관리할 수 있는 VPC 네트워크 생성(챌린지 #1)
퍼블릭 서브넷의 배스천 호스트에서 프라이빗 서브넷의 EC2 인스턴스에 안전하게 연결할 수 있도록 VPC 네트워크를 생성하고 구성해보자. 또한 NAT 게이트웨이를 생성하여 프라이빗 서브넷의 EC2 인스턴스가 인터넷에 액세스하도록 하자.
태스크 1: 퍼블릭 서브넷 생성
첫 번째 태스크는 Lab VPC에서 퍼블릭 서브넷을 만드는 것이다. 퍼블릭 서브넷을 만든 후에 인터넷 게이트웨이를 만들어 서브넷에서 인터넷으로의 통신을 허용한다. 인터넷으로 향하는 네트워크 트래픽이 인터넷 게이트웨이를 통해 라우팅되도록 서브넷에 연결된 라우팅 테이블을 업데이트한다.
1. 다음 조건을 충족하는 퍼블릭 서브넷을 만든다.
- Name tag: Public Subnet
- VPC: Lab VPC
- Availability Zone: 리전의 가용 영역 a를 선택(ex 리전이 us-east-1인 경우 us-east-1a를 선택)
- IPv4 CIDR block: 10.0.0.0/24
2. 새 인터넷 게이트웨이를 만들어 Lab VPC에 연결한다.
3. VPC에 생성된 라우팅 테이블을 편집한다.
- 0.0.0.0/0 경로를 추가
- 대상에서 이전 단계에서 생성한 인터넷 게이트웨이를 선택
태스크 2: 배스천 호스트 생성
이 태스크에서는 퍼블릭 서브넷에 배스천 호스트를 생성한다.
1. Amazon EC2 콘솔에서 Lab VPC의 Public Subnet에 다음 기준을 충족하는 EC2 인스턴스를 생성한다.
- Amazon Machine Image (AMI): Amazon Linux 2023 AMI (HVM)
- Instance type: t2.micro
- Auto-assign Public IP: 이 설정은 비활성화되어 있어야 합니다.
- Name: Bastion Host
- 다음 트래픽만 허용하는 Bastion Host SG라는 보안 그룹:
- Type: SSH
- Port: 22
- Source: 사용자의 IP 주소
- vockey 키 페어를 사용한다.
태스크 3: 배스천 호스트에 탄력적 IP 주소 할당
이 태스크에서는 배스천 호스트에 탄력적 IP 주소를 할당한다.
- 탄력적 IP 주소를 할당하고, 해당 주소를 배스천 호스트에 연결하여 IPv4를 통해 인터넷에서 연결할 수 있도록 한다.
태스크 4: 배스천 호스트 연결 테스트
이 태스크에서는 SSH 키(.pem 파일 또는 .ppk 파일)를 사용하여 배스천 호스트에 대한 SSH 연결을 테스트한다. 이 키는 이미 생성되어 있다.
1. SSH 키를 다운로드한다. 파일의 이름은 labuser.*로 지정된다.
- Microsoft Windows PuTTY 사용자: Download PPK
- macOS 또는 Linux 사용자: Download PEM
2. SSH를 사용하여 배스천 호스트에 연결한다.
3. 배스천 호스트에 대한 연결을 테스트한 후에는 터미널 또는 PuTTY를 닫으면 된다.
💡 Microsoft Windows 사용자 참고: PuTTY가 설치되어 있지 않으면 PuTTY를 다운로드하여 설치해야 한다. 연결이 만료되지 않도록 PuTTY를 구성하는 것을 권장한다. PuTTY 세션을 더 오랫동안 열어놓으려면 Seconds between keepalives를 30으로 설정하면 된다.
태스크 5: 프라이빗 서브넷 생성
이 태스크에서는 Lab VPC에 프라이빗 서브넷을 생성한다.
1. 콘솔에서 다음 조건을 충족하는 프라이빗 서브넷을 만듭니다.
- Name tag: Private Subnet
- Availability Zone: 퍼블릭 서브넷과 같음
- IPv4 CIDR block: 10.0.1.0/24
태스크 6: NAT 게이트웨이 생성
이 태스크에서는 프라이빗 서브넷의 리소스를 인터넷에 연결할 수 있도록 하는 NAT 게이트웨이를 생성한다.
1. 다음 조건을 충족하는 NAT 게이트웨이를 만든다.
- Name: Lab NAT Gateway
- Subnet: Public Subnet
2. 다음 조건을 충족하는 새 라우팅 테이블을 생성한다.
- Name tag: Private Route Table
- Destination: 0.0.0.0/0
- Target: NAT Gateway
3. 앞서 생성한 프라이빗 서브넷에 이 라우팅 테이블을 연결한다.
태스크 7: 프라이빗 서브넷에 EC2 인스턴스 생성
이 태스크에서는 프라이빗 서브넷에 EC2 인스턴스를 생성하고, 배스천 호스트로부터 수신되는 SSH 트래픽을 허용하도록 구성한다. 또한 이 인스턴스에 액세스할 새 키 페어를 생성한다.
1. vockey2라는 새 키 페어를 생성하고 적절한 .ppk(Microsoft Windows) 또는 .pem(macOS 또는 Linux)을 다운로드한다.
2. Lab VPC의 프라이빗 서브넷에 다음 조건을 충족하는 EC2 인스턴스를 생성한다.
- AMI: Amazon Linux 2023 AMI (HVM)
- Instance type: t2.micro
- Name: Private Instance
- 다음 트래픽만 허용한다.
- Type: SSH
- Port: 22
- Source: 배스천 호스트 보안 그룹
- 앞서 만든 vockey2 키 페어를 사용한다.
태스크 8: SSH 패스스루를 위한 SSH 클라이언트 구성
조금 전에 만든 프라이빗 인스턴스는 배스천 호스트와 다른 키 페어를 사용하기 때문에 SSH 패스스루를 사용하도록 SSH 클라이언트를 구성해야 한다. 이 작업을 수행하면 배스천 호스트에 키 페어를 업로드하지 않고 컴퓨터에 저장된 키 페어를 사용하여 프라이빗 인스턴스에 액세스할 수 있다.
1. PuTTY 다운로드 페이지에서 사용 가능한 Pageant를 다운로드하여 설치한다.
2. Pageant를 설치한 후 연다. Pageant는 Windows 서비스로 실행된다.
3. 다음 단계를 수행하여 PuTTY 형식 키를 Pageant로 가져온다.
- Windows 시스템 트레이에서 Pageant 아이콘을 두 번 클릭한다.
- Add Key를 선택한다.
- vockey2 키 페어를 생성할 때 다운로드한 .ppk 파일을 선택한다.
4. 앞서 다운로드한 첫 번째 vockey를 추가한다. 이제 두 개의 키가 나열될 것이다.
5. PuTTY의 Connection > SSH > Auth에서 Allow agent forwarding을 선택한다.
6. Auth를 확장하고 Credentials를 선택 - Private key file for authentication에서 Browse를 선택 - 다운로드한 labsuser.ppk 파일을 찾아 선택한 후 Open을 선택 - Accept를 선택
태스크 9: 배스천 호스트에서 SSH 연결 테스트
이 태스크에서는 배스천 호스트로부터 프라이빗 서브넷에서 실행 중인 EC2 인스턴스로의 SSH 연결을 테스트한다.
1. SSH를 사용해 배스천 호스트 인스턴스에 연결한다.
2. 프라이빗 인스턴스의 SSH 및 IP 주소를 사용하여 프라이빗 인스턴스에 연결한다.
ssh ec2-user@<private-ip-address-of-instance-in-private-subnet>
3. 이제 프라이빗 서브넷의 EC2 인스턴스에 연결되었으므로 인터넷 연결을 테스트한다.
ping 8.8.8.8
다음 다이어그램과 같이 퍼블릭 서브넷의 배스천 호스트와 프라이빗 서브넷의 EC2 인스턴스 간에 통신을 설정했다.
프라이빗 리소스에 대한 보안 계층 강화(챌린지 #2)
배스천 호스트에서 프라이빗 서브넷에 있는 EC2 인스턴스로의 보안 액세스를 구축했으므로 프라이빗 서브넷의 보안 계층을 강화해야 한다. 이 태스크를 완료하기 위해 사용자 지정 네트워크 ACL을 만들고 구성할 것이다.
태스크 10: 네트워크 ACL 생성
이 태스크에서는 프라이빗 서브넷으로 들어오고 나가는 트래픽을 제어할 사용자 지정 네트워크 ACL을 만든다. 네트워크 ACL을 사용하여 서브넷 간의 트래픽을 제어할 수 있다.
1. Amazon VPC 콘솔로 이동하여 Lab VPC의 기본 네트워크 ACL을 검사한다.
2. Lab VPC용으로 Lab Network ACL이라는 사용자 지정 네트워크 ACL을 생성한다.
💡 사용자 지정 네트워크 ACL의 기본 인바운드 및 아웃바운드 규칙은 모든 트래픽을 거부
3. 프라이빗 서브넷으로 들어오고 나가는 모든 트래픽을 허용하도록 사용자 지정 네트워크 ACL을 구성한다.
태스크 11: 사용자 지정 네트워크 ACL 테스트
1. Lab VPC의 퍼블릭 서브넷에 EC2 인스턴스를 생성한다. 인스턴스가 다음 조건을 충족해야 한다.
- AMI: Amazon Linux 2023 AMI (HVM)
- Instance type: t2.micro
- Name: Test Instance
- 보안 그룹을 통해 인스턴스에 대한 모든 ICMP - IPv4 인바운드 트래픽 허용
2. 프라이빗 인스턴스에서 테스트 인스턴스의 프라이빗 IP 주소에 연결할 수 있는지 테스트한다. Private Instance 터미널 창에서 다음 ping 명령을 실행한다.
ping <private-ip-address-of-test-instance>
3. ping 유틸리티를 실행 중인 상태로 둔다.
4. <private-ip-address-of-test-instance>/32에 대한 모든 ICMP - IPv4 트래픽을 거부하도록 사용자 지정 네트워크 ACL을 수정한다.
- 프라이빗 IP 주소의 끝에 /32를 추가
5. Private Instance 터미널 창에서 ping 명령이 응답하지 않아야 한다. 테스트 인스턴스에 대한 트래픽이 차단되었다.
이제 다음 다이어그램에 나와 있는 것처럼 프라이빗 서브넷에서 테스트 인스턴스로의 트래픽을 거부했다.
'ACC' 카테고리의 다른 글
[ACC] VPC 피어링 연결 (0) | 2024.10.07 |
---|---|
[ACC] VPC 만들기 (2) | 2024.09.30 |
[ACC] Amazon S3 bucket 웹사이트 (3) | 2024.09.25 |
[ACC] 데이터 마이그레이션 (0) | 2024.07.26 |
[ACC] RDS 만들기 (0) | 2024.07.24 |