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

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

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

2. Export Policy の設定¶
Step.2-1¶
Remote Location の設定が終わったら、次は Export Policy を設定します。 Admin → Import/Export → Export Policies → Configuration → Policy → Create Configuration Export Policy をクリックします。

Step.2-2¶
Create Configuration Export Policy ウインドウが表示されます。

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

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

3. 鍵交換方式で設定した Remote Location の変更時は SSH Key Passphrase 指定が必須?¶
Remote Locatoin を設定する場合、Admin → Import/Export → Remote Locations → [RemoteLocation] → Policy → Change Remote Path をクリックします。

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

Remote Location の設定を CLI から確認すると以下のように表示されます。なぜか path や user 設定の前に # が表示されており、まるでコメントのように見えます…
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 で設定可能なコマンド候補を確認すると以下のように表示されます。 path や user は指定できるのですが、認証方式の設定変更や秘密鍵の変更は出来ないように見えます。
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"
}
}
}
]
}
}
]
}