内容

はじめに

前提条件

要件

使用するコンポーネント

背景説明

設定

ネットワーク図

コンフィギュレーション

確認

トラブルシュート

関連情報

はじめに

このドキュメントでは、Firepower Management Center(FMC)を自動化して、AnsibleでFirepower Threat Defense(FTD)の高可用性を実現する手順について説明します。

前提条件

要件

次の項目に関する知識があることが推奨されます。

- アンサブル

- Ubuntuサーバ

- Cisco Firepower Management Center(FMC)仮想

- Cisco Firepower Threat Defense(FTD)仮想

このラボ環境では、AnsibleはUbuntuに導入されています。

この記事で参照されているAnsibleコマンドを実行するために、AnsibleがサポートするすべてのプラットフォームにAnsibleが正常にインストールされていることを確認する必要があります。

使用するコンポーネント

このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。

- Ubuntuサーバ22.04

- Ansible 2.10.8

- Python 3.10

- Cisco Firepower Threat Defense(FTD)仮想7.4.1

- Cisco Firepower Management Center(FMC)仮想7.4.1

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな（デフォルト）設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。

背景説明

Ansibleは汎用性の高いツールで、ネットワークデバイスの管理において大きな効果を発揮します。Ansibleを使用して自動化されたタスクを実行するには、さまざまな方法を使用できます。この文書で使用されている方法は、テスト目的の参照用として使用できます。

この例では、プレイブックの例を正常に実行した後、FTDハイアベイラビリティとそのスタンバイIPアドレスが作成されます。

設定

ネットワーク図

トポロジ

コンフィギュレーション

シスコはサンプルスクリプトまたはお客様が作成したスクリプトをサポートしていないため、お客様のニーズに応じてテストできる例がいくつかあります。

予備検証が正常に完了したことを確認することが不可欠です。

- Ansibleサーバはインターネット接続を備えています。

- Ansibleサーバは、FMC GUIポート（FMC GUIのデフォルトポートは443）と正常に通信できます。

- 2台のFTDデバイスがFMCに正常に登録されました。

- プライマリFTDはインターフェイスIPアドレスで設定されます。

ステップ 1： SSHまたはコンソールを使用してAnsibleサーバのCLIに接続します。

ステップ 2：コマンドansible-galaxy collection install cisco.fmcansibleを実行して、AnsibleサーバにFMCのAnsibleコレクションをインストールします。

cisco@inserthostname-here:~$ ansible-galaxy collection install cisco.fmcansible

ステップ 3：コマンドmkdir /home/cisco/fmc_ansibleを実行して、関連ファイルを保存する新しいフォルダを作成します。この例では、ホームディレクトリは/home/cisco/で、新しいフォルダ名はfmc_ansibleです。

cisco@inserthostname-here:~$ mkdir /home/cisco/fmc_ansible

ステップ 4： /home/cisco/fmc_ansibleフォルダに移動し、インベントリファイルを作成します。この例では、インベントリファイルの名前はinventory.iniです。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls

inventory.ini

この内容を複製して貼り付け、利用できるようにすることで、正確なパラメータを使用して太字のセクションを変更できます。

[fmc]

10.0.5.11

[fmc:vars]

ansible_user=cisco

ansible_password=cisco

ansible_httpapi_port=443

ansible_httpapi_use_ssl=True

ansible_httpapi_validate_certs=False

network_type=HOST

ansible_network_os=cisco.fmcansible.fmc

ステップ 5： /home/cisco/fmc_ansibleフォルダに移動し、FTD HAを作成するための変数ファイルを作成します。この例では、変数のファイル名はfmc-create-ftd-ha-vars.ymlです。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls

fmc-create-ftd-ha-vars.yml inventory.ini

この内容を複製して貼り付け、利用できるようにすることで、正確なパラメータを使用して太字のセクションを変更できます。

user: domain: 'Global' device_name: ftd1: 'FTDA' ftd2: 'FTDB' ftd_ha: name: 'FTD_HA' active_ip: '192.168.1.1' standby_ip: '192.168.1.2' key: cisco mask24: '255.255.255.0'

手順 6： /home/cisco/fmc_ansibleフォルダに移動し、FTD HAを作成するためのプレイブックファイルを作成します。この例では、プレイブックのファイル名はfmc-create-ftd-ha-playbook.yamlです。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls

fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-vars.yml inventory.ini

この内容を複製して貼り付け、利用できるようにすることで、正確なパラメータを使用して太字のセクションを変更できます。

--- - name: FMC Create FTD HA hosts: fmc connection: httpapi tasks: - name: Task01 - Get User Domain cisco.fmcansible.fmc_configuration: operation: getAllDomain filters: name: "{{ user.domain }}" register_as: domain - name: Task02 - Get FTD1 cisco.fmcansible.fmc_configuration: operation: getAllDevice path_params: domainUUID: '{{ domain[0].uuid }}' filters: name: "{{ device_name.ftd1 }}" register_as: ftd1_list - name: Task03 - Get FTD2 cisco.fmcansible.fmc_configuration: operation: getAllDevice path_params: domainUUID: '{{ domain[0].uuid }}' filters: name: "{{ device_name.ftd2 }}" register_as: ftd2_list - name: Task04 - Get Physical Interfaces cisco.fmcansible.fmc_configuration: operation: getAllFTDPhysicalInterface path_params: containerUUID: '{{ ftd1_list[0].id }}' domainUUID: '{{ domain[0].uuid }}' register_as: primary_physical_interfaces - name: Task05 - Configure FTD HA cisco.fmcansible.fmc_configuration: operation: "createFTDHADeviceContainer" data: primary: {'id': '{{ ftd1_list[0].id }}'} secondary: {'id': '{{ ftd2_list[0].id }}'} name: "{{ ftd_ha.name }}" type: "DeviceHAPair" ftdHABootstrap: { 'isEncryptionEnabled': false, 'encKeyGenerationScheme': 'CUSTOM', 'sharedKey': "{{ ftd_ha.key }}", 'useSameLinkForFailovers': true, 'lanFailover': { 'useIPv6Address': false, 'subnetMask': "{{ ftd_ha.mask24 }}", 'interfaceObject': { 'id': '{{ primary_physical_interfaces[7].id }}', 'type': 'PhysicalInterface', 'name': 'GigabitEthernet0/7' }, 'standbyIP': "{{ ftd_ha.standby_ip }}", 'logicalName': 'LAN-INTERFACE', 'activeIP': "{{ ftd_ha.active_ip }}" }, 'statefulFailover': { 'useIPv6Address': false, 'subnetMask': "{{ ftd_ha.mask24 }}", 'interfaceObject': { 'id': '{{ primary_physical_interfaces[7].id }}', 'type': 'PhysicalInterface', 'name': 'GigabitEthernet0/7' }, 'standbyIP': "{{ ftd_ha.standby_ip }}", 'logicalName': 'STATEFUL-INTERFACE', 'activeIP': "{{ ftd_ha.active_ip }}" } } path_params: domainUUID: "{{ domain[0].uuid }}" - name: Task06 - Wait for FTD HA Ready ansible.builtin.wait_for: timeout: 360 delegate_to: localhost - name: Task07 - Get FTD HA object cisco.fmcansible.fmc_configuration: operation: "getAllFTDHADeviceContainer" path_params: domainUUID: "{{ domain[0].uuid }}" query_params: expanded: true register_as: ftd_ha_container delay: 15 - name: Task08 - Confirm Standby Ready Status cisco.fmcansible.fmc_configuration: operation: "getFTDHADeviceContainer" path_params: objectId: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" register_as: ha_status until: ha_status.metadata.secondaryStatus.currentStatus is match("Standby") retries: 1000 delay: 2

注：このプレイブック例で太字で示されている名前は変数として機能します。これらの変数に対応する値は、変数ファイル内に保存されます。

手順 7： /home/cisco/fmc_ansibleフォルダに移動し、ansibleタスクを再生するansible-playbook -i <inventory_name>.ini  <playbook_name>.yaml  -e@"<playbook_vars>.yml"ためにコマンドを実行します。

この例では、コマンドはansible-playbook -i inventory.ini fmc-create-ftd-ha-playbook.yaml -e@"fmc-create-ftd-ha-vars.yml"です。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-vars.yml inventory.ini cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-create-ftd-ha-playbook.yaml -e@"fmc-create-ftd-ha-vars.yml" PLAY [FMC Create FTD HA] ***************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************* ok: [10.0.5.11] TASK [Task01 - Get User Domain] ********************************************************************************************************************************** ok: [10.0.5.11] TASK [Task02 - Get FTD1] ***************************************************************************************************************************************** ok: [10.0.5.11] TASK [Task03 - Get FTD2] ***************************************************************************************************************************************** ok: [10.0.5.11] TASK [Task04 - Get Physical Interfaces] ************************************************************************************************************************** ok: [10.0.5.11] TASK [Task05 - Configure FTD HA] ********************************************************************************************************************************* changed: [10.0.5.11] TASK [Task06 - Wait for FTD HA Ready] **************************************************************************************************************************** ok: [10.0.5.11] TASK [Task07 - Get FTD HA object] ******************************************************************************************************************************** ok: [10.0.5.11] TASK [Task08 - Confirm Standby Ready Status] ********************************************************************************************************************* ok: [10.0.5.11] PLAY RECAP ******************************************************************************************************************************************************* 10.0.5.11 : ok=9 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

ステップ 8： /home/cisco/fmc_ansibleフォルダに移動し、FTD HAスタンバイIPアドレスを更新するための変数ファイルを作成します。この例では、変数のファイル名はfmc-create-ftd-ha-standby-ip-vars.ymlです。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls

fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-standby-ip-vars.yml fmc-create-ftd-ha-vars.yml inventory.ini

この内容を複製して貼り付け、利用できるようにし、正確なパラメータで太字のセクションを変更します。

user: domain: 'Global' ftd_data: outside_name: 'Outside' inside_name: 'Inside' outside_ip: '10.1.1.1' inside_ip: '10.1.2.1' mask24: '255.255.255.0' ftd_ha: name: 'FTD_HA' outside_standby: '10.1.1.2' inside_standby: '10.1.2.2'

ステップ 9： /home/cisco/fmc_ansibleフォルダに移動し、FTD HAスタンバイIPアドレスを更新するためのプレイブックファイルを作成します。この例では、プレイブックのファイル名はfmc-create-ftd-ha-standby-ip-playbook.yamlです。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls

fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-standby-ip-playbook.yaml fmc-create-ftd-ha-standby-ip-vars.yml fmc-create-ftd-ha-vars.yml inventory.ini

この内容を複製して貼り付け、利用できるようにすることで、正確なパラメータを使用して太字のセクションを変更できます。

--- - name: FMC Update FTD HA Interface Standby IP hosts: fmc connection: httpapi tasks: - name: Task01 - Get User Domain cisco.fmcansible.fmc_configuration: operation: getAllDomain filters: name: "{{ user.domain }}" register_as: domain - name: Task02 - Get FTD HA Object cisco.fmcansible.fmc_configuration: operation: "getAllFTDHADeviceContainer" path_params: domainUUID: "{{ domain[0].uuid }}" query_params: expanded: true register_as: ftd_ha_container - name: Task03 - Get Outside Interface cisco.fmcansible.fmc_configuration: operation: "getAllFTDHAMonitoredInterfaces" path_params: containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" filters: name: "{{ ftd_data.outside_name }}" register_as: outside_interface - name: Task04 - Get Inside Interface cisco.fmcansible.fmc_configuration: operation: "getAllFTDHAMonitoredInterfaces" path_params: containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" filters: name: "{{ ftd_data.inside_name }}" register_as: inside_interface - name: Task05 - Configure Standby IP-Outside cisco.fmcansible.fmc_configuration: operation: "updateFTDHAMonitoredInterfaces" data: id: "{{ outside_interface[0].id }}" name: "{{ outside_interface[0].name }}" ipv4Configuration: {'standbyIPv4Address': "{{ ftd_ha.outside_standby }}"} monitorForFailures: true path_params: objectId: "{{ outside_interface[0].id }}" containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" - name: Task06 - Config Standby IP-Inside cisco.fmcansible.fmc_configuration: operation: "updateFTDHAMonitoredInterfaces" data: id: "{{ inside_interface[0].id }}" name: "{{ inside_interface[0].name }}" ipv4Configuration: {'standbyIPv4Address': "{{ ftd_ha.inside_standby }}"} monitorForFailures: true path_params: objectId: "{{ inside_interface[0].id }}" containerUUID: "{{ ftd_ha_container[0].id }}" domainUUID: "{{ domain[0].uuid }}" - name: Task07 - Get Deployable Devices cisco.fmcansible.fmc_configuration: operation: getDeployableDevice path_params: domainUUID: '{{ domain[0].uuid }}' query_params: expanded: true register_as: deploy_devices - name: Task08 - Start Deployment cisco.fmcansible.fmc_configuration: operation: createDeploymentRequest data: version: '{{ deploy_devices[0].version }}' deviceList: - '{{ deploy_devices[0].device.id }}' forceDeploy: True path_params: domainUUID: '{{ domain[0].uuid }}' register_as: deployment_job - name: Task09 - Wait for Deployment Complete ansible.builtin.wait_for: timeout: 240 delegate_to: localhost - name: Task10 - Poll Deployment Status Until Deployment Successful cisco.fmcansible.fmc_configuration: operation: getDeploymentDetail path_params: containerUUID: '{{ deploy_devices[0].device.id }}' domainUUID: '{{ domain[0].uuid }}' register_as: deployment_status until: deployment_status[0].status is match("SUCCEEDED") retries: 1000 delay: 3 - name: Task11 - Stop The Playbook If The Deployment Failed fail: msg: 'Deployment failed. Status: {{ deployment_status[0].status }}' when: deployment_status[0].status is not match("SUCCEEDED")

注：このプレイブック例で太字で示されている名前は変数として機能します。これらの変数に対応する値は、変数ファイル内に保存されます。

ステップ 10： /home/cisco/fmc_ansibleフォルダに移動し、ansibleタスクを再生するansible-playbook -i <inventory_name>.ini  <playbook_name>.yaml  -e@"<playbook_vars>.yml"ためにコマンドを実行します。

この例では、コマンドはansible-playbook -i inventory.ini fmc-create-ftd-ha-standby-ip-playbook.yaml -e@"fmc-create-ftd-ha-standby-ip-vars.yml"です。

cisco@inserthostname-here:~$ cd /home/cisco/fmc_ansible/

ccisco@inserthostname-here:~/fmc_ansible$ ls

fmc-create-ftd-ha-playbook.yaml fmc-create-ftd-ha-standby-ip-playbook.yaml fmc-create-ftd-ha-standby-ip-vars.yml fmc-create-ftd-ha-vars.yml inventory.ini

cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-create-ftd-ha-standby-ip-playbook.yaml -e@"fmc-create-ftd-ha-standby-ip-vars.yml" PLAY [FMC Update FTD HA Interface Standby IP] ******************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************* ok: [10.0.5.11] TASK [Task01 - Get User Domain] ********************************************************************************************************************************** ok: [10.0.5.11] TASK [Task02 - Get FTD HA Object] ******************************************************************************************************************************** ok: [10.0.5.11] TASK [Task03 - Get Outside Interface] **************************************************************************************************************************** ok: [10.0.5.11] TASK [Task04 - Get Inside Interface] ***************************************************************************************************************************** ok: [10.0.5.11] TASK [Task05 - Configure Standby IP-Outside] ********************************************************************************************************************* changed: [10.0.5.11] TASK [Task06 - Config Standby IP-Inside] ************************************************************************************************************************* changed: [10.0.5.11] TASK [Task07 - Get Deployable Devices] *************************************************************************************************************************** ok: [10.0.5.11] TASK [Task08 - Start Deployment] ********************************************************************************************************************************* changed: [10.0.5.11] TASK [Task09 - Wait for Deployment Complete] ********************************************************************************************************************* ok: [10.0.5.11] TASK [Task10 - Poll Deployment Status Until Deployment Successful] *********************************************************************************************** ok: [10.0.5.11] TASK [Task11 - Stop The Playbook If The Deployment Failed] ******************************************************************************************************* skipping: [10.0.5.11] PLAY RECAP ******************************************************************************************************************************************************* 10.0.5.11 : ok=11 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

確認

応答タスクを実行する前に、FMC GUIにログインします。Devices > Device Management, 2 FTD registered successfully on FMC with configured access control policyの順に移動します。

Ansibleタスクの実行前

割り当て可能なタスクの実行後、FMC GUIにログインします。Devices > Device Management, FTD HA is created successfullyの順に移動します。

Ansibleタスクを正常に実行した後

FTD HAのEditをクリックすると、フェールオーバーIPアドレスとインターフェイスのスタンバイIPアドレスが正常に設定されます。

FTDハイアベイラビリティの詳細

トラブルシュート

このセクションでは、設定のトラブルシューティングに役立つ情報を紹介します。

Ansible Playbookのログをさらに表示するには、-vvvを使用してAnsible Playbookを実行します。

cisco@inserthostname-here:~/fmc_ansible$ ansible-playbook -i inventory.ini fmc-create-ftd-ha-standby-ip-playbook.yaml -e@"fmc-create-ftd-ha-standby-ip-vars.yml" -vvv

関連情報

Cisco Devnet FMCアンサブル