IaC

[IaC] Ansible 실습을 위한 AWS Bastion Host 환경 구성

Ate1es 2022. 10. 11. 16:53

Bastion Host


AWS 리소스 구성 후 관리자가 Private Subnet에 있는 리소스에 접근을 해야하는 경우가 생길 수 있다. 이럴 때 외부에서 직접적인 접근이 불가능 하기 때문에 Public Subnet에 Bastion Host를 구성해서 해당 리소스를 통해 Private 리소스에 접근할 수 있다.

 

즉, Bastion Host는 Public Subnet에 존재하면서 외부와 Private 리소스를 연결해주는 통로 역할이라고 볼 수 있다.

 

 

Bastion Host 환경 구성에 사용한 리소스

VPC CIDR - 10.192.0.0/16
Public Subnet CIDR - 10.192.10.0/24
Private Subnet CIDR - 10.192.20.0/24
Internet Gateway VPC와 Attach
라우팅테이블 환경에 맞게 알아서 세팅
Bastion Host(EC2) 퍼블릭에서 Bastion Host역할을 할 EC2 인스턴스
Private Resource Bastion Host를 통해 연결될 Private Subnet의 리소스들

 

글 맨 아래 환경 구성에 사용된 CloudFormation 파일 있음. (keypair 나 보안그룹 인바운드 정책 변경 후 사용)

 

Bastion Host 접속 확인


Bastion Host(퍼블릭 EC2)에 접속 확인

ssh -i "keyAnsible.pem" centos@3.39.255.195

 

접속이 정상적으로 이루어 진다면, Private 리소스에 접근하기 위해 키페어를 Bastion Host 로 옮겨 줘야한다

scp -i public-ec2-keypair.pem ./private-ec2-keypair.pem ec2-user@<public-ec2의 퍼블릭 IPv4 주소>:~/

 

키페어를 잘 옮겼다면 다시 Bastion Host에 ssh로 접속해서 ls 입력해보자

 

아래와 같이 키페어 파일이 존재해야한다.

 

아래 Private Resource 는 퍼블릭 IP가 없고 Private Subnet에 존재하기 때문에 외부에서 바로 접근이 불가능 하다.

이 친구에게 Bastion Host를 통해 접근해보자

 

이 Resource의 Private IP 주소는 10.192.20.217이라고 나와있다.

 

Bastion Host 쉘에서 아래 명령어를 통해 Private Resource에 접근 시도

ssh -i <keypair> <username>@<private-ec2의 프라이빗 IPv4 주소>

 

아래와 같이 Bastion Host에서 Private Resource 에 접근된 것을 확인할 수 있다.

 

다음엔 이 인프라를 통해 Bastion Host에 Ansible을 설치하고 aws 인프라 보안 자동화를 실습해보겠다.

 

 

환경 구성에 사용한 CloudFormation yaml

(실습용 환경이라 CloudFormation을 사용하는게 더 비효율적이지만 연습을 위해서 직접 작성 해봄)

 

https://github.com/Ate1es/CloudFormation-template-set/blob/main/bastion-host-for-ansible.yaml

 

GitHub - Ate1es/CloudFormation-template-set: 테스트용 CloudFormation 템플릿 모음

테스트용 CloudFormation 템플릿 모음. Contribute to Ate1es/CloudFormation-template-set development by creating an account on GitHub.

github.com