1.1.2.3. Ansibleを準備する¶
ソフトウェアをインストールする¶
- 自動実行化サーバーにアクセスします。「yum install epel-release」を実行し、Ansible用のリポジトリをインストールします。
- 「yum install ansible」を実行し、Ansibleをインストールします。
- インストールされていることを確認します。
# 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)]
スクリプトを設定する¶
- 「cd /etc/ansible/」を実行し、作業ディレクトリまで移動します。
注釈
- 配下には以下のディレクトリとファイルがデフォルトで作成されています。「roles」:Ansibleのrole機能を用いる際に使用するディレクトリです。本手順ではrole配下にtasokarenaとPostgreSQLのスクリプトを記載したファイル(.yml)を作成します。「hosts」:操作対象について記載するファイルです。ホスト名やIPアドレス、操作対象がWindowsの場合はアカウント情報などを記載します。「ansible.cfg」:Ansibleの実行環境について記載するファイルです。sudo実行時の設定などを編集できます。本手順ではデフォルト設定のまま使用します。
- 「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
- 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 (データ匿名化実行用)
- 「vi playbook.yml」を実行し、操作対象と実行するroleについて記載します。
ファイル名:playbook.yml ##操作対象と実行するroleを選択する。 - hosts: db_server roles: - PostgreSQL - hosts: tasokarena_server roles: - tasokarena
- 「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
- 「cd /etc/ansible/roles/tasokarena/tasks」を実行し、tasokarenaのtaskフォルダまで移動します。作成したファイル(.yml)にスクリプトの内容を記載します。本手順では以下の内容を記載します。
ファイル名:main.yml ##実行タスク一覧 - name: 匿名化実行 import_tasks: anonymity.yml
ファイル名:anonymity.yml ##実行タスク一覧 - name: 匿名化実行 win_command: ※データ匿名化サーバーのコマンド実行ファイルがあるフォルダ changed_when: False
操作対象との接続設定をする¶
- データ匿名化サーバーにアクセスします。PowershellにてWinRMが起動状態であることを確認します。
PS> Get-Service | Where-Object { $_.Name -eq "WinRM"} |ft -AutoSize Status Name DisplayName ------ ---- ----------- Running WinRM Windows Remote Management (WS-Management)
- 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
- 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アドレス:※仮想サーバー固有のアドレス
- HTTPSにおけるBasic認証の許可を行います。
PS> winrm set winrm/config/service/auth '@{Basic="true"}' Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed
- 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
- 自動実行化サーバーにアクセスします。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
- pywinrmをインストールします。
# pip install pywinrm ※処理状況省略 Successfully installed ntlm-auth-1.5.0 pywinrm-0.4.2 requests-ntlm-1.1.0 xmltodict-0.12.0
- データ匿名化サーバーに接続できることを確認します。
# ansible windows_server -i hosts -m win_ping "172.16.20.23" | SUCCESS => { "changed": false, "ping": "pong" }