2017년 12월 17일 일요일

[Ansible] 귀중품 보관실 서비스 (vault/볼트)



볼트(vault)는 에니메이션 볼트(Bolt)랑은 다른 단어입니다. ;;;;

사전을 좀 찾아보니 vault라는건...

   - 둥근 지붕, 둥근 천장(모양의 것), 둥근 천장이 있는 장소(복도), 푸른 하늘(the vault of        heaven), 지하(저장)실, (은행 등의)귀중품 보관실, 지하 납골소

그 중에서 귀중품 보관실? 이게 가장 적절한 쓰임의 말이겠네요 :)

그러면 어떤 것들을 귀중품 보관실에 보관하게 될까요


주로 이런 보석이나, 소중한 것들이겠죠?

운영쪽으로 본다면...제일 중요한 것들은 접속 정보 / 아이디 / 암호 같은 것들이겠네요 :)

잘못 해서 이런 정보들이 유출되거나 잘못되면....

이런 곳에 전화하거나..사실 그러기 전에 직장을 잃어버리게 되겠죠 -_-

그렇다고 매번 접속 정보들이나, 필요한 내용들을 다 하나하나 기입하면서 구성 관리하자니....왠지 자동화 툴을 제대로 못 쓰는거 같고...-_-

그래서 절충안으로 쓸수 있는게 ansible-vault 입니다.
그나마 금고에 넣어두면 누군가가 손댈수 없겠죠.



이 금고의 철판의 종류는 AES-256 입니다. 튼튼한 놈이죠 -_-

자 그러면 어떻게 쓸까요? 한번 예시를 볼까요?

[ nginx_remove.yml ]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
---
- name: Remove nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
  - name: nginx for Ubuntu
    include_tasks: Ubuntu_nginx_remove.yml
    when: ansible_distribution == 'Ubuntu'

  - name: nginx for CentOS
    include_tasks: CentOS_nginx_remove.yml
    when: ansible_distribution == 'CentOS'

  - debug: var=Step_grpVars

nginx_remove.yml을 사용하면, 이미 기존에 사용한 것처럼 노드들에 nginx를 삭제할 수 있습니다. 계속 삭제해도 큰 문제가 없으니...이걸 사용하기로 하고요.

여기서 ~!!
일반적으로 'anp nginx_remove.yml -k' 를 사용해서 ssh password를 입력하게 되는데요

이 귀찮음~~ 귀찮음 ssh password (vagrant)를 매번 매번 매번 입력해야 하는 귀찮음을 벗어나게 위해서 해당 값을 파일로 입력해 둡니다.

해당 값은 여러 곳에 아주 많이 자유롭게 넣을수 있지만요
ssh password를 암호화 할 예정이니까, 독립적으로 만들어 둡니다.

따라서 sudo vi '/etc/ansible/group_vars/' 밑에 all이라는 파일을 만들어 아래와 같이 기록해 둡니다.

[ group_vars/all ]
1
2
3
4
---
# file: group_vars/all
ansible_ssh_pass: vagrant
Step_grpVars: "group_vars_passed"


그리고 나서 해당 파일을 암호화 시킵니다.

잠깐~!!!

암호화 시키기 전에 해야 할게 있습니다. ansible-vault는 작업마다 vault의 암호를 요청합니다. 그러니까 말이죠...ssh pass 입력하기 귀찮다고 vault pass를 입력해야하는 꼴이 되는거죠


   (오랜만에 보는 혹부리 영감이네요 ...)

그래서 vault pass도 파일로 입력을 받겠습니다.

이러기 위해서는 vault pass를 생성하고 pass 자체가 알려지면 안되니까 해당 파일도 암호화해야 하며, vault pass가 어디 있는지 알려줘야 합니다.

우선

ansible-vault create .passfile 

passfile을 만들고 편의를 위해서 환경 설정들이 있는 곳에 옮겨줍니다.
(친구들과 함께 있으라구요 )
  (함께 있을때는...아 이분들 일반인이라..차마 -_-; 뻘소리 못하겠네요..)


만들때 그리고 내부에는 모두 '1234' 라는 내용을 기입해 줍니다.
우리 모두 알수는 없지만 1234입니다 -_-













그리고, valut pass의 위치 변경은 /etc/ansible/ansible.cfg 에서

  # If set, configures the path to the Vault password file as an alternative to
  # specifying --vault-password-file on the command line.
  #vault_password_file = /path/to/vault_password_file
  vault_password_file = /etc/ansible/.passfile

마지막에 있는 것처럼 .passfile이 valut 암호 파일이라고 알려줍니다.


자 이제 vault pass에 대한 설정이 다 되었으니...
해당 설정 값으로 group_vars에 있는 all을 암호화할 차례입니다.




암호화가 끝나고 나면, vagrant로 바로 실행하게 하기 위해서 유저와 그룹 권한을 변경해 줍니다.

이거 전에 변경하면 다 처음부터 해야 합니다. -_-; 한마디로 망합니다.

왜냐하면 순수하게 '1234'는 같다고 해도 AES256에 방식에 따라 다르게 기입하기 때문입니다.

자세하게 알고 싶다면 이걸 클릭..

암호화 된 것은 보고 실행할까요?



이제 실행~!!






[ 참고사항 ]
.passfile은 순환구조로 읽어서 암호화를 했기 때문에 ansible-vault로는 볼수가 없습니다. 정확하게는 ansible.cfg를 수정하고 나서 봐야 하고요


그리고 all 파일의 경우에는 ansible-vault edit 또는 view 등으로 볼수가 있으므로, 추가적으로 암호화 하거나, 유저 권한으로 제한하는게 옳다고 보여지네요.


이렇게 되면 일반 유저는 어쨌든 전혀 볼수가 없을테니까요 :)
그리고 핵심은 유출시에 plain_text가 아니기 때문에 해당 파일을 볼수가 없다는 장점이 있는것이죠. 

또한 윈도우와 같이 다른 환경 설정이 필요한 것이라든가...또는 네트워크 장치등에 대한 정보들을 모두 한번에 group_vars 또는 host_vars 외에 role의 vars로 관리하는 것도 생각해 볼만 하네요. :) 

0 개의 댓글:

댓글 쓰기

 
Copyright © . 시스템/네트워크 자동화 전문가 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger