본문 바로가기
IaC

Ansible을 사용한 보안 자동화 실습(with. AWS)

by Ate1es 2022. 10. 12.

Ansible?


앤서블은 오픈소스 소프트웨어 프로비저닝, 구성 관리 도구이다. 유닉스 계열 시스템에서 실행됩니다. 플레이북이라는 것에 실행할 구성을 정의 및 선언해놓으면, 필요할 때 마다 그 플레이북을 자동으로 실행시킬 수 있습니다.

 

리눅스 서버 100대의 root 계정 비밀번호를 바꿔야 한다면 어떻게 해야 할까? 기존에는 쉘스크립트를 통해 100번 실행시켜 바꿨을 것이다.

 

Ansible을 사용하면 마스터 노드를 통해 100대의 노드에 비밀번호 변경 작업을 한 플레이북의 실행으로 끝낼 수 있다. 이것이 Ansible의 위력이라고 볼 수있다.

 

실습 환경 구성 리소스


앤서블 마스터 노드(퍼블릭 서브넷) IP -  43.201.58.59
웹서버 1번(프라이빗 서브넷) IP -  10.192.20.47
WAS 서버 1번(프라이빗 서브넷) IP -  10.192.20.61
DB 서버 1번(프라이빗 서브넷) IP -  10.192.20.12

실습 환경의 디테일한 구성은 다음 포스팅을 참조하라

 

https://webhacking-noriter.tistory.com/63

 

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

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

webhacking-noriter.tistory.com

 


 

 

이제 퍼블릭 서브넷의 앤서블 마스터 노드(Cent OS 7)에 앤서블을 설치하자.

yum install -y ansible

설치가 완료되었다면, 다음 명령어를 입력해 정상적으로 설치되었는지 확인

sudo ansible --version

아래와 같이 버전이 나온다면 설치는 끝

 

우린 앤서블을 통해 WEB서버 1개, WAS 서버 1개, DB 서버 1개 -- 총 3개의 서버를 자동 관리할 것이다.

 

그러므로 우리의 타깃 서버는 다음 3개의 IP이다. IP로 작업을 하다보면 누가 누군지 모르기 때문에 

/etc/hosts에 먼저 매핑을 해주겠다.

IP -  10.192.20.47
IP -  10.192.20.61
IP -  10.192.20.12

/etc/hosts 파일에 다음과 같이 입력하여, 각각의 관리해야할 리소스들을 매핑해주었다.

 

다음은 /etc/ansible/hosts 파일을 정의할 차례이다.

 

이 파일에는 관리를 위한 그룹을 지정할 수 있다.

현재 나는 웹서버 1개, WAS 서버 1개, DB 서버 1개를 각각 [WEB], [WAS], [DB]라는 그룹에 넣어준것이다.

 

만약 현재 인프라에서 웹서버가 1개 더 추가된다면, 해당 IP를 /etc/hosts 에 WEB02로 매핑한다음 

/etc/ansible/hosts 파일에 [WEB] 그룹에 추가해준다면 앤서블로 추가된 웹서버까지 한번에 관리할 수 있을 것이다.

 

이제 마스터 노드에서 각각 노드 서버들로의 ssh 자동 로그인을 위해서 비대칭 키를 생성한다. 해당 비대칭키를 타깃 노드로 복사해서 앤서블 마스터 노드가 각각 관리할 타깃 노드에 자동 로그인을 할 수 있게 한다.

 

마스터 노드에서 다음 명령어를 사용하여 비대칭 키를 생성한다. ( 명령어 입력후 무조건 엔터만 )

ssh-keygen -t rsa -b 2048

명령어 실행 후 ~/.ssh 경로에 id_rsa.pub 이라는 공개 키가 생겼을 것이다. 해당 키를 타깃 노드로 복사해준다.

ssh-copy-id -i id_rsa.pub WEB01

WAS01 , DB01 에도 똑같이 작업 해준다.

 

 

플레이북 정의 - change_password.yml

task 1번 - /etc/ansible/hosts 에 [WEB] 그룹에 존재하는 타깃 노드들의 root 유저의 password 를 qwe123123으로 변경

task 2번 - /etc/ansible/hosts 에 [WAS] 그룹에 존재하는 타깃 노드들의 root 유저의 password를 qwe321321로 변경

 

저장 후에 앤서블을 실행 시킨다.

 

ansible-playbook change_password.yml

아래 처럼 두개의 타깃 노드에서 changed가 정상적으로 실행된 것을 확인할 수 있다.

'IaC' 카테고리의 다른 글

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