본문 바로가기

카테고리 없음

Programmability for Networker : Part 14 (Cisco OnePK:3)

   

 


이번 포스팅부터는 OnePK 예제를 다뤄봅니다.

본 포스팅의 예제는 원래 제목이기도 하지만, OnePK에서 지원하는 언어 중에 Python을 사용하여 진행하게 됩니다.

이번 포스팅에서는 예제를 하기 위한 다른 내용도 함께 들어가느라, 1개의 예제만 다루게 됩니다.


 

 

○ OnePK 첫 번째 예제

   - Network Element와 연결하여, 해당 Element의 정보를 가져오는 예제

 

 

  - 아래의 동영상과 같이 장비의 다양한 Element 정보를 가져올 수 있다.

 

 

  -  Source Code

 

 

  - Source Code를 보면, 매우 단순(?)합니다.

  - OnePK가 지원되는 Device와의 연결을 위해서 'IP address', 'username', 'password'가 필요로 하며,

    해당 정보를 가지고, 해당 Device에 대한 Handle을 갖는 Device라는 객체를 생성합니다.

  - 생성된 Device라는 객체에서 Connect() 메서드를 이용해서 해당 장비와 연결을 하게 됩니다.

  - 이후, elem이라는 Device의 Element 정보를 갖는 값을 이용해서 필요한 정보를 가져올 수 있게 됩니다.

  - 위의 코드만 보면, 내용을 정확히 몰라도 직관적으로 이해할 수 있을 정도로 단순합니다.

  - 제일 위에 import한 ZIGI_OnePK라는 Library를 이용해서 element에 대한 Device를 만들고 사용하는 데,

    ZIGI_OnePK는 OnePK를 사용하기 쉽게 도와주는 간단한 Library입니다.

  - 아래에서는 해당 Library에 대한 Code를 나타내고 있습니다.

 

 

 ZIGI-OnePK Library Source Code 

    - https://github.com/NetworkZIGI/OnePK

 

  - zigiElement 라는 Class와 PinningHandler라는 Class로 구성되어 있습니다.

  - zigiElement class에는 생성자 / tlsPinningConnect / Connect / DisConnet 메서드로 구성되어 있습니다.

  - OnePK 생성자에서는 접속하고자 하는 Device의 IP와 Username, Password, Pin File, Port를 입력하게 되어 있습니다.

  - OnePK는 Default로 15002를 사용하며, 다른 포트로 변경 가능합니다.

  - Pin File과 Pinning은 특정 Host가 WhiteList 기반의 TLS 인증을 하는 절차인데,

    Pin File은 Device에서 OnePK 설정을 하면 생성되는 Fingerprint 값과 Hash type, Device ID로 구성된 파일입니다.
    (실제 순서, Device ID, Hash type, Fingerprint)

    여기서는 TLS Pinning이라고 하는 TLS를 사용한 암호화 통신을 유지하며, 인증에 대한 부분만 Bypass하여 OnePK를 쉽게

    사용할 수 있는 방식으로 구성되어 있습니다.

  - 예제코드에서 다뤄지는 elem 변수는 OnePK API에서 제공되는 NetworkElement Class에 대한 객체이며,

    예제에서 다룬 속성 값들의 정보는 모두 NetworkElement Class에서 제공되는 속성 값이라고 볼 수 있습니다.

    즉, NetworkElement Class 내용을 보면 보다 많은 필요한 정보를 사용할 수 있습니다.

  - 이처럼 OnePK를 사용하기 위한 API 정보는 아래 그림과 같이 API 문서 페이지를 보면 모두 확인할 수 있습니다.

  - 초기 OnePK에서는 Vanilla TCP(일반적인 TCP 통신)를 사용하였으나,

    최신 OnePK(1.3), IOS (15.4)에서는 암호화되지 않은 통신은 Disable되고,  TLS를 사용하도록 하여 보안을 강화하였습니다.

 

 

 

 

   

 

○ OnePK Python API

https://developer.cisco.com/site/onepk/documents/api-reference/python/

 

 

 

 

 Device에서 OnePK 설정

 - OnePK 장비 설정       

ZIGI_DEVICE(config)# onep

ZIGI_DEVICE(config-onep)# transport type tls disable-remotecert-validation

 

 

 - OnePK 상태 확인

ZIGI_DEVICE#sh onep status
Status: enabled by: Config
Version: 1.2.1
Transport: tls; Status: running; Port: 15002; localcert: TP-self-signed-4294967295; client cert validation disabled
Certificate Fingerprint SHA1: 88DCF998 958884C2 1458D3A9 8637E244 A8A244E3
Transport: tipc; Status: disabled
Session Max Limit: 10
CPU Interval: 0 seconds
CPU Falling Threshold: 0%
CPU Rising Threshold: 0%
History Buffer: Enabled
History Buffer Purge: Oldest
History Buffer Size: 32768 bytes
History Syslog: Disabled
History Archived Session: 8
History Max Archive: 16
Trace buffer debugging level is info


Service Set: Base               State: Enabled     Version 1.2.1
Service Set: Vty                State: Disabled    Version 0.1.0
Service Set: Mediatrace         State: Disabled    Version 1.0.0

 

 

 - OnePK Session 상태 확인

ZIGI_DEVICE# sh onep session all
ID         Username State            ReconnectTimer ConnectTime                 ApplicationName
7075       zigi     Connected        0              Mon Dec 15 16:05:04.478     ZIGI-OnePK-APP