- 当記事は、日常の運用業務(NW機器設定)の自動化により、運用コストの削減 および 運用品質の向上 を目標に
「Ansible」を使用し、様々なNW機器設定を自動化してみようと 試みた記事です。 - Ansibleは、OSS版(AWX)+OSS版(Ansible)を使用しております。
PaloAltoの「セキュリティポリシー」の登録/変更/削除を実施してみた
事前設定
- Templateを作成し、インベントリーと認証情報を設定する。
- インベントリー:対象機器(ホスト)の接続先を設定。 ※ホストには以下変数で接続先IPを指定
ansible_host: xxx.xxx.xxx.xxx
- 認証情報:対象機器へのログイン情報(ユーザ名/パスワード)を設定。
ユーザ名は 変数:ansible_user に保持される パスワードは 変数:ansible_password に保持される
- 各設定値(送信元/宛先/サービス)は、以下の関連記事で登録された値を使用します。※参考にして下さい
・Ansibleを使用してNW機器設定を自動化する(PaloAlto-アドレス編①) ・Ansibleを使用してNW機器設定を自動化する(PaloAlto-アドレスグループ編①) ・Ansibleを使用してNW機器設定を自動化する(PaloAlto-サービス編①) ・Ansibleを使用してNW機器設定を自動化する(PaloAlto-サービスグループ編①)
Playbook作成(YAML)
使用モジュール
- paloaltonetworks.panos.panos_security_rule を使用。
※参考ページ:
Ansible Galaxy
接続情報(provider)の設定
- providerには、ip_address/username/password の指定が必要。
vars: provider: ip_address: '{{ ansible_host }}' ← インベントリーのホストで設定 username: '{{ ansible_user }}' ← 認証情報で設定 password: '{{ ansible_password }}' ← 認証情報で設定
セキュリティポリシーの登録
- 接続情報とポリシー(送信元/宛先/サービス)を指定して登録(state: ‘present’)を行う。
- name: Security_Policy Present paloaltonetworks.panos.panos_security_rule: provider: '{{ provider }}' ← 接続情報 rule_name: 'policy001' description: 'policy001' source_zone: 'trust' ← 送信元ゾーン source_ip: 'test_address001' ← 送信元アドレス destination_zone: 'trust' ← 宛先ゾーン destination_ip: 'test_address002' ← 宛先アドレス service: 'test_service001' ← サービス action: 'allow' state: 'present' register: wk_result_data - 実行結果:対象のセキュリティポリシーが登録された。 ※Ansibleの実行結果(diff)を抜粋
"before": "", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"policy001\">\n\t<from>\n\t\t<member>trust</member>\n\t</from>\n\t<to>\n\t\t<member>trust</member>\n\t</to>\n\t<source>\n\t\t<member>test_address001</member>\n\t</source>\n\t<source-user>\n\t\t<member>any</member>\n\t</source-user>\n\t<hip-profiles>\n\t\t<member>any</member>\n\t</hip-profiles>\n\t<destination>\n\t\t<member>test_address002</member>\n\t</destination>\n\t<application>\n\t\t<member>any</member>\n\t</application>\n\t<service>\n\t\t<member>test_service001</member>\n\t</service>\n\t<category>\n\t\t<member>any</member>\n\t</category>\n\t<action>allow</action>\n\t<log-start>no</log-start>\n\t<log-end>yes</log-end>\n\t<description>policy001</description>\n\t<rule-type>universal</rule-type>\n\t<negate-source>no</negate-source>\n\t<negate-destination>no</negate-destination>\n\t<disabled>no</disabled>\n\t<option>\n\t\t<disable-server-response-inspection>no</disable-server-response-inspection>\n\t</option>\n</entry>\n"
セキュリティポリシーの登録 ※セキュリティポリシーが既に存在する場合
- 接続情報とポリシー(送信元/宛先/サービス)を指定して登録(state: ‘present’)を行う。 ※セキュリティポリシーが既に存在する場合は、既存設定の置き換えとなる(state: ‘replaced’と同様)
- name: Security_Policy Present paloaltonetworks.panos.panos_security_rule: provider: '{{ provider }}' ← 接続情報 rule_name: 'policy001' description: 'policy001' source_zone: 'trust' ← 送信元ゾーン source_ip: 'test_address001,test_addressgroup001' ← 送信元アドレス destination_zone: 'trust' ← 宛先ゾーン destination_ip: 'test_address002,test_addressgroup001' ← 宛先アドレス service: 'test_service001,test_servicegroup001' ← サービス action: 'allow' state: 'present' register: wk_result_data - 実行結果:対象のセキュリティポリシーが登録された。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"policy001\">\n\t<from>\n\t\t<member>trust</member>\n\t</from>\n\t<to>\n\t\t<member>trust</member>\n\t</to>\n\t<source>\n\t\t<member>test_address001</member>\n\t</source>\n\t<source-user>\n\t\t<member>any</member>\n\t</source-user>\n\t<hip-profiles>\n\t\t<member>any</member>\n\t</hip-profiles>\n\t<destination>\n\t\t<member>test_address002</member>\n\t</destination>\n\t<application>\n\t\t<member>any</member>\n\t</application>\n\t<service>\n\t\t<member>test_service001</member>\n\t</service>\n\t<category>\n\t\t<member>any</member>\n\t</category>\n\t<action>allow</action>\n\t<log-start>no</log-start>\n\t<log-end>yes</log-end>\n\t<description>policy001</description>\n\t<rule-type>universal</rule-type>\n\t<negate-source>no</negate-source>\n\t<negate-destination>no</negate-destination>\n\t<disabled>no</disabled>\n\t<option>\n\t\t<disable-server-response-inspection>no</disable-server-response-inspection>\n\t</option>\n</entry>\n", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"policy001\">\n\t<from>\n\t\t<member>trust</member>\n\t</from>\n\t<to>\n\t\t<member>trust</member>\n\t</to>\n\t<source>\n\t\t<member>test_address001</member>\n\t\t<member>test_addressgroup001</member>\n\t</source>\n\t<source-user>\n\t\t<member>any</member>\n\t</source-user>\n\t<hip-profiles>\n\t\t<member>any</member>\n\t</hip-profiles>\n\t<destination>\n\t\t<member>test_address002</member>\n\t\t<member>test_addressgroup001</member>\n\t</destination>\n\t<application>\n\t\t<member>any</member>\n\t</application>\n\t<service>\n\t\t<member>test_service001</member>\n\t\t<member>test_servicegroup001</member>\n\t</service>\n\t<category>\n\t\t<member>any</member>\n\t</category>\n\t<action>allow</action>\n\t<log-start>no</log-start>\n\t<log-end>yes</log-end>\n\t<description>policy001</description>\n\t<rule-type>universal</rule-type>\n\t<negate-source>no</negate-source>\n\t<negate-destination>no</negate-destination>\n\t<disabled>no</disabled>\n\t<option>\n\t\t<disable-server-response-inspection>no</disable-server-response-inspection>\n\t</option>\n</entry>\n"
セキュリティポリシーの変更 ※登録のつづき
- 接続情報とポリシー(送信元/宛先/サービス)を指定して変更(state: ‘replaced’)を行う。 ※replacedの場合は、既存設定の置き換えとなる
- name: Security_Policy Replaced paloaltonetworks.panos.panos_security_rule: provider: '{{ provider }}' ← 接続情報 rule_name: 'policy001' description: 'policy001' source_zone: 'trust' ← 送信元ゾーン source_ip: 'test_address001,test_addressgroup001' ← 送信元アドレス destination_zone: 'trust' ← 宛先ゾーン destination_ip: 'test_address002,test_addressgroup001' ← 宛先アドレス service: 'test_service001,test_servicegroup001' ← サービス action: 'allow' state: 'replaced' register: wk_result_data - 実行結果:対象のセキュリティポリシーが登録された。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"policy001\">\n\t<from>\n\t\t<member>trust</member>\n\t</from>\n\t<to>\n\t\t<member>trust</member>\n\t</to>\n\t<source>\n\t\t<member>test_address001</member>\n\t</source>\n\t<source-user>\n\t\t<member>any</member>\n\t</source-user>\n\t<hip-profiles>\n\t\t<member>any</member>\n\t</hip-profiles>\n\t<destination>\n\t\t<member>test_address002</member>\n\t</destination>\n\t<application>\n\t\t<member>any</member>\n\t</application>\n\t<service>\n\t\t<member>test_service001</member>\n\t</service>\n\t<category>\n\t\t<member>any</member>\n\t</category>\n\t<action>allow</action>\n\t<log-start>no</log-start>\n\t<log-end>yes</log-end>\n\t<description>policy001</description>\n\t<rule-type>universal</rule-type>\n\t<negate-source>no</negate-source>\n\t<negate-destination>no</negate-destination>\n\t<disabled>no</disabled>\n\t<option>\n\t\t<disable-server-response-inspection>no</disable-server-response-inspection>\n\t</option>\n</entry>\n", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"policy001\">\n\t<from>\n\t\t<member>trust</member>\n\t</from>\n\t<to>\n\t\t<member>trust</member>\n\t</to>\n\t<source>\n\t\t<member>test_address001</member>\n\t\t<member>test_addressgroup001</member>\n\t</source>\n\t<source-user>\n\t\t<member>any</member>\n\t</source-user>\n\t<hip-profiles>\n\t\t<member>any</member>\n\t</hip-profiles>\n\t<destination>\n\t\t<member>test_address002</member>\n\t\t<member>test_addressgroup001</member>\n\t</destination>\n\t<application>\n\t\t<member>any</member>\n\t</application>\n\t<service>\n\t\t<member>test_service001</member>\n\t\t<member>test_servicegroup001</member>\n\t</service>\n\t<category>\n\t\t<member>any</member>\n\t</category>\n\t<action>allow</action>\n\t<log-start>no</log-start>\n\t<log-end>yes</log-end>\n\t<description>policy001</description>\n\t<rule-type>universal</rule-type>\n\t<negate-source>no</negate-source>\n\t<negate-destination>no</negate-destination>\n\t<disabled>no</disabled>\n\t<option>\n\t\t<disable-server-response-inspection>no</disable-server-response-inspection>\n\t</option>\n</entry>\n"
- 接続情報とポリシー(送信元/宛先/サービス)を指定して変更(state: ‘merged’)を行う。
- name: Security_Policy Merged paloaltonetworks.panos.panos_security_rule: provider: '{{ provider }}' ← 接続情報 rule_name: 'policy001' description: 'policy001' source_zone: 'trust' ← 送信元ゾーン source_ip: 'test_address003' ← 送信元アドレス destination_zone: 'trust' ← 宛先ゾーン destination_ip: 'test_address003' ← 宛先アドレス service: 'test_service003' ← サービス action: 'allow' state: 'merged' register: wk_result_data - 実行結果:エラーとなり変更処理はできない。 ※変更は、state:present/replacedで実施する必要あり。。。要注意!!
"msg": "Failed update source_devices" ※msgの抜粋
セキュリティポリシーの削除 ※変更のつづき
- 接続情報とポリシーを指定して削除(state: ‘absent’)を行う。
- name: Security_Policy Absent paloaltonetworks.panos.panos_security_rule: provider: '{{ provider }}' ← 接続情報 rule_name: 'policy001' state: 'absent' register: wk_result_data - 実行結果:対象のセキュリティポリシーが削除された。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"policy001\">\n\t<from>\n\t\t<member>trust</member>\n\t</from>\n\t<to>\n\t\t<member>trust</member>\n\t</to>\n\t<source>\n\t\t<member>test_address001</member>\n\t\t<member>test_addressgroup001</member>\n\t\t<member>test_address003</member>\n\t</source>\n\t<source-user>\n\t\t<member>any</member>\n\t</source-user>\n\t<hip-profiles>\n\t\t<member>any</member>\n\t</hip-profiles>\n\t<destination>\n\t\t<member>test_address002</member>\n\t\t<member>test_addressgroup001</member>\n\t\t<member>test_address003</member>\n\t</destination>\n\t<application>\n\t\t<member>any</member>\n\t</application>\n\t<service>\n\t\t<member>test_service001</member>\n\t\t<member>test_servicegroup001</member>\n\t\t<member>test_service003</member>\n\t</service>\n\t<category>\n\t\t<member>any</member>\n\t</category>\n\t<action>allow</action>\n\t<log-start>no</log-start>\n\t<log-end>yes</log-end>\n\t<description>policy001</description>\n\t<rule-type>universal</rule-type>\n\t<negate-source>no</negate-source>\n\t<negate-destination>no</negate-destination>\n\t<disabled>no</disabled>\n\t<option>\n\t\t<disable-server-response-inspection>no</disable-server-response-inspection>\n\t</option>\n</entry>\n", "after" : ""
最後に
- 「Ansible」の「paloaltonetworks.panos.panos_security_rule」を使用し、「セキュリティポリシー」の登録/変更/削除ができたことは良かった。何らかの変更申請の仕組みと連携することで、より 設定変更の自動化 が活用できるようになると考える。
- 現状 設定情報がベタ書きで使い勝手が悪いので、今後 設定内容をINPUTする仕組みを試みたいと思います。
また、引続き 他にも様々なNW機器設定を自動化してみようと思います。
