Azure Hacking – logowanie CLI za pomocą service principala

    No Comments

    Od kiedy zainteresowałem się chmurą Microsoft Azure początkowe kroki skierowałem do Portalu.

    Postawiłem kilka maszyn wirtualnych, strony www, proste funkcje. Następnie spróbowałem  przygotować to samo bez jednego kliknięcia myszą. Do wyboru miałem Powershell i moduł az CLI 2.0 napisany w Pythonie. Wybrałem az.

    Pierwsza linia kodu skryptu powołującego chmurową infrastrukturę wyglądała tak.

    Pojawia się wtedy komunikat

    To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code CCJULN8F8 to authenticate.

    Za pomocą podanej strony i kodu autoryzacyjnego muszę wskazać użytkownika , a potem wpisać hasło.

    Co zrobić, jeśli chciałbym uniknąć podawania za każdym razem hasła administratora subskrypcji i stworzyć techniczny byt, który pozwoli na wielokrotne uruchamianie np. skryptu wdrożeniowego, oczywiście bez interakcji z wyskakującymi oknami.

    Poniżej przedstawiam prosty sposób na skorzystanie z service principala

     

    Składnia

    Jak widać potrzebne nam będą trzy identyfikatory.

    Zacznijmy od TENAND_ID.

    Wybieramy menu  Azure Active Directory i zakładkę Properties

    azure_sp_1

    To, co widzimy w miejscu Directory ID to nasz TENAND_ID. Kopiujemy i zapisujemy sobie na boku.

    Pozostałe dwa identyfikatory wymagają stworzenia aplikacji.

    Zmieniamy zakładkę Properties na App registrations.

    Tworzymy nową aplikację typu Web app/API. Swoją nazwałem deployer. Adres url nie ma znaczenia w naszym zastosowaniu, wpisujemy dowolną wartość.

    azure_sp_2

     

    Po utworzeniu aplikacji mamy dostęp do identyfikatora APP_ID

    azure_sp_3

    Kopiujemy Application ID i zachowujemy  w tym samym miejscu co TENANT_ID.

    Czas na ostatni identyfikator, czyli KEY. Wchodzimy na zakładkę Keys.

    Tworzymy nowy klucz o nazwie np. KeyOne i terminie wygaśnięcia za jeden rok, pole Value zostanie wypełnione po zapisaniu klucza

    azure_sp_4

    W tym momencie powinniśmy skopiować wartość klucza. Jest to operacja jednorazowa. Portal o tym uczciwie przypomina. Klucz oczywiście można skasować i wygenerować kolejny.

    azure_sp_5

    Mamy już trzy identyfikatory. Co dalej ?

    Spróbujmy połączyć się do subskrypcji z poziomu linii komend.

    Po zalogowaniu się pojawi się zwrotny komunikat w postaci JSON

     

    Podanie błędnych danych kończy się małą katastrofą z kodem 401.

    Spróbujmy stworzyć nową grupę zasobów

    Pojawił się komunikat.

    Brakuje uprawnień dla naszej aplikacji i słusznie.

    Nadajmy uprawnienia dla aplikacji na poziomie subskrypcji.

    Dodajemy z poziomu zakładki Access control [IAM] uprawnienia Contributor dla całej subskrypcji.

    azure_sp_6

    Uruchamiamy ten sam kod i teraz mamy już komunikat zwrotny

    Wchodzimy na zakładkę Activity Log naszej nowej grupy zasobów i widać, kto i kiedy utworzył zasób.

    azure_sp_7

     

    Usuwamy grupę zasobów

    To samo można zrobić z poziomu CLI bez korzystania z Portalu, ale o tym innym razem…..

     

    Literatura:

    https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal

    https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli?toc=%2Fazure%2Fazure-resource-manager%2Ftoc.json&view=azure-cli-latest

     

     

    Categories: Azure, chmura, migawka, Python

    Zabawa z IoT na platformie Azure

    1 Comment

    1. Zakup urządzenia
    Wg producenta jest to
    Moduł WiFi oparty na układzie ESP8266. Na pokładzie znajduje się 9 portów GPIO z obsługą I2C i SPI, wejście analogowe oraz złącze baterii lipol 3,7 V. Posiada oprogramowanie NodeMCU, które wspiera język skryptowy Lua lub środowisko Arduino IDE. Dodatkowym atutem jest wbudowany konwerter napięć na liniach interfejsu UART.
    Czyli skrócie dostajemy gotowe urządzenie, które potrafi się komunikować po WIFI i ma możliwość podłączania dodatkowych czujników m.in. temperatury i wilgotności.

    esp8266_1

    2. Konfiguracja IoTHub na platformie Azure

    Wybieramy menu “wszystkie zasoby”

    azure_iot_1

    Z kategorii Internet of Things wybieramy IoT Hub i wypełniamy podstawowe parametry, unikalną nazwę, grupę zasobów i lokalizację. Na początek proponuję zacząć od planu darmowego F1, ale jeśli planujemy coś bardziej poważnego, to w chwili obecnej nie ma możliwości podniesienia planu usługi. Można tylko postawić kolejna usługę. Wstaje ona po kilku minutach.

     

    azure_iot_2

     

    Po wygenerowaniu kluczy z polisy iothubowner możemy przejść do rejestracji naszych urządzeń

    Device ID: Nazwa urządzenia. Unikalna w ramach IoT huba, wielkie i male litery maja znaczenie

    Authentication Type: Pozostawiamy Symmetric Key.

    Auto Generate Keys: Pozostawiamy zaznaczone (zostaną automatycznie wygenerowanie klucze).

    Connect device to IoT Hub: Pozostawiamy Enable.

    azure_iot_3

     

    Każde z urządzeń będzie mieć wygenerowane dwa klucze.

    azure_iot_4

    Konfiguracja połączeń w tym przypadku wygląda tak

     

    I tę konfigurację będziemy wykorzystywać podczas pracy z urządzeniem. W ten sposób Hub wie, z jakiego urządzenia nadchodzą dane z czujników.

    Jeżeli nasz hub nazwałem djkormohub to warto sprawdzić połączenie sieciowe na porcie 8883

    3. Instalacja oprogramowania Arduino
    Adres instalatora
    https://www.arduino.cc/en/Main/Software
    W momencie pisania artykułu jest to wersja 1.8.5.

    arduino_1

    arduino_2

    Pojawi się grupa  pytań wymagających potwierdzenia instalacji sterowników “Arduino”arduino_5 arduino_6

    Instalacja została zakończona.

    4. Konfiguracja Visual Studio Code

    Potrzebny będzie dedykowany plugin do Arduino. Plugin ten nie zadziała bez instalacji  oprogramowania z punktu 3).

    Adres pluginu
    https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.vscode-arduino

    vsc_1

     

    Po instalacji pluginu proponuje restart VSC. U mnie bez tego nie były możliwe dalsze kroki.

    Zaczynamy od konfiguracji dla ESP8266.

    Podlączyłem urządzenie po USB, pojawił się komunikat

    vsc_3

    -> Arduino: Boar Manager.

    vsc_2Naciskamy aditional Urls. Wstawiamy w pliku User Settings .json adres

    vsc_4

    Wybieramy w polu “filter your search” esp8266.

    Wybrałem ostatnią wersje stabilną, czyli 2.4.0 i przycisk install. Po krótkiej chwili skończyło się to tak:

    Ups…
    Bez chwili namysłu wybrałem starszą wersję 2.3.0. Udało się

    A poźniej zrobiłem upgrade. W ten sposób mam działającą wersje 2.4.0.

    Uruchamiamy Arduino:Board Config

    vsc_5

    To czego nam brakuje to bibioteki do obsługi naszego IoTHuba w Azure i nie tylko

    Uruchamiamy Arduino: Librany Manager i instalujemy bibioteki

    AzureIoTHub
    AzureIoTUtility
    AzureIoTProtocol_MQTT
    ArduinoJso
    DHT sensor library
    Adafruit Unified Sensor

    vsc_6

    Oprogramowanie do pracy z płytką zostało zinstalowane. Czas na prosty przykład. Pobieram z githuba, gotowy projekt przygotowany przez Microsoft.

    Ponieważ, nie mam jeszcze czujnika DTH22 (temparatura i wilgotność) wykorzystam możliwość symulacji jego zachowania.
    W pliku config.h należy zmienić linię kodu odpowiedzialną za nią

    Otwieramy w VSC plik app.ino.

    Spróbujmy zapisać oprogramowanie na urządzeniu
    Uruchamiamy Arduino:Upload i po wybraniuy portu komunikacyjnego pojawi się po chwili następujący komunikat.

    Kolejne ups ?

    Po krótkim wykorzystaniu wujka Google trafiłem na rozwiązanie. Należy zainstalować brakujące oprogramowanie w podkatalogu hardware Arduino.

     

    Log z instalacji

    Restartujemy Arduino.

    Instalujemy obraz z poziomu Arduino (VSC nadal poprawnie nie działa).

    arduino_7

    Zwróćcie uwagę na migająca niebieską diodę podczas zapisywania oprogramowania.

    Oprogramowanie wgrane, teraz należy podłączyć urządzenie do naszej sieci WIFI.

    Po podaniu nazwy sieci WIFI (SSID) , hasła (PASS) i konfiguracji połączenia naszego urządzenia do IotHuba w postaci

    Urządzenie uruchamia się:

    Widać, że urządzenie podłączyło się do sieci bezprzewodowej i próbuje wystać komunikat w postaci

    Urządzenie ESP_*  jest widoczne od strony rutera WIFI, otrzymało przez DHCP swój adres IP.

    asus_1

    Włączyłem opcje debugowania i mam taki wyciąg z logów

     

    Problematyczne okazało się żle skonfigurowany DNS i urządzenie nie potrafiło ustalić adresu IP huba. IP 10.0.0.1 to lokalny adres rutera mojego dostawcy internetu.

    Po naprawie konfiguracji w logach monitora zaczęły pojawiac sie komunikaty

    Zweryfikowałem metryki diagnostyczne usługi w Azure. Pojawiły się pierwsze komunikaty.

    azure_iot_5

    W darmowym planie F1 mamy do wykorzystania 8000 komunikatów na dobę, jeśli dobrze oszacowałem oznacza to jeden komunikat co 11 sekund. Do prostych pomiarów jest to wystarczające.

     

    Categories: Arduino, Azure, IoT