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

    Dodaj komentarz

    Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *