ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오픈소스로 구성하는 데브옵스 시스템 - Ansible과 AWX를 이용한 예제3
    DevOps 2018. 5. 31. 00:42

    오랜만에 글을 작성하네요. ^-^


    잠시 현재 저의 이야기를 하자면...

    조만간 ISMS 심사대응이 있어 얼마전까지 모든 서버의 취약성을 점검하는 작업을 진행했습니다.

    작년까지는 각 서버에 보안팀에서 건내준 스크립트를 업로드하고, 이를 각각 실행해서 나온 결과물을 또 일일이 다운로드 받아서 다시 보안팀에 넘겨주는 작업을 했었는데요...이를 진행하는데 2주(?) 정도 걸린 듯 했습니다.


    그런데 이번에는 ansible을 이용해서 위 작업을 3분만에 끝냈네요...ㅎㅎㅎ 물론 Playbook을 작성하는데 이틀정도의 시간이 걸리기는 했지만....정말 ansible과 awx 구축은 신의 한 수 인 듯 합니다.


    Ansible로 ISMS 취약성 점검 shell script 실행 및 결과물 취합


    아래는 스크립트 배포 및 실행과 결과물을 공유 NAS에 모으는 Playbook 입니다.

    ansible이 설치된 해당서버에 sh 파일을 업로드 하고 이를 copy 모듈을 이용해서 각 서버에 배포합니다.

    그리고 해당 shell 파일을 실행해서 결과물로 나온 tar 압축파일을 마운트한 nas-share에 모두 취합하고, nas-share는 마운트 해제 합니다.

    ---

    - hosts: all


      tasks:

        - name: Copy Shell

          copy:

            src: "{{ copy_src }}"

            dest: "{{ copy_dest }}"

            owner: root

            group: root

            mode: 0744

            

        - name: Excute Shell

          command: sh "{{ sh_path }}"

          

        - name: Make Directory

          command: mkdir {{ result_dest }}

          ignore_errors: true


        - name: Network Driver Mount

          command: mount -t cifs {{ nas_path }} {{ result_dest }} -o username={{ nas_username }},password={{ nas_password }},vers=2.1

          

        - name: Copy Result

          shell: mv {{ result_file }} {{ result_dest }}

          

        - name: Network Driver Unmount

          command: umount {{ nas_path }}

          

        - name: Delete Directory

          command: rm -r {{ result_dest }}



    변수로 지정된 부분은 AWX Template에 Extra Variables로 지정하는거 아시죠? ㅎㅎ

    copy_src: /var/lib/awx/projects/csm_linux_os_script.sh

    copy_dest: /home/user

    sh_path: /home/user/csm_linux_os_script.sh

    nas_path: //share-nas/Systemteam/ISMS_Result

    nas_username: nas-user

    nas_password: nas-passwd

    result_file: /home/user/*.tar

    result_dest: /mnt/ISMS_Result


    다음에는 해당 shell을 분석해서 따로 shell 파일 업로드 없이 ansible playbook안에 직접 넣고, 이를 awx output으로 출력해 다운로드를 받는 방법으로 구현을 해볼까 합니다.


    Ansible로 Windows Update 적용



    이글을 보고 계시는 시스템 엔지니어 중에는 윈도우 시스템을 운영하고 계시는 분들이 있으실꺼라 생각이 됩니다.

    혹시 서버의 윈도우 업데이트는 어떻게 진행하고 계신가요? 

    아마도 윈도우 업데이트 때문이라도 정기적으로 남들은 자고 있는 시간에 점검 공지 띄우고 작업을 하고 계실꺼라 생각이 됩니다.


    업데이트도 각 서버에 직접 들어가서 업데이트 버튼을 눌러가며 진행을 하고 계신가요??

    혹시 그러한 분들이 계신다면 아래 ansible playbook을 적용해서 원격으로 진행해 보시기 바랍니다


    ---

    - hosts: all

      

      tasks:

        - name: Install all security updates

          win_updates:

            category_names:

            - SecurityUpdates

            - CriticalUpdates

            - UpdateRollups

            - Updates

            reboot: "{{ reboot }}"

          register: update_rst

          

        - name: Print result

          debug:

            var: update_rst


    reboot은 awx의 외부 변수로 주시고 yes | no로 지정해 주시면 됩니다.

    ---

    reboot: no


    몇 줄 안되는 코드로 서버 대수에 상관 없이 윈도우 업데이트를 적용하실 수 있습니다.

    결과도 debug로 업데이트 내용을 출력하도록 했기 때문에 여러분은 아래 job이 완료되면 output으로 어떤 업데이트가 적용되었는지 확인만 해주시면 됩니다.


    한가지 팁을 더 드리면 awx의 Schedules에 등록해서 원하는 시간에 수행되도록 적용하시면 됩니다.


    한가지 더 팁을 드리면 Notifications를 적용해서 해당 작업의 결과를 이메일, slack, Twilio, Webhook, Rocket.Chat 등의 방법으로 받아보시기만 하면 됩니다.


    저희는 Rocket.Chat을 사용하고 있는데 이렇게 task job 결과를 받아보고 있습니다.


    말이 나온김에 다음에는 Schedule과 Notification을 등록하는 방법에 대해 다뤄보도록 하겠습니다.

Designed by Tistory.