일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- REST API
- Vault
- Secret Engine
- 백업
- vault agent
- 인프라
- 파일시스템
- key/value
- 유닉스
- devops
- 앤서블
- kv
- 전체 백업
- secret engines
- hashicorp
- auth methods
- 시스템
- IAC
- SHR
- backend storage
- SSH OTP
- 통합 풀 백업
- Role
- 차분 백업
- VIRT
- 커널 파라미터
- 리눅스
- 자동화
- 구성관리
- DATA 백업
- Today
- Total
클라우드 아카이브
[Ansible] 앤서블 겔럭시를 사용하여 유저/그룹 생성 및 삭제 본문
[Ansible] 앤서블 겔럭시를 사용하여 유저/그룹 생성 및 삭제
Cloud Engineer 2021. 11. 3. 15:56개요
앤서블 겔럭시를 사용하여 Role을 기반으로 한 리눅스 사용자 및 그룹을 생성/삭제하는 플레이북을 작성하겠습니다. 앤서블의 공식 홈페이지에 게시된 앤서블 모듈 관련 레퍼런스를 기반으로 해당 코드를 참고했으며 공식 문서를 보고싶으신 분들은 여기를 클릭해주시면 감사하겠습니다.
앤서블 겔럭시에 대한 개념과 디렉토리 구조에 대한 학습을 하고싶으신 분들은 여기를 클릭해주시면 됩니다.
디렉토리 구조
.
├── 01-make-user-and-group # 유저/그룹 생성을 이행하기 위한 Role
│ ├── README.md
│ ├── tasks # Playbook 역할을 담당하는 디렉터리
│ │ └── main.yml
│ └── vars # 해당 Role에서 사용할 변수 (우선순위 높음)
│ └── main.yml
├── README.md
├── inventory.yaml # 작업 대상 서버들 지정
└── main.yml # 전체 role의 이행 순서를 중앙에서 관리
구현 프로세스
1. 앤서블 겔럭시 role 생성
# 앤서블 겔럭시 신규 role 생성
$ ansible-galaxy role init 01-make-user-and-group
2. 앤서블 인벤토리 작성
작업 대상을 지정하기 위해 인벤토리를 작성하도록 하겠습니다. 인벤토리 작성 방법은 2가지가 있는데 cfg 파일 형식으로 작성하거나 yaml 파일로 작성하는 것입니다. 타 블로그에서 cfg 파일 형식으로 작성해놓은 예제가 많기 때문에 본 포스팅에서는 yaml 파일로 작성해보겠습니다.
# ./my-inventory.yml
---
server-group: # 그룹 지정
hosts:
my-server: # 호스트 지정
ansible_host: 1.1.1.1 # 작업 대상 호스트의 IP 입력
ansible_port: 22
ansible_user: admin
ansible_password: "12345"
ansible_connection: ssh # ssh | winrm | ...
server-group이라는 호스트 그룹을 만들고 my-server라는 호스트이름을 가진 서버를 server-group에 소속시키켰습니다.
3. Role 관리를 담당하는 플레이북 생성
중앙에서 Role을 관리하는 플레이북을 생성해줍니다. 해당 플레이북을 통해 여러 개의 Role을 중앙에서 이행할 수 있는 편의성을 제공합니다.
./main.yml
---
- name: 유저/그룹 생성 및 삭제
hosts: server-group
become: yes # root 권한 허용
roles:
- 01-make-user-and-group
4. 유저 생성/삭제 및 그룹 생성 플레이북 작성
신규 그룹 생성 - 신규 유저 생성 및 소속 그룹 지정 - 사용자가 원할 경우 특정 유저 삭제 순서로 플레이북 모듈을 작성하겠습니다.
# 01-make-user-and-group/tasks/main.yml
---
- name: create new group # 신규 그룹 생성
group:
name: "{{ new_group }}" # vars/main.yml에 명시된 변수 호출
state: present
- name: create new user and belonging new_group # 신규 유저 생성 및 소속 그룹 지정
user:
name: "{{ new_username }}" # 유저 명
password: "{{ new_user_password }}" # default 패스워드 입력
group: "{{ new_group }}"
shell: /bin/bash
state: present
- name: remove specific user
user:
name: "{{ removed_username }}" # defaults/main.yml에 명시된 변수 호출
state: absent
remove: yes
when: is_remove_user == True #defaults/main.yml에 명시한 변수가 True일 경우 해당 모듈 실행
구현 모듈에서 state를 명시하는 이유
앤서블의 강력한 특징 중 하나인 멱등성을 지키기 위해서입니다. 동일한 명령어를 반복해서 실행시키더라도 상태가 항상 동일하게 유지되어야 하기 때문에 이를 state를 통해 명시하는 것입니다. 앤서블의 개념 및 특징에 대해 더 학습하고 싶으신 분들은 여기를 클릭해주시면 감사하겠습니다.
4. 우선순위가 낮은 변수 지정 (defaults)
유저 삭제와 관련된 변수를 지정해줍니다. is_remove_user의 변수값을 True로 할 경우 유저 삭제 모듈을 이행하고, remove_user라는 유저를 삭제하겠다는 의미입니다.
# 01-make-user-and-group/defaults/main.yml
---
# 유저 삭제 모듈을 이행할지 여부
is_remove_user: True # True | False
# 삭제할 유저이름
removed_username: remove_user
5. 우선순위가 높은 변수 지정 (vars)
생성할 유저 및 그룹에 대한 변수값을 지정해줍니다.
---
new_username: oracle
new_user_password: admin123
new_group: dba
6. 실행 결과
$ ansible-playbook -i my-inventory.yaml main.yml -vvv
ansible-playbook [core 2.11.6]
config file = None
...
python version = 3.9.7 (default, Oct 12 2021, 22:38:23) [Clang 13.0.0 (clang-1300.0.29.3)]
jinja version = 3.0.2
libyaml = True
No config file found; using defaults
...
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
PLAYBOOK: main.yml *************************************************************************************************
1 plays in main.yml
PLAY [유저/그룹 생성 및 삭제] **********************************************************************************
TASK [Gathering Facts] *********************************************************************************************
task path: ./main.yml:2
...
ok: [my-server] => {
"append": false,
"changed": false,
"comment": "",
"group": 1002,
"home": "/home/oracle",
"invocation": {
"module_args": {
"append": false,
"authorization": null,
"comment": null,
"create_home": true,
"expires": null,
"force": false,
"generate_ssh_key": null,
"group": "dba",
"groups": null,
"hidden": null,
"home": null,
"local": null,
"login_class": null,
"move_home": false,
"name": "oracle",
"non_unique": false,
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"password_expire_max": null,
"password_expire_min": null,
"password_lock": null,
"profile": null,
"remove": false,
"role": null,
"seuser": null,
"shell": "/bin/bash",
"skeleton": null,
"ssh_key_bits": 0,
"ssh_key_comment": "ansible-generated on ip-172-31-41-22.ap-northeast-2.compute.internal",
"ssh_key_file": null,
"ssh_key_passphrase": null,
"ssh_key_type": "rsa",
"state": "present",
"system": false,
"uid": null,
"update_password": "always"
}
},
"move_home": false,
"name": "oracle",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"uid": 1001
}
...
META: role_complete for my-server
META: ran handlers
META: ran handlers
PLAY RECAP *********************************************************************************************************
my-server : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$
마무리
앤서블 겔럭시를 사용하여 Role 기반으로 유저/그룹 생성 및 삭제하는 구성관리 코드를 작성해봤습니다. 앤서블의 경우 관련 레퍼런스가 굉장히 잘 되어있고, 도구 사용자층이 두꺼울 뿐만 아니라 RedHat에서 후원하는 도구이기 때문에 신뢰성이 굉장히 높습니다. 또한 Chef 등의 구성관리 도구와 다르게 Agentless 방식으로 앤서블 코어 서버와 작업 대상 서버가 SSH 통신을 한다는 강력한 특징으로 인하여 사용자가 많이 유입된 것도 있겠지요. (Agent를 설치할 경우 작업 대상 서버에서 Agent 프로세스를 관리해야할 뿐만 아니라 프로세스 간 충돌 등의 문제에서 자유로워질 수 없겠지요 ^^)
이상으로 앤서블 겔럭시를 사용하여 유저/그룹 생성 및 삭제 모듈을 구현하는 포스팅을 마치겠습니다. 감사합니다.
'Cloud Native Solution > [IaC] ansible' 카테고리의 다른 글
[암호화/복호화] ansible-vault를 이용한 암호화/복호화 (0) | 2022.02.02 |
---|---|
[Ansible] 앤서블 겔럭시를 사용하여 LVM 구성 (0) | 2021.11.05 |
[IaC] Ansible Galaxy의 개념과 구성요소 (0) | 2021.10.22 |
[구성관리] Ansible(앤서블) 개념, 배경 그리고 활용 사례 정리 (0) | 2021.09.19 |
[IaC/앤서블] 앤서블 겔럭시를 이용한 서버 패스워드 변경 자동화(2) (0) | 2021.08.22 |