Ansibleを使用してNW機器設定を自動化する(PaloAlto-セキュリティポリシー編①)

  • 当記事は、日常の運用業務(NW機器設定)の自動化により、運用コストの削減 および 運用品質の向上 を目標に
    「Ansible」を使用し、様々なNW機器設定を自動化してみようと 試みた記事です。
  • Ansibleは、OSS版(AWX)+OSS版(Ansible)を使用しております。

 

PaloAltoの「セキュリティポリシー」の登録/変更/削除を実施してみた

事前設定

 

Playbook作成(YAML)

使用モジュール

 

接続情報(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機器設定を自動化してみようと思います。
タイトルとURLをコピーしました