이 글은 CloudNet@ 팀 gasida님의 스터디 A101 1기 내용 및 실습으로 작성된 글입니다.
보안 설정 자동화
# 패스워드 변경 주기 설정
패스워드 변경 주기를 설정할 대상 호스트는 인벤토리를 통해 설정하며, 사용자 계정 정보와 최대 변경일은 변수를 통해 별도의 파일로 정의하고 ansible.builtin.user 모듈을 사용한다.
프로젝트 디렉터리 생성 및 플레이북 생성과 ansible.cfg, inventory를 생성한다.
사전형 변수 플레이북을 생성하고 메인 플레이북을 생성하는데 패스워드 변경 주기는 user 모듈의 password_expire_max 파라미터로 설정한다.
플레이북을 실행하기 전에 --syntax-check과 --check 옵션을 사용해서 문법을 체크하고 시뮬레이션을 한번 돌린 후에 플레이북을 실행한다.
실행 후에 정상적으로 적용되었는지도 확인한다.
# 패스워드 생성 법칙 적용
패스워드 생성 법칙 적용을 위해서는 pwquality.conf 라는 pam 설정 파일을 이용해야 하며, 리눅스 서버에 libpam-pwquality 패키지가 있어야한다.
그리고 패스워드 변경 주기는 /etc/securiy/pwquality.conf 파일로 설정하고, pwquality.conf 파일은 사전에 미리 백업 파일을 만들어둔다.
pwquality.conf 파일은 사용자가 커스텀으로 설정하는 파라미터들로 구성되어 있으며, Jinja2 템플릿 방식으로 구현한다.
패스워드 생성 법칙을 적용하기 위한 프로젝트 디렉터리와 ansible.cfg, inventory 파일을 생성한다.
변수 값을 설정할 파일을 만들고, Jinja2으로 템플릿 파일 pwquality.conf.j2 생성하고 메인으로 사용될 플레이 북을 작성한다.
메인 플레이북을 실행하기 전에 구문 검사를 해준 뒤에 실행한다.
플레이북을 돌리고 /etc/security를 확인하고, pwquality.conf의 내용을 확인해본다.
tnode1에서 ansible 계정의 비밀번호를 변경하려고하니 아래와 같이 조건에 맞춰달라(?)고 하며 비밀번호 변경이 되지 않는 것을 볼 수 있다.
# 디렉터리 및 파일 접근 권한 변경
리눅스 보안 중에 꼭 확인해야 하는 항목이 바로 Sticky bit 설정 파일과 World Writable 설정 파일이다.
Sticky bit 설정 파일은 리눅스에서 파일 소유자나 그룹 소유자만 해당 파일을 읽고 쓰고 삭제할 수 있도록 권한을 부여한 것을 의미하며, 파일 소유자에게 권한을 부여하면 SUID, 파일 그룹에게 권한을 부여하면 SGID, 다른 사람에게 권한을 부여하면 Sticky bit 라고한다.
World Writable 파일은 모든 사용자에게 파일을 읽고 쓸 수 있는 권한이 부여된 파일을 의미한다.
접근권한 변경 프로젝트를 위해 디렉터리를 만들고, ansible.cfg, inventory 파일을 생성한다.
태스크 플레이북을 만들어준 다음에 구문 확인을 한 다음에 플레이북을 실행한다.
# 사설 인증서 생성
사설 인증서에는 자체 서명된 인증 기관용 인증서와 해당 인증서를 이용해 만든 클라이언트 인증 키가 있고, 인증서를 만들 때는 CSR Certificate Signing Request 이라는 인증 서명 요청을 한다. CSR을 통해 인증 기관용 인증서와 클라이언트 인증 키를 생성한다.
앤서블에서 개인 키를 만들때는 community.crypto.openssl_privatekey 모듈을 사용하며, CSR을 만들 때는 community.crypto.openssl_csr_pipe 모듈을 CSR을 이용하여 인증서를 생성할 때는 community.crypto.x509_certificate 모듈을 사용한다.
사설 인증서를 생성하기 위한 프로젝트 디렉터리와 ansible.cfg, inventory 파일을 생성한다.
ansible-galaxy을 통해 룰을 생성하고, myrole.rootCA 에 태스크 파일 작성하며 플레이북은 community.crypto 라는 컨텐츠 컬렉션을 사용한다.
myrole.serverKey 에 태스크 파일 작성하고, myrole.rootCA 태스크와 비슷하지만 rootCA로부터 발급받는 인증서를 생성할 때 provider가 사전에 생성된 CA 파일을 이용(ownca)를 사용한다.
프로젝트 디렉터리에서 변수 파일 생성하고, 메인 플레이북을 작성한다.
become를 false로 설정하여 root가 아닌 ubuntu 계정에서 실행하며, pre_tasks 섹션을 통해 롤이 실행되기 전에 인증서를 생성하고 보관할 디렉터리를 먼저 생성한다. 그리고 플레이북을 실행하기 전에 구문확인을 하고 실행하고나면 각 노드에 인증서가 생성된 것을 확인할 수 있다.
모니터링 자동화
# 팩트를 이용한 시스템 모니터링
팩트는 관리 노드에서 시스템과 관련된 정보들(ex.호스트 이름, 커널 버전, 네트워크 인터페이스 이름 등) 을 찾아 변수로 제공한다.
시스템 모니터링을 만들 프로젝트 디렉터리와 ansible.cfg, inventory를 생성한다.
debug과 facts 수집 후 file 에 저장하는 플레이북을 만든 다음에 구문 검사를 하고 이상이 없으면 플레이북을 실행한다.
# CPU, 메모리, 디스크 사용률 모니터링
자세한 CPU, 메모리, 디스크 사용률 모니터링을 위해 dstat, iostat, vmstat 명령어 사용을 위해 툴 설치를 해야한다.
각각의 명령어 실행은 ansible.builtin.shell 이용하여 실행하고, loop 키워드를 이용하여 모니터링 명령어별로 여러 옵션을 추가하여 명령 실행한다.
사용률 모니터링을 위한 프로젝트 디렉터리 생성과 ansible.cfg, inventory 파일을 작성한다.
로그 디렉터리와 설치할 패키지 변수 파일과 debug과 facts 수집 후 file 에 저장하는 플레이북 파일을 생성한다.
그리고 플레이북을 실행한 다음에 로그 파일들을 확인해보면 파일이 생성된 것을 확인할 수 있다.
'CloudNetaStudy > [Study] Ansible' 카테고리의 다른 글
[3주차] 시스템 구축 및 환경 설정 자동화 (0) | 2024.02.02 |
---|---|
[2주차] Ansible 반복문과 조건문 (0) | 2024.01.20 |
[1주차] Ansible 개념과 설치 (0) | 2024.01.11 |