[IaC] Ansible 실습을 위한 AWS Bastion Host 환경 구성
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