Automatyzacja odtwarzania Cisco ISE z backupu - część IV

W kolejnym wpisie z cyklu zajmiemy się sprawdzaniem drugiego z warunków, które są niezbędne do podjęcia decyzji o odtworzeniu z kopii zapasowej. Pokażę Ci teraz jak sprawdzić ważność licencji trial, czy liczba pozostałych dni jest mniejsza niż 21. Wykorzystamy do tego API dostarczane przez Cisco ISE.

Aktywujemy API w Cisco ISE

Interfejs API Cisco ISE nie jest domyślnie włączony. Wynika to z aspektów bezpieczeństwa. Niepoprawnie skonfigurowany może potencjalnie stanowić lukę w zabezpieczeniach jednego z kluczowych komponentów bezpieczeństwa naszej infrastruktury. Cisco ISE w wersji 3.1 oferuje dwa interfejsy – ERS i OpenAPI.

External RESTful Services (ERS) to zestaw REST API, które umożliwiają programowe interakcje z różnymi aspektami Cisco ISE. Należą do nich między innymi konfiguracja polityk, zarządzanie tożsamością, raportowanie i telemetria. ERS pozwala na tworzenie, czytanie, aktualizowanie i usuwanie (model operacji CRUD) obiektów w ISE, takich jak użytkownicy, urządzenia, grupy, itp. Daje to administratorom i deweloperom duże możliwości automatyzacji i integracji zewnętrznych systemów zarządzania z Cisco ISE.

OpenAPI w kontekście Cisco ISE odnosi się do specyfikacji interfejsu API, które są zgodne ze standardem OpenAPI (dawniej Swagger). To standardowa metoda dokumentowania API REST, która umożliwia automatyczne generowanie klientów API w różnych językach programowania oraz interaktywną dokumentację API. W Cisco ISE 3.1, OpenAPI możemy używać do interakcji z niektórymi usługami podobnie jak ERS. Dodatkowym benefitem jest lepsza dokumentacja i narzędzia wspomagające deweloperów.

Dlaczego API w Cisco ISE jest nam potrzebne? Ponieważ korzysta z niego biblioteka języka Python ciscoisesdk. Ta biblioteka zaś jest niezbędna aby poprawnie działały moduły z kolekcji cisco.ise do Ansible. Abu włączyć API musimy zalogować się do Cisco ISE. Następnie wybramy z menu Administration -> API Settings. W zakładce API Service Settings włączamy zarówno ERS jak i OpenAPI. W sieciach firmowych warto też wgrać podpisany przez autoryzowane CA certyfikat do połączeń SSL.

Włączenie ERS i OpenAPI na Cisco ISE
Włączenie ERS i OpenAPI na Cisco ISE
Previous slide
Next slide

Sprawdzamy ważność licencji trial Cisco ISE

Kolekcja cisco.ise ma zaimplementowany moduł odczytujący informację o licencji, co bardzo upraszcza zaprogramowanie czynności sprawdzających.

W pierwszym zadaniu bloku, “Get Evaluation license status”, wykorzystujemy moduł cisco.ise.licensing_eval_license_info. Pobramy za jego pomocą informacje o statusie licencji ewaluacyjnej Cisco ISE. Do wykonania tego zadania konieczne jest podanie nazwy hosta ISE (ise_hostname), nazwy użytkownika (ise_username), hasła (ise_password) oraz informacji, że nie należy weryfikować certyfikatu SSL (ise_verify ustawione na false). Wyniki tego zadania rejestrujemy pod zmienną result.

Następnie, w drugim zadaniu, “Fail if there is more than 21 days left”, wykorzystujemy zarejestrowany wynik i sprawdzamy ile dni pozostało do końca okresu licencji ewaluacyjnej. Jeśli liczba dni przekracza 21, wykonanie playbooka przerywamy z odpowiednim komunikatem błędu. Zadanie to jest wykonane tylko wtedy, gdy zmienna ignore_license_period nie jest ustawiona na true. Pozwala to na opcjonalne pominiecie tego kroku w zależności od konkretnego przypadku użycia lub potrzeb testowych.

---
- name: Check ISE license
  hosts: all
  gather_facts: no

  tasks:
    - block:
      - name: Get Evaluation license status
        cisco.ise.licensing_eval_license_info:
          ise_hostname: "{{ vm_name }}"
          ise_username: "{{ ise_username }}"
          ise_password: "{{ ise_password }}"
          ise_verify: false
        register: result

      - name: Fail if there is more than 21 days left
        fail:
          msg: "More than 21 days of evaluation license left. Aborting..."
        when: result.ise_response.daysRemaining > 21
      when: not ignore_license_period

Problemy z uruchomieniem playbooka na niektórych systemach

W niektórych dystrybucjach Linuksa czy na MacOS playbooki z modułami Cisco ISE często nie działają. Wymagają one zdefiniowania dwóch zmiennych środowiskowych, które są stosowane w specyficznych kontekstach. Dzieje się tak szczególnie przy pracy z niektórymi narzędziami i bibliotekami w systemach Unixowych oraz w kontekście komunikacji sieciowej. 

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
export no_proxy=*

Zmienna środowiskowa OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES jest specyficzna dla systemów opartych na macOS i związana jest z ograniczeniami wprowadzonymi w macOS High Sierra i nowszych, dotyczącymi użycia wielowątkowości (a konkretnie forka) w aplikacjach, które korzystają z niektórych interfejsów Apple, takich jak Objective-C. Ustawiając tą zmienną na YES informujemy środowisko uruchomieniowe, że inicjalizacja bezpieczeństwa forka może być wyłączona. Jest to potrzebne dla niektórych operacji, które mogą być wykonywane przez biblioteki lub narzędzia używane w playbookach Ansible. Bez tego, próby użycia wielowątkowości mogłyby skutkować błędami lub awarią aplikacji z powodu tych ograniczeń bezpieczeństwa.

Druga zmienna środowiskowa konfiguruje zachowanie proxy w aplikacjach sieciowych. Ustawienie no_proxy=* informuje system i aplikacje, aby nie używały skonfigurowanego serwera proxy dla żadnych połączeń. Jest to użyteczne w scenariuszach, w których konfiguracja proxy może przeszkadzać w komunikacji bezpośredniej między narzędziami Ansible a urządzeniami sieciowymi, takimi jak Cisco ISE. W przypadku modułów komunikujących się przez sieć, nieodpowiednia konfiguracja proxy może prowadzić do błędów połączenia lub czasu oczekiwania, co ostatecznie uniemożliwia poprawne działanie playbooka.

Konfiguracja pipeline Jenkins

Konfiguracja Jenkinsfile dla tego zadania jest bardzo prosta i polega na uruchomieniu playbooka Ansible. Wszystkie dodatkowe parametry przekazuję w postaci extraVars. Parametry związane z loginem i hasłem są najpierw przekazuję w bezpieczny sposób do środowiska wykonania zdefiniowanego zadania. Same wartości przechowuję bezpiecznie w Jenkinsie.

stage('Check eval license') {
 environment {
  ise_username = credentials('ise_username')
  ise_password = credentials('ise_password')
 }
 steps {
  ansiblePlaybook(
   playbook: 'ise-check-license.yaml',
   inventory: 'inventory-localhost',
   extraVars: [
    vm_name: params.vm_name,
    ise_username: env.ise_username,
    ise_password: env.ise_password,
    ignore_license_period: params.ignore_license_period
   ]
  )
 }
}

E-BOOK

Zaczynasz swój pierwszy projekt związany z automatyzacją?

Ten e-book jest dla Ciebie! Zawiera sprawdzone podejście, które realizowałem w wielu projektach. Sprawdź co możesz zrobić, by odnieść sukces!


Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)