7.7. Ansible での OpenSCAP の使用

設定コンプライアンスを既存の Ansible ワークフローに統合するのを支援するために、OpenSCAP は、Ansible との連携に対して修復を生成します。この修復は、プロファイルまたはスキャン結果のいずれかに基づいて、Ansible Playbook の形で生成されます。
SSG (SCAP Security Guide) に基づいた Playbook には、すべてのルールに対する修正が含まれており、システムは、マシンの状態にかかわらずプロファイルに従って修復されます。一方、スキャン結果を元にした Playbook には、評価時に失敗したルールに対する修正のみが含まれます。
Red Hat Enterprise Linux 7 では、SSG は、各プロファイルおよび Red Hat 製品に、事前構築された Ansible Playbook を提供します。Playbook は /usr/share/scap-security-guide/ansible/ ディレクトリーに保存されます。
プロファイルに基づいて Ansible Playbook (Red Hat Enterprise Linux 7 に対する DISA STIG プロファイルなど) を生成するには、以下のコマンドを実行します。
$ oscap xccdf generate fix --fix-type ansible --profile xccdf_org.ssgproject.content_profile_stig-rhel7-disa --output stig-rhel7-role.yml /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
スキャンの結果に基づいて Ansible Playbook を生成するには、以下のコマンドを実行します。
$ oscap xccdf generate fix --fix-type ansible --result-id xccdf_org.open-scap_testresult_xccdf_org.ssgproject.content_profile_stig-rhel7-disa --output stig-playbook-result.yml results.xml
ここで、results.xml ファイルには、--results オプションを付けてスキャンした時に取得したスキャンの結果が含まれ、result-id オプションには、結果が含まれるファイルの TestResult コンポーネントの ID が含まれます。TestResult コンポーネントの ID を取得するには、results.xml ファイルで oscap info コマンドを使用します。
$ oscap info results.xml | grep "Result ID"
Ansible Playbook を適用するには、以下のコマンドを実行します。
$ ansible-playbook playbook.yml
ansible-playbook コマンドは、ansible パッケージにより提供されることに注意してください。詳細は、man ページの ansible-playbook(1) と、『Ansible Tower User Guide』 を参照してください。

タスクのフィルタリング

Playbook に含まれるタスクは、XCCDF (Extensible Configuration Checklist Description Format) ファイルのルールと同じメタデータでタグ付けされます。このタグは、ルール ID、戦略、複雑性、破棄、参照を参照し、適用するタスクにフィルターを設定するために使用できます。
たとえば、PCI-DSS ポリシー要件 6.2 のルールだけを修復するには、以下のコマンドを実行します。
$ ansible-playbook --tags=PCI-DSS-Req-6.2 /usr/share/scap-security-guide/ansible/ssg-rhel7-role-pci-dss.yml
非常に破壊的ではない RHEL7 OSPP Playbook の高重要度ルールを修正するには、以下のコマンドを実行します。
$ ansible-playbook --tags=high_severity --skip-tags=high_disruption /usr/share/scap-security-guide/ansible/ssg-rhel7-role-ospp-rhel7.yml

Playbook のカスタマイズ

Playbook をカスタマイズする方法は 2 つあり、いずれかを選択できます。1 つ目の方法は、カスタマイズしたプロファイルから Playbook を生成する方法です。この方法は、Customization が選択したルールを変更する場合に適しています。
2 つ目の方法は、Playbook で変数を変更する方法です。これは、Ansible が Playbook をカスタマイズする方法です。
カスタマイズしたファイルに Ansible Playbook を生成するには、カスタマイズしたプロファイルの ID を指定する --profile オプションを使用し、カスタマイズしたファイルを置く場所を示す --tailoring-file オプションを使用します。この引数は、カスタマイズしたプロファイルを使用してスキャンを実行するときと同じで、以下のようになります。
$ oscap xccdf generate fix--fix-type ansible --profile xccdf_org.ssgproject.content_profile_common_customized --tailoring-file ssg-rhel7-ds-tailoring.xml --output tailored-playbook.yml /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
変数をカスタマイズするには、テキストエディターを使用して Playbook を編集します。使用するすべての変数は、Playbook の冒頭に一覧表示されます (vars: 文字列の後に置かれます)。