Ansible을 활용한 자동화 구성 관리(22.04.20)

박민선·2022년 4월 21일
0

Vault

파일, 일부 텍스트를 암호화

  • 파일 수준
    - 플레이북 전체
    - 변수 파일
    - include/import 작업 파일
  • 텍스트 수준
    - 변수 값

Vault Password: AES

  • 단일 패스워드
    - --ask-vault-pass
    - --vault-password-file
  • 멀티 패스워드
    - --vault-id

ansible-vault 명령

ansible-vault <SUB-COMMAND> <FILE>
  • create: 암호화될 빈 파일 생성
  • decrypt: 암호화된 파일 복호화
  • edit: 암호화된 파일 수정(vi)
  • view: 암호화된 파일 확인
  • encrypt: 평문 파일 암호화
  • rekey: Vault 패스워드 변경
  • encrypt_string: 텍스트 암호화
ansible-vault encrypt_string
hello world[ctrl-d][ctrl-d]
hello world[enter]
[ctrl-d]

명령의 옵션

--ask-vault-password: 기본 옵션(Vault 패스워드 물음)
--vault-password-file: Vault 패스워드 파일 지정

안전하고 편하게 vault 패스워드를 사용하는 방법

.vaultpass

P@ssw0rd
chmod 600 .vaultpass

ansible.cfg

[defaults]
vault_password_file = ./.vaultpass

암호화된 플레이북 실행

ansible-playbook <Playbook> --ask-vault-pass
ansible-playbook <Playbook> --vault-password-file <Vault_Password_File>

멀티 패스워드

--vault-id 옵션 사용
--vault-id ID@source

source

  • prompt: 패스워드를 대화식의 프롬프트
    - --vault-id user1@prompt
  • file: 파일에서 패스워드를 참조
    - --vault-id user2@.vaultpass
  • script: 패스워드를 참조할 수 있는 스크립트
    - 예: 패스워드는 MySQL 저장, python 코드로 DB에서 패스워드를 가져올 수 있는
    - --vault-id user3@getpass.py

prompt

test.yaml

- hosts: 192.168.100.11
  vars_files:
    - var1.yaml
    - var2.yaml
  tasks:
    - debug:
        msg: "{{ message1 }} {{ message2 }}"
echo "message1: hello" > var1.yaml
echo "message2: world" > var2.yaml
ansible-vault encrypt var1.yaml --vault-id user1@prompt
ansible-vault encrypt var2.yaml --vault-id user2@prompt
ansible-playbook test.yaml --vault-id user1@prompt --vault-id user2@prompt

vault file

echo "message1: hello" > var1.yaml
echo "message2: world" > var2.yaml

echo "P@ssw0rd1" > user1pass
echo "P@ssw0rd2" > user2pass

chmod 600 user1pass 
chmod 600 user2pass 

ansible-vault encrypt var1.yaml --vault-id user1@user1pass
ansible-vault encrypt var2.yaml --vault-id user1@user2pass

ansible-playbook test.yaml --vault-id user1@user1pass --vault-id user1@user2pass

안전하고 편하게 vault 멀티 패스워드를 사용하는 방법

ansible.cfg

[defaults]
vault_identity_list = user1@user1pass, user2@user2pass

복호화

ansible-vault view var2.yaml
ansible-playbook test.yaml

암호화

ansible-vault create var3.yaml --encrypt-vault-id user1
absible-vault encrypt var3.yaml --encrypt-vault-id user1

AWX

Ansible 위에 구축된 웹 기반의 인터페이스
목적: 실행 / 모니터링

AWX: RedHat Ansible Tower 제품의 Upstream

CentOS --up--> RHEL --up--> Fedora
RHEL --> CentOS Stream --> Fedora
Ansible Tower --> AWX
Ubuntu --> Debian

AnsibleWorks -> AWX

AWX 설치

Docker 설치

https://docs.docker.com/engine/install/centos/

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
docker --version

Docker-Compose 설치

sudo yum install -y python3 python3-pip
sudo pip3 install -U -I pip wheel setuptools
sudo pip3 install docker-compose
docker-compose --version

AWX 설치

sudo yum -y install git
cd ~
git clone --branch 17.1.0 --single-branch https://github.com/ansible/awx.git
cd ~/awx/installer

~/awx/installer/inventory

108 admin_password=password
141 project_data_dir=/var/lib/awx/projects
sudo yum -y install libselinux-python3
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
ansible-playbook -i inventory install.yml -b
sudo docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                                   NAMES
1ea4d852e694   ansible/awx:17.1.0   "/usr/bin/tini -- /u…"   11 minutes ago   Up 11 minutes   8052/tcp                                awx_task
9c527c75a323   ansible/awx:17.1.0   "/usr/bin/tini -- /b…"   20 minutes ago   Up 11 minutes   0.0.0.0:80->8052/tcp, :::80->8052/tcp   awx_web
f6775cad37ab   redis                "docker-entrypoint.s…"   20 minutes ago   Up 11 minutes   6379/tcp                                awx_redis
16d33e864106   postgres:12          "docker-entrypoint.s…"   20 minutes ago   Up 11 minutes   5432/tcp                                awx_postgres

Create Preload data 작업에서 오류 발생시 확인

sudo docker exec awx_task bash -c "/usr/bin/awx-manage create_preload_data"
An organization is already in the system, exiting.
(changed: False)

웹브라우저

http://192.168.100.10

AWX 리소스 생성

  • Projects: 플레이북을 가지는 리소스
    - /var/lib/awx/projects
  • Inventories: 관리 노드/인벤토리 그룹을 가지는 리소스
  • Credentials: SSH, Sudo, Vault 등 자격증명 정보를 가지는 리소스
  • Templates: 프로젝트, 인벤토리, 자격증명을 가지는 리소스

플레이북 준비

sudo mkdir /var/lib/awx/projects/test-awx
sudo vi /var/lib/awx/projects/test-awx/debug.yaml
- hosts: all
  tasks:
    - debug:
        msg: Hello AWX World
[test-awx-group]
192.168.100.11

프로젝트 생성

Resouces -> Projects -> Add

  • Name: test-awx-project
  • Source Control Credentials Type: manual
  • Playbook Directory: test-awx
  • Save

인벤토리 생성

Resources -> Inventories -> Add -> Add Inventory

  • Create new inventory
    - Name: test-awx-inventory
    - Save

  • Details -> Groups 탭 -> Add
    - Name: test-awx-group
    - 'Save'

  • Group details -> Hosts 탭 -> Add -> Add new host
    - Name: 192.168.100.11
    - Save

자격증명 생성

Resources -> Credentials -> Add

  • Name: test-awx-credentials
  • Credential Type: Machine
  • Username: vagrant
  • SSH Private Key
    - controller 시스템의 vagrant 사용자의 홈디렉토리에서 ~/.ssh/id_rsa 파일 내용 복사
  • Privilege Escalation Method: sudo
  • Privilege Escalation Username: root
  • Save

템플릿 생성

Resources -> Templates -> Add -> Add job template

  • Name: test-awx-template
  • Inventory: test-awx-inventory
  • Project: test-awx-project
  • Playbook: debug.yaml
  • Credentials: test-awx-credentials
  • Save

작업 실행

Resources -> Templates -> test-awx-template -> 로켓 버튼

profile
클라우드신생아

0개의 댓글