Cisco CSR 1000V に REST API でアクセスするには
Cisco CSR 1000V に REST API でアクセスする為の設定をまとめておきます。商用環境で利用する際はセキュリティへの配慮が必要です。
検証環境
VIRL 上で以下の構成を作成しました。端末側は Micro Core Linux を使っています。Micro Core Linux はカスタムしてあり、最新の 6.3 系をベースに curl、nmap、python 等を追加してあります。
- Cisco CSR 1000V(Cisco IOS XE Software, Version 03.14.00.S)
- Micro Core Linux(6.3)
Cisco CSR 1000V の設定
Cisco CSR 1000V の設定は以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | username USER privilege 15 password PASSWORD
!
transport-map type persistent webui REST-API
secure-server
!
interface GigabitEthernet2
ip address 192.168.1.1 255.255.255.0
no shutdown
!
interface VirtualPortGroup 0
ip unnumbered GigabitEthernet 2
!
virtual-service csr_mgmt
vnic gateway VirtualPortGroup0
guest ip address 192.168.1.2
activate
!
ip http authentication local
ip http secure-server
ip route 192.168.1.2 255.255.255.255 VirtualPortGroup0
!
transport type persistent webui input REST-API
!
end
|
Virtual-Service の状態を確認すると以下のように表示されました。REST API が 55443/TCP で Listen していることも分かります。55443/TCP はデフォルト値ですが、設定で変更することも可能です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 | Router# show virtual-service detail
Virtual service csr_mgmt detail
State : Activated
Package information
Name : iosxe-remote-mgmt.03.14.00.S.155-1.S-std.ova
Path : bootflash:/iosxe-remote-mgmt.03.14.00.S.155-1.S-std.ova
Application
Name : csr_mgmt
Installed version : 1.5.1
Description : CSR-MGMT
Signing
Key type : Cisco development key
Method : SHA-1
Licensing
Name : Not Available
Version : Not Available
Detailed guest status
----------------------------------------------------------------------
Process Status Uptime # of restarts
----------------------------------------------------------------------
nginx UP 0Y 0W 0D 0: 0:18 0
climgr UP 0Y 0W 0D 0: 0:18 0
restful_api UP 0Y 0W 0D 0: 0:18 0
fcgicpa Down
pnscag Down
pnscdme Down
----------------------------------------------------------------------
Feature Status Configuration
----------------------------------------------------------------------
Restful API Enabled, UP port: 55443
auto-save-timer: 30 seconds
socket: unix:/usr/local/nginx/csrapi-fcgi.sock;
PNSC Disabled, Down
Network stats:
eth0: RX packets:16, TX packets:6
eth1: RX packets:7, TX packets:7
Coredump file(s): lost+found
Activated profile name: None
Resource reservation
Disk : 756 MB
Memory : 512 MB
CPU : 30% system CPU
Attached devices
Type Name Alias
---------------------------------------------
NIC ieobc_1 ieobc
NIC dp_1_0 net2
Disk _rootfs
Disk /opt/var
Disk /opt/va...
Serial/shell serial0
Serial/aux serial1
Serial/Syslog serial2
Serial/Trace serial3
Watchdog watchdo...
Network interfaces
MAC address Attached to interface
------------------------------------------------------
54:0E:00:0B:0C:02 ieobc_1
00:1E:E6:41:35:BA VirtualPortGroup0
Guest interface
---
Interface: eth1
ip address: 192.168.1.2/24
---
Guest routes
---
Address/Mask Next Hop Intf.
-------------------------------------------------------------------------------
0.0.0.0/0 192.168.1.1 eth1
---
Resource admission (without profile) : passed
Disk space : 756MB
Memory : 512MB
CPU : 30% system CPU
VCPUs : Not specified
|
サーバ側からの通信確認
サーバ側から通信確認を行います。具体的には curl を使って POST します。
| tc@box:~$ curl -k -X POST https://192.168.1.2:55443/api/v1/auth/token-services -
H "Accept:application/json" -u "USER:PASSWORD"
{"kind": "object#auth-token", "expiry-time": "Tue Jul 21 15:23:28 2015", "token-id": "q+gLN9oVJ0M9+hvVBAvG0DXAl2OsUiEiyyQp4ciV484=", "link": "https://192.168.1.2:55443/api/v1/auth/token-services/8476463567"}
|
JSON 形式でレスポンスを取得します。ただ、これでは見辛いので python -mjson.tool にパイプします。これで JSON のデータが整形されるので、かなり見やすくなったはずです。
| tc@box:~$ curl -k -X POST https://192.168.1.2:55443/api/v1/auth/token-services -
H "Accept:application/json" -u "USER:PASSWORD" | python -mjson.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 207 100 207 0 0 190 0 0:00:01 0:00:01 --:--:-- 190
{
"expiry-time": "Tue Jul 21 15:23:28 2015",
"kind": "object#auth-token",
"link": "https://192.168.1.2:55443/api/v1/auth/token-services/8476463567",
"token-id": "q+gLN9oVJ0M9+hvVBAvG0DXAl2OsUiEiyyQp4ciV484="
}
|
取得した認証トークンを指定しつつ、ホスト名を取得してみます。
| tc@box:~$ curl -k -X GET https://192.168.1.2:55443/api/v1/global/host-name -H "A
ccept:application/json" -H 'X-auth-token:q+gLN9oVJ0M9+hvVBAvG0DXAl2OsUiEiyyQp4ci
V484=' -u "admin:admin" | python -mjson.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51 100 51 0 0 131 0 --:--:-- --:--:-- --:--:-- 131
{
"host-name": "Router",
"kind": "object#host-name"
}
|
参考