1.1.2.3. Ansibleの準備をする

ソフトウェアのインストール

  1. 自動実行化サーバーにアクセスします。
    「yum install epel-release」を実行し、Ansible用のリポジトリをインストールします。
  2. 「yum install ansible」を実行し、Ansibleをインストールします。
  3. インストールされていることを確認します。
    #  ansible --version
    
    ansible 2.9.21
      ansible 2.9.21
      config file = /etc/ansible/ansible.cfg
      configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python3.6/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
    

スクリプトの設定

  1. 「cd /etc/ansible/」を実行し、作業ディレクトリまで移動します。

    注釈

    • 配下には以下のディレクトリとファイルがデフォルトで作成されています。
      「roles」:Ansibleのrole機能を用いる際に使用するディレクトリです。本手順ではrole配下にtasokarenaとPostgreSQLのスクリプトを記載したファイル(.yml)を作成します。
      「hosts」:操作対象について記載するファイルです。ホスト名やIPアドレス、操作対象がWindowsの場合はアカウント情報などを記載します。
      「ansible.cfg」:Ansibleの実行環境について記載するファイルです。sudo実行時の設定などを編集できます。本手順ではデフォルト設定のまま使用します。
  2. 「vi hosts」を実行し、操作対象に関する情報を記載します。
    ファイル名:main.yml
    ##検証DBサーバー
    [db_server]
    172.16.20.25
    
    ##データ匿名化サーバー
    [tasokarena_server]
    172.16.20.23
    [tasokarena_server:vars]
    ansible_user=※データ匿名化サーバーの接続用ユーザー名
    ansible_password=※データ匿名化サーバーの接続用ユーザー名のパスワード
    ansible_port=5986
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    
  3. roles配下にtasokarenaとPostgreSQLそれぞれのディレクトリとファイル(.yml)を作成します。
    本手順では下記のとおりディレクトリとファイルを作成します。
    /etc/ansible/
    |- playbook.yml (任意の名称)
    |- hosts (任意の名称)
    |- roles (名称固定)
      |- PostgreSQL (任意の名称)
        |- tasks (名称固定)
          |- main.yml (role用)
          |- yum.yml (インストール用)
          |- initialize.yml (初期セットアップ用)
          |- service_start.yml (サービス起動設定用)
          |- conf_setting.yml (Config設定用)
          |- user_create.yml (接続用ユーザー作成用)
          |- db_create.yml (データベース作成用)
          |- table_create.yml (テーブル作成用)
      |- tasokarena (任意の名称)
        |- tasks (名称固定)
          |- main.yml (role用)
          |- anonymity.yml (データ匿名化実行用)
    
  4. 「vi playbook.yml」を実行し、操作対象と実行するroleについて記載します。
    ファイル名:playbook.yml
    ##操作対象と実行するroleを選択する。
    - hosts: db_server
      roles:
        - PostgreSQL
    
    - hosts: tasokarena_server
      roles:
        - tasokarena
    
  5. 「cd /etc/ansible/roles/PostgreSQL/tasks」を実行し、PostgreSQLのtaskフォルダまで移動します。
    作成したファイル(.yml)にスクリプトの内容を記載します。
    本手順では以下の内容を記載します。
    ファイル名:main.yml
    ##実行タスク一覧
    - name: PostgreSQLインストール
      import_tasks: yum.yml
    
    - name: PostgreSQLの初期セットアップ
      import_tasks: initialize.yml
    
    - name: サービスの自動起動設定及び起動
      import_tasks: service_start.yml
    
    - name: 初期設定
      import_tasks: conf_setting.yml
    
    - name: 接続ユーザー作成
      import_tasks: user_create.yml
    
    - name: データベースの作成
      import_tasks: db_create.yml
    
    - name: テーブルの作成
      import_tasks: table_create.yml
    
    ファイル名:yum.yml
    ##PostgreSQLをインストールする。
    - name: インストール実行
      yum:
        name: postgresql-server
        state: latest
      changed_when: False
    
    ファイル名:initialize.yml
    ##PostgreSQLの初期セットアップを行う。
    - name: PostgrSQLの初期セットアップ
      command:
        cmd: 'postgresql-setup initdb'
      changed_when: False
    
     ファイル名:service_start.yml
     ##仮想サーバー起動時にPostgreSQLが起動するよう設定する。
     - name: サービスの自動起動設定
       command:
         cmd: 'systemctl enable postgresql.service'
       changed_when: False
    
    - name: サービスの起動
      command:
        cmd: 'systemctl start postgresql.service'
      changed_when: False
    
    ファイル名:conf_setting.yml
    ##PostgreSQLの初期設定を行う。
    - name: 初期設定
      become: yes
      blockinfile:
        path: /var/lib/pgsql/data/postgresql.conf
        block: |
          listen_addresses = '*'
          port 5432
          log_line_prefix = '< %t %u %d >'
     changed_when: False
    
    - name: 初期設定
      become: yes
      blockinfile:
        path: /var/lib/pgsql/data/pg_hba.conf
        insertafter: '^# TYPE  DATABASE        USER            ADDRESS                 METHOD'
        block: |
          local    all        all                              trust
          host     all        postgres       localhost         trust
          host     all        all            all               md5
      changed_when: False
    
    - name: 初期設定後再起動
      command:
        cmd: 'systemctl restart postgresql.service'
      changed_when: False
    
    ファイル名:user_create.yml
    ##PostgreSQLの接続用ユーザーを作成する。
    - name: 接続ユーザー作成
      shell: /usr/bin/psql -c "CREATE ROLE ※検証DBサーバーのユーザー名 WITH LOGIN PASSWORD '※検証DBサーバーのユーザー名のパスワード';"
      become: yes
      become_user: postgres
      changed_when: False
    
    ファイル名:db_create.yml
    ##PostgreSQLのデータベースを作成する。
    - name: データベースの作成
      shell: /usr/bin/psql -c "CREATE DATABASE regionlist WITH OWNER ※検証DBサーバーのユーザー名;"
      become: yes
      become_user: postgres
      changed_when: False
    
    ファイル名:table_create.yml
    ##PostgreSQLのテーブルを作成する。
    - name: テーブル作成
      shell: /usr/bin/psql -U "※検証DBサーバーのユーザー名" "regionlist" -c "create table regiontable(id int primary key,code integer,groupname varchar(500),ruby varchar(50),postalcode     varchar(50),address varchar(50),telephone varchar(50));"
      become: yes
      become_user: postgres
      changed_when: False
    
  6. 「cd /etc/ansible/roles/tasokarena/tasks」を実行し、tasokarenaのtaskフォルダまで移動します。
    作成したファイル(.yml)にスクリプトの内容を記載します。
    本手順では以下の内容を記載します。
    ファイル名:main.yml
    ##実行タスク一覧
    - name: 匿名化実行
      import_tasks: anonymity.yml
    
    ファイル名:anonymity.yml
    ##実行タスク一覧
    - name: 匿名化実行
      win_command: ※データ匿名化サーバーのコマンド実行ファイルがあるフォルダ
      changed_when: False
    

操作対象との接続設定

  1. データ匿名化サーバーにアクセスします。
    PowershellにてWinRMが起動状態であることを確認します。
    PS> Get-Service | Where-Object { $_.Name -eq "WinRM"} |ft -AutoSize
    Status  Name  DisplayName
    ------  ----  -----------
    Running WinRM Windows Remote Management (WS-Management)
    
  2. HTTPSで通信を行うために自己証明書を作成します。
    作成後、自己証明書が作成されたことを確認します。
    PS> $cert = New-SelfSignedCertificate -CertstoreLocation Cert:\LocalMachine\My -DnsName "HOSTNAME"
    PS> Get-Childitem -Path Cert:\LocalMachine\My -Recurse
    PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
    
    Thumbprint                                Subject
    ----------                                -------
    ****************************************  CN=HOSTNAME
    
  3. HTTPSのWinRM設定をします。
    設定後、HTTPSが設定されたことを確認します。
    PS> New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbPrint $cert.Thumbprint -Force
    PS> winrm enumerate winrm/config/Listener
    Listener
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = ****************************************
    ListeningOn = 127.0.0.1, 172.16.20.23, ::1, MACアドレス:※仮想サーバー固有のアドレス
    
  4. HTTPSにおけるBasic認証の許可を行います。
    PS> winrm set winrm/config/service/auth '@{Basic="true"}'
    Auth
    Basic = true
    Kerberos = true
    Negotiate = true
    Certificate = false
    CredSSP = false
    CbtHardeningLevel = Relaxed
    
  5. HTTPSの通信受信許可設定を追加します。
    PS> New-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -Protocol TCP
    Name                  : Windows Remote Management (HTTPS-In)
    DisplayName           : Windows Remote Management (HTTPS-In)
    Description           :
    DisplayGroup          :
    Group                 :
    Enabled               : True
    Profile               : Any
    Platform              : {}
    Direction             : Inbound
    Action                : Allow
    EdgeTraversalPolicy   : Block
    LooseSourceMapping    : False
    LocalOnlyMapping      : False
    Owner                 :
    PrimaryStatus         : OK
    Status                : 規則は、ストアから正常に解析されました。 (65536)
    EnforcementStatus     : NotApplicable
    PolicyStoreSource     : PersistentStore
    PolicyStoreSourceType : Local
    
  6. 自動実行化サーバーにアクセスします。
    WinRMと通信するためにpython3とpipをインストールし、pywinrmをインストールする環境を整えます。
     # yum install python3
     ※処理状況省略
     インストール済み:
     python3-pip-9.0.3-19.el8.noarch
     python3-setuptools-39.2.0-6.el8.noarch
     python36-3.6.8-2.module_el8.4.0+790+083e3d81.x86_64
    
     完了しました!
    
    # curl -sL https://bootstrap.pypa.io/get-pip.py | python3
    ※処理状況省略
    Successfully installed pip-21.2.1 wheel-0.36.2
    
  7. pywinrmをインストールします。
    # pip install pywinrm
    ※処理状況省略
    Successfully installed ntlm-auth-1.5.0 pywinrm-0.4.2 requests-ntlm-1.1.0 xmltodict-0.12.0
    
  8. データ匿名化サーバーに接続できることを確認します。
    # ansible windows_server -i hosts -m win_ping
    "172.16.20.23" | SUCCESS => {
    "changed": false,
    "ping": "pong"
    }