らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Cisco ACI でインポート/バックアップ先になる Remote Location を鍵交換方式で設定する

以前に Cisco ACI でコンフィグの定期バックアップ設定をするというメモを書きました。 この記事では Remote Location へのアクセス時にパスワード認証することを前提にしていたのですが、今回は鍵交換方式で認証する場合の設定例をメモします。 尚、ACI 4.2(2e) で動作確認しました。 詳細は後述しますが Remote Location の新規作成時は SSH Key Passphrase が任意であるにも関わらず、設定変更時は必須になっているように見えました…

目次

1. Remote Location の設定

Step.1-1

AdminImport/ExportRemote LocationsCreate Remote Location をクリックします。

f:id:sig9:20191022132413p:plain

Step.1-2

Craete Remote Location ウインドウが表示されます。 今回は SCP を鍵交換方式で設定するので Protocol には scpAuthentication Type には Use SSH Public/Private Files を選択します。 すると、設定可能項目は以下のようになるはずです (SSH Key Contents 欄などが表示されるはずです)。

f:id:sig9:20191022132458p:plain

Step.1-3

パラメータを任意で指定します。 Remote Path にはコンフィグをインポートまたはエクスポートしたいディレクトリを指定します。 この値は / で終わっても、終わらなくても、いずれにしてもディレクトリとして扱われるようです。 SSH Key Contentns には秘密鍵を指定します。 秘密鍵を一度保存すると、GUI 上からは「秘密鍵が保存されている」ことは分かるものの、秘密鍵のオリジナルフレーズは見えないようになるようなので、「同じ admin でログインした別ユーザに秘密鍵を盗まれてしまう」ということは無さそうです。

f:id:sig9:20191022132518p:plain

2. Export Policy の設定

Step.2-1

Remote Location の設定が終わったら、次は Export Policy を設定します。 AdminImport/ExportExport PoliciesConfigurationPolicyCreate Configuration Export Policy をクリックします。

f:id:sig9:20191022132539p:plain

Step.2-2

Create Configuration Export Policy ウインドウが表示されます。

f:id:sig9:20191022132547p:plain

パラメータを任意で指定します。 Formatjson でも xml でも (自身の運用に併せた) お好みで良いと思いますが、Cisco のサンプルでは json を使ったケースが多いように思いますので、こだわりが無ければ json で良いかも知れません。 Snapshot にチェックを入れると Remote Location は使わず、APIC 内部にコンフィグを保存しますので、今回はチェックしません。 コンフィグを定期的に自動バックアップさせるのであれば Scheduler にスケジュールを設定します。 ACI 初期状態で「1:00, 9:00, 17:00」に実行される EveryEightHour というスケジュール設定があるので、今回はこれを設定しました。 尚、スケジューラ設定は空欄にしておき、定期実行はさせず、次ステップで紹介する「手動コンフィグ取得用設定」にしておくことも可能です。

f:id:sig9:20191022132557p:plain

Step.2-3

Scheduler 設定が存在していても空欄であっても、Export PolicyStart NowNow に設定して Submit すると、すぐに定義した Export Policy が実行されます。 「定期実行はさせないが、作業の直前・直後にコンフィグをバックアップしたい」等は Export Destination は作業用 PC に設定され、Scheduler 設定が空欄の Export Policy を作っておいても良いかも知れません。 尚、Start NowYes にして Submit し、即時コンフィグバックアップを取得すると Start Now 設定は No に戻ります。 再び「すぐにコンフィグバックアップを取得したい」場合は都度、Start NowYes にして Submit する必要があります。

f:id:sig9:20191022132607p:plain

3. 鍵交換方式で設定した Remote Location の変更時は SSH Key Passphrase 指定が必須?

Remote Locatoin を設定する場合、AdminImport/ExportRemote Locations[RemoteLocation]PolicyChange Remote Path をクリックします。

f:id:sig9:20191022132616p:plain

Change Remote Location ウインドウが表示されます。 新規に Remote Location を設定する場合は SSH Key Passphrase が必須では無かったので空欄に出来たのですが、なぜか設定変更時は必須扱いとされてしまい、空欄のまま Submit することが出来ません…

f:id:sig9:20191022132628p:plain

Remote Location の設定を CLI から確認すると以下のように表示されます。なぜか pathuser 設定の前に # が表示されており、まるでコメントのように見えます…

remote path backup-server
  mgmt-epg out-of-band default
  # path scp 192.168.1.1 port 22 remote-directory /root/aci-backup/
  # user root
  exit

CLI で設定可能なコマンド候補を確認すると以下のように表示されます。 pathuser は指定できるのですが、認証方式の設定変更や秘密鍵の変更は出来ないように見えます。

apic(config-remote)# ?
 description    Configure remote path description
 mgmt-epg       Select remote path management EPG
 no             Negate a command or set its defaults
 path           Configure remote path properties
 user           Set the remote path user name and password

 bash           Bash shell for unix commands
 end            Exit to the exec mode
 exit           Exit from current mode
 export-config  Export Configuration
 fabric         Show fabric related information
 import-config  Import Configuration
 show           Show running system information
 terminal       Enable or disable pager for command output
 try            Show deployment related changes
 usage          Show deployment usage
 where          Show the current mode

REST API で取得したコンフィグは以下でした。 AuthType 設定があり、認証方式を指定出来そうに見えますが、秘密鍵自体は別の DN に保存されているのか、ここでは保存されていないように見えました。

{
    "totalCount": "1",
    "imdata": [
        {
            "fileRemotePath": {
                "attributes": {
                    "annotation": "",
                    "authType": "useSshKeyContents",
                    "descr": "",
                    "dn": "uni/fabric/path-backup-server",
                    "host": "192.168.1.1",
                    "name": "backup-server",
                    "nameAlias": "",
                    "protocol": "scp",
                    "remotePath": "/var/aci-backup/",
                    "remotePort": "22",
                    "userName": "admin"
                },
                "children": [
                    {
                        "fileRsARemoteHostToEpg": {
                            "attributes": {
                                "annotation": "",
                                "tDn": "uni/tn-mgmt/mgmtp-default/oob-default"
                            }
                        }
                    }
                ]
            }
        }
    ]
}