25.5. Ansible을 사용하여 손상된 경우 IdM 서비스 자격 증명 모음 시크릿 변경

서비스 인스턴스가 손상될 때 서비스 자격 증명 모음에 저장된 시크릿을 변경하기 위해 Ansible 플레이북을 재사용하려면 다음 절차를 따르십시오. 다음 예제의 시나리오에서는 검색된 시크릿이 손상된 webserver3.idm.example.com 에서 해당 시크릿을 저장하는 symmetric 자격 증명 모음의 키가 아닌 것으로 가정합니다. 이 예제에서 관리자는 symmetric 자격 증명 모음에 시크릿을 저장하고 IdM 호스트에 대한 symmetric 자격 증명 모음에서 시크릿을 검색할 때 사용되는 Ansible 플레이북을 재사용합니다. 이 절차를 시작할 때 IdM 관리자는 새 시크릿을 사용하여 새 PEM 파일을 anyone 자격 증명 모음에 저장하고, 손상된 웹 서버 webserver3.idm.example.com 에 대한 새 시크릿을 검색하지 않도록 인벤토리 파일을 조정한 다음 두 절차를 다시 실행합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • 서비스 보안을 저장하기 위해 symmetric 자격 증명 모음을 생성 했습니다.
  • IdM 호스트에서 실행되는 웹 서비스에 대한 새 httpd 키를 생성하여 손상된 이전 키를 교체했습니다.
  • httpd 키는 Ansible 컨트롤러에 로컬로 저장됩니다(예: /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-signed-certificate.pem ).

절차

  1. /usr/share/doc/ansible-freeipa/playbooks/vault 디렉토리로 이동합니다.

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. 인벤토리 파일을 열고 다음 호스트가 올바르게 정의되어 있는지 확인합니다.

    • [ipaserver] 섹션의 IdM 서버입니다.
    • [webservers] 섹션에서 시크릿을 검색할 호스트입니다. 예를 들어, Ansible에 시크릿을 webserver1.idm.example.comwebserver2.idm.example.com 에 검색하도록 지시하려면 다음을 입력합니다.

      [ipaserver]
      server.idm.example.com
      
      [webservers]
      webserver1.idm.example.com
      webserver2.idm.example.com
    중요

    목록에 손상된 웹 서버가 포함되어 있지 않은지 확인합니다. 현재 예제 webserver3.idm.example.com.

  3. 편집하기 위해 data-archive-in-asymmetric-vault-copy.yml 파일을 엽니다.
  4. ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver.idm.example.com )로 설정합니다.
    • 변수의 in 변수를 "{{ lookup('file', 'new-private-key-to-externally-signed-certificate.pem) | b64encode }}" 로 설정합니다. 이렇게 하면 Ansible에서 IdM 서버가 아닌 Ansible 컨트롤러의 작업 디렉터리에서 개인 키를 사용하여 파일을 검색합니다.
    • action 변수를 member 로 설정합니다.

      이는 현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver.idm.example.com
          in: "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  5. 파일을 저장합니다.
  6. 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
  7. 편집하기 위해 retrieve-data-asymmetric-vault-copy.yml 파일을 엽니다.
  8. ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver1.idm.example.com )로 설정합니다.
    • private_key_file 변수를 서비스 자격 증명 모음 시크릿을 검색하는 데 사용되는 개인 키의 위치로 설정합니다.
    • 기존 작업 디렉터리와 같이 new-private-key-to-an-externally-certificate.pem 시크릿을 검색하려는 IdM 서버의 위치로 아웃 변수를 설정합니다.
    • action 변수를 member 로 설정합니다.

      이는 현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Retrieve data from the service vault
        ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          vault_type: asymmetric
          private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}"
          out: new-private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  9. IdM 서버에서 Ansible 컨트롤러로 데이터 파일을 검색하는 플레이북에 섹션을 추가합니다.

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: true
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: new-private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: yes
          mode: 0600
  10. 검색된 new-private-key-an-externally-signed-certificate.pem 파일을 Ansible 컨트롤러의 Ansible 컨트롤러의 Playbook에 전송하는 섹션을 플레이북에 추가합니다.

    ---
    - name: Send data file to webservers
      become: true
      gather_facts: no
      hosts: webservers
      tasks:
      - name: Send data to webservers
        copy:
          src: new-private-key-to-an-externally-signed-certificate.pem
          dest: /etc/pki/tls/private/httpd.key
          mode: 0444
  11. 파일을 저장합니다.
  12. 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml