Pierwsza styczność z API na Fortigate

Trafił do mnie na jakiś czas firewall Fortigate 60E, więc postanowiłem skorzystać z okazji i zobaczyć co oferuje platforma od strony programowalnego zarządzania. Z urządzeniami Fortigate mam styczność co jakiś czas, wielu mniejszych klientów z nich korzysta. Nie miałem okazji jednak wykorzystywać ich interfejsu API czy programowalnych funkcjonalności. Opisane funkcje testowałem na najnowszym firmware 7.0.0.

Uwierzytelnianie wywołań API na Fortigate

Interfejs API na firewallu jest domyślnie aktywny na każdym interfejsie, na którym skonfigurowane jest zarządzanie po HTTP/HTTPS. Pierwsza rzecz jaka rzuciła mi się w oczy, i raczej nie przypadła do gustu, to uwierzytelnianie użytkowników. Aby wykonywać polecenia API co do zasady musimy stworzyć konto administracyjne do API z odpowiednimi uprawnieniami. W tym celu przechodzimy do System -> Administrators -> Create New -> REST API Admin. Następnie ustalamy nazwę użytkownika, potem wybieramy lub tworzymy grupę definiującą uprawnienia, i opcjonalnie włączamy uwierzytelnianie za pomocą certyfikatów. Poprawne utworzenie konta zakończone jest wyświetleniem wygenerowanego tokenu. Jest to jedyny moment, w którym możemy go pobrać i zapisać. Nie ma możliwości późniejszego jego podejrzenia. Jeżeli go zgubimy to musimy wygenerować nowy.

API na Fortinet

To podejście jest dość standardowe i zgodne z dobrą praktyką. Jednak okazuje się, że każde konto administratora ma także dostęp do API, jeżeli jego sesja jest uwierzytelniona w przeglądarce. Możecie sprawdzić to samodzielnie. W oknie przeglądarki spróbujcie połączyć się z URL https://fortigate.virl.lan/api/v2/cmdb/firewall/address. Nie uda się i jako odpowiedź wyświetli się informacja o nieuwierzytelnionej próbie wywołania tej metody. W tym samym oknie otwórzcie teraz nową zakładkę i zalogujcie się do panelu administracyjnego. Gdy odświeżycie zakładkę z wywołaniem API zobaczycie, że metoda została poprawnie wykonana. Moim zdaniem dostęp do API powinien być całkowicie oddzielony od uprawnień do GUI.

Podgląd wywołań API na Fortigate

Nie ukrywam, że ta funkcjonalność zdobyła moje serce. Wiele razy, gdy tworzyłem zapytania API, problematyczne było stworzenie odpowiedniej struktury JSON aby metodą POST zmienić konfigurację urządzenia. Oczywiście jest dokumentacja, często są przykłady, ale nasze pomyłki w typie danych czy literówki w podawanych wartościach mogą przyprawić o ból głowy. Tymczasem na firewallach Fortigate możemy wygenerować strukturę, którą w wywołaniu API musimy wysłać do wskazanej metody. Link do samej metody też podejrzymy. Jak to działa? Załóżmy, że w konfiguracji firewalla chcemy zmienić domyślne rekordy wskazujace na serwery DNS na własne. W tym celu w GUI przechodzimy do Network->DNS,  wybieramy opcję Specify i wpisujemy adresy własnych serwerów. 

Panel zmiany rekordów serwera DNS

Nie zapisujemy zmian. Po prawej stronie znajdziemy przycisk API Preview, którego kliknięcie spowoduje wygenerowanie wartości JSON-a, który musimy wysłać w wywołaniu API oraz metodę, którą musimy wywołać, aby wprowadzić programowalnie zmiany, które właśnie odklikaliśmy w GUI.

Podgląd zmian w API

Świetna funkcja, szkoda, że nie do wszystkich operacji takie podpowiedzi są. Nie pogardziłbym podobnym rozwiązaniem na platformach innych wiodących dostawców sprzętu sieciowego!

Dokumentacja

Czy dokumentacja do API na Fortigate jest tajna? Tak. I jest to najdziwniejsza, i najbardziej nieracjonalna rzecz jaką ostatnio widziałem w IT. Utajnienie dokumentacji do komponentu, który ma służyć do programowalnego zarządzania, czyli de facto to integracji produktu z innymi produktami czy własnymi rozwiązaniami. Tymczasem by zobaczyć aktualną dokumentację trzeba być „sponsorowanym” przez dwóch pracowników Fortineta. Nie pracuję zbyt dużo z urządzeniami tej firmy i nie miałem świadomości, że ukrywanie wielu rzeczy to świadoma polityka tego producenta. Wyjaśnili mi to koledzy, którzy częściej pracują z tymi produktami. Niemniej ukrywanie dokumentacji do API to moim zdaniem czysta kpina z użytkownika końcowego.

W gwoli ścisłości dodam, że ostatnia publiczna dokumentacja do API odnosi się do wydania 6.0.5, wszystkie kolejne są utajnione. Zatem gdy sięgniecie pod bibliotekę Pythona do API Fortigate nie mając konta w Fortinet Developer Network nie sprawdzicie nawet czy metody zostały poprawnie zaimplementowane, o tworzeniu własnych skryptów wywołujących metody bezpośrednio nie wspominając. Ta jedna rzecz sprawia, że jeżeli będę miał projekt, w którym duży nacisk będzie kładziony na DevNet/DevOps to nie zarekomenduję do niego urządzeń Fortineta.

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.

2 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
SpeX
03/08/2021 21:52

To jakie urządzenia wybierzesz?

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)