KIMKYUTAE.COM · ©
Ansible이란? 여러 서버의 설정과 보안을 자동화하는 도구
서버를 운영하다 보면 같은 프로그램을 설치하거나 설정을 바꾸는 일이 반복된다. 대상이 몇 대라면 직접 접속해 처리할 수 있겠지만, 수십 대로 늘어나면 작업 시간도 길어지고 일부 서버의 설정을 빠뜨리기 쉽다.
Ansible은 이런 작업을 미리 적어두고 여러 서버에 적용하는 오픈소스 자동화 도구이다. 프로그램 설치부터 계정 관리, 보안 설정까지 반복되는 작업을 묶어서 실행할 수 있다.
Ansible의 역할
Ansible(앤서블)에는 원하는 서버 상태를 정의해두고 실행할 때마다 그 상태에 맞추는 기능이 있다. 서버 외에도 지원되는 모듈과 API를 통해 클라우드 서비스나 네트워크 장비를 관리할 수 있다.
예를 들어 Ubuntu 서버 20대에 웹 서버 프로그램을 설치한다면, 대상 서버 목록과 설치 작업을 파일로 작성해 실행하는 방식이다. 다음에 서버가 추가되더라도 같은 작업 파일을 다시 사용할 수 있다.
관리 대상마다 전용 Ansible 에이전트를 상시 설치해둘 필요가 없다는 점도 특징이다. Linux 서버에는 주로 SSH로 접속한다. Windows 서버는 WinRM 기반의 psrp·winrm 연결 플러그인이나 지원되는 SSH 연결을 사용한다. 접속 계정과 권한은 미리 준비해야 하며, Linux용 모듈 상당수는 대상 서버에 Python 실행 환경도 필요하다.
작동 방식
기본 구성을 보면 대상 목록, 작업 지시서, 작업을 처리하는 기능으로 나눌 수 있다. 각각 Inventory, Playbook, Module이라고 부른다.
- Inventory(인벤토리): 어떤 서버에 작업할지 정리한 목록이다. 웹 서버, 데이터베이스 서버처럼 그룹으로 묶을 수 있다.
- Playbook(플레이북): 서버에서 무엇을 해야 하는지 YAML 형식으로 적은 작업 지시서이다.
- Module(모듈): 프로그램 설치, 파일 변경, 서비스 실행처럼 실제 작업을 처리하는 기능이다.
관리자가 Playbook을 실행하면 Ansible은 Inventory에서 작업 대상을 확인하고 서버에 접속한다. 이후 모듈을 실행해 필요한 변경을 적용하고 결과를 돌려준다. 실행 결과에는 정상 처리, 변경 발생, 실패, 접속 불가 등의 상태가 표시된다.

대상 목록과 작업 지시서를 읽어 서버별로 필요한 설정을 적용한다.
설정 예시
Ubuntu 서버 두 대에 Nginx라는 웹 서버 프로그램을 설치하는 예이다. 작업 대상은 inventory.ini 파일에 적는다.
[webservers]
web01.example.com
web02.example.com
다음은 설치할 프로그램과 실행 상태를 지정하는 web.yml 파일이다.
- name: 웹 서버 설정
hosts: webservers
become: true
tasks:
- name: Nginx 설치
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
cache_valid_time: 3600
- name: Nginx 실행
ansible.builtin.service:
name: nginx
state: started
enabled: true
hosts에는 적용할 서버 그룹을 적고, become: true로 관리자 권한 전환을 요청한다. state: present는 Nginx가 설치된 상태를, state: started는 서비스가 실행 중인 상태를 뜻한다. enabled: true는 재부팅 후에도 서비스를 자동으로 시작하도록 하는 설정이다. 패키지 목록은 필요할 때 갱신하도록 캐시 유효 시간을 한 시간으로 두었다.
관리용 컴퓨터에 Ansible을 설치하고 서버 접속과 권한 전환을 준비한 뒤 ansible-playbook -i inventory.ini web.yml을 실행한다. 접속 사용자 지정이 필요하면 -u 사용자명을, sudo 비밀번호 입력이 필요하면 -K를 추가한다. become: true는 이미 부여된 권한을 사용하는 설정이며, 해당 계정의 sudo 권한도 미리 준비해야 한다. 이 예제는 Ubuntu·Debian 계열용으로, 다른 OS에는 그 환경에 맞는 모듈이 필요하다.
반복 실행
Ansible을 설명할 때 자주 나오는 말이 멱등성(Idempotency)이다. 같은 작업을 다시 실행해도 이미 지정한 상태라면 추가 변경을 하지 않는 성질이다.
앞의 예제에서는 Nginx가 설치되어 있으면 중복으로 설치하지 않고, 서비스가 중지되어 있을 때 시작한다. 다만 패키지 목록 갱신처럼 별도로 실행 조건을 둔 작업은 그 조건에 따라 수행될 수 있다.
이 성질은 모듈과 작업 작성 방식에 따라 달라진다. 명령어를 그대로 실행하는 작업은 실행할 때마다 같은 동작을 반복할 수 있다. 설정을 기준에 맞추는 시점도 Playbook 실행 시점이다. 주기적으로 점검하고 조정하려면 별도의 실행 일정이나 자동화 플랫폼을 구성해야 한다.
자동화 범위
운영 환경에서는 다음과 같은 작업에 활용한다.
- 프로그램 설치: 웹 서버, 데이터베이스, 모니터링 도구 등의 설치 및 업데이트
- 설정 관리: 운영체제와 애플리케이션 설정 파일 변경
- 서비스 관리: 프로그램의 실행·중지 및 자동 시작 설정
- 계정 관리: 사용자 계정과 권한 구성
- 보안 관리: SSH, 방화벽, 감사 로그, 보안 패치 등 설정 적용
- 배포 작업: 애플리케이션 업데이트와 서버별 배포 순서 관리
보안 설정
Ansible로 서버 보안 설정도 적용할 수 있다. 조직의 기준에 맞춰 SSH의 root 직접 로그인을 제한하거나, 불필요한 서비스를 끄고, 감사 로그를 활성화하는 식이다.
보안 기준을 Playbook으로 작성해두면 새 서버를 구축할 때 재사용할 수 있다. 운영 중 설정이 달라진 서버도 해당 설정을 관리하는 작업을 다시 실행해 기준에 맞출 수 있다. 어떤 파일과 항목을 관리하는지 명확히 정의해두는 것이 중요하다.
적용할 값은 조직의 보안 기준과 서비스 구성을 보고 정해야 한다. 진단 명령이나 검사 작업을 작성해 결과를 수집할 수도 있지만, 그 결과를 적합·부적합으로 판단하는 조건 역시 직접 정의해야 한다. 잘못된 설정도 여러 서버에 함께 적용될 수 있으므로 SSH와 방화벽 변경은 테스트 대상부터 검증하는 편이 좋다.
MAAS와의 차이
MAAS와 함께 사용한다면 일반적으로 아래와 같이 역할을 나눌 수 있다.
| 구분 | MAAS | Ansible |
|---|---|---|
| 주요 역할 | 물리 서버 준비와 OS 설치 | 설치된 OS의 설정과 운영 자동화 |
| 대표 작업 | 네트워크 부팅, 디스크 초기화, OS 배포 | 패키지 설치, 서비스 설정, 보안 정책 적용 |
| 활용 시점 | 서버를 처음 준비하거나 재설치할 때 | 서버 구축 이후와 운영 중 |
물리 서버가 새로 들어왔다면 MAAS로 Ubuntu 같은 운영체제를 설치하고, 이후 Ansible로 프로그램과 보안 설정을 적용하는 구성을 생각할 수 있다. 이 방식은 새 서버를 준비할 때마다 같은 작업을 반복하는 수고를 줄여준다.
운영 준비
작업을 여러 서버에 적용하기 전에는 대상 목록과 권한, 변경 내용을 확인해야 한다. 처음 만든 Playbook은 테스트 서버 한 대부터 적용하고 결과를 확인한 뒤 범위를 넓히는 편이 좋겠다.
- 작업 대상: 운영 서버와 테스트 서버를 구분하고, 작은 그룹부터 적용한다.
- 접근 권한: 관리용 계정은 필요한 권한만 부여하고, SSH 키나 인증정보는 안전하게 관리한다.
- 사전 검증:
--syntax-check로 문법을 확인하고,--check로 지원되는 작업의 예상 변경을 살펴본다.--limit으로 테스트 서버 한 대에 범위를 제한할 수 있다. 검사 모드 지원 여부와 작업별check_mode설정에 따라 실제 실행 여부가 달라지므로 Playbook 내용도 확인해야 한다. - 복구 방법: 설정 변경 전 백업과 원복 절차를 준비한다. 특히 방화벽과 SSH 설정 오류는 원격 접속을 차단할 수 있다.
비밀번호나 API 키는 Playbook에 평문으로 남기지 않고 Ansible Vault나 별도의 비밀정보 관리 시스템을 통해 관리한다. Vault는 저장된 변수와 파일을 암호화한다. 실행 중 복호화된 값이 로그에 노출되지 않도록 no_log 등을 적용하고, 민감한 파일에는 변경 내용을 출력하는 --diff 사용도 주의해야 한다.
처음부터 모든 운영 작업을 옮길 필요는 없다고 본다. 자주 설치하는 프로그램이나 반복해서 맞추는 설정부터 작성해두면 시작하기가 수월하다. 작은 작업으로 적용과 검증 절차를 익힌 뒤 계정 관리나 보안 설정으로 넓혀가는 편이 좋겠다.
공식 문서 : 검사·차이 비교 모드 · Ansible 소개 · 시작 안내 · Ansible Vault





