Control Plane vs Data Plane – rozwiązanie

była zagadka, czas na rozwiązanie (:

ten przykład jest bardzo dobry na pokazanie jak bardzo interfejs zaburza intuicję jak coś działa. podobną dekonstrukcję nieprawidłowej intuicji mam zamiar przedstawić w prezentacji w piątek na HS22 .. ale do rozwiązania.

owner faktycznie nie ma uprawnień wynikających z IAM. zadanie było de facto na spostrzegawczość, a jeśli ktoś korzysta z commandline, to powinien szybko skojarzyć:

realnie interface po prostu korzysta z klucza – dokładnie tak, jak z commandline. jeśli przestawimy na 'AAD User Account’ wtedy od razu widać, że owner nie ma uprawnień:

nie należę do spostrzegawczych i podejrzewałem jakiś trick na backendzie… szczęśliwie w rozwiązaniu pomógł mi GH – dzięki, harpaganie! (;

eN.

zagadka – Control Plane vs Data Plane

zagadka. zamiast zwykłego podzielenia się, zapraszam do zabawy – spróbuj ją rozwiązać samodzielnie. odpowiedź wrzucę za niedługo… albo może jakiś harpagan wrzuci ją szybciej? (:

w ARM jest rozdział między Control Plane i Data Plane. widać to np. w IAM/RBAC kiedy wyświetlimy uprawnienia dla danej roli. jest tam wyraźny podział między zarządzaniem i danymi.

ale kiedy spojrzy się na uprawnienia Owner’a, to robi się dziwnie:

  • z jednej strony wszystko jest 'zgodnie ze szkołą’, czyli Owner nie ma żadnych uprawnień na Data Plane. dostęp do danych z założenia ma być oddzielony od administracji/własności infrastruktury
  • z drugiej strony, jak pracujemy z Azure i mamy Ownera to sobie śmigamy po danych bez żadnych problemów…

błąd? zamierzone? da się znaleźć i wytłumaczyć czy może to zahardcodowany hidden-feature Ownera?

eN.

143 WGUiSW

już jutro, wtorek, o4.1o.22 – kolejny WGUiSW (143) w siedzibie Microsoft. przypominam, że konieczne jest zapisanie się via meetup, ponieważ musi być lista na wejściu. jeśli nie masz imienia i nazwiska na koncie Meetup, trzeba wysłać maila do organizatorów, aby uniknąć problemu.

na jutrzejszym spotkaniu gość specjalny – Piotr Konieczny z Niebezpiecznika – i to z sesją (chyba?) nietechniczną! będzie można się dowiedzieć trochę zaqlisowych informacji na temat założyciela tego znanego portalu.

przy okazji będę miał sesję również ja, z tematem zbliżonym do prezentacji na hack summit, czyli 'sieć w Azure’. niemniej:

  • ta sesja będzie po polsq
  • na WGUiSW mam 1h a nie pól

będzie więc możliwość podysqtować, powinno się udać więcej pokazać a loża szyderców mam nadzieję dopisze.

znamienne, że w ramach WGUiSW wszystkie sesje będą dotyczyć Azure… będzie Robert z sesją o bezpieczeństwie AAD oraz Mariusz, chyba z jakąś sesją dotyczącą środowiska hybrydowego… co prawda to już dawno jest WGUiSM ale tak ażurowo to chyba nie było.

zapowiada się ciekawie (:

eN.

 

start-process powershell.exe

niby proste, a wpisów na forach dużo.. a jednak zajęło mi sporo czasu. wiele rzeczy uważane za proste zajmuje mi czas, żeby dogłębnie zrozumieć i dopiero mogę je wykorzystać – it’s not a bug, it’s a feature (;

nie pamiętam już nawet wszystkich zapisów, których próbowałem, żeby to odpalić… więc tylko szorcik, z samym rozwiązaniem:

Start-Process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ArgumentList @("-noExit","-file c:\scripts\somescript.ps1")
kilka uwag:
  • w dużej ogólności widać, że ArgumentList jest tablicą argumentów (nie ciągiem znaków, nie hashtable)
  • pomimo że 'file’ oraz ścieżka są de facto dwoma elementami – jednak w tablicy argumentów podaje się je razem, jako jeden „argument-z-wartością”. to nie jest oczywiste, a wręcz trochę dziwne…
  • uruchomienie skryptu z przełącznikiem 'file’ i bez niego zachowuje się nieco inaczej
  • druga bardzo ważna uwaga, którą długo pomijałem (czytaj doqmentację DOKŁADNIE!), to że jeśli używa się 'file’ to musi to być ostatni parametr. można również uruchomić skrypt ’powershell.exe c:\scripts\somescript.ps1’ i wtedy musi to być pierwszy argument.

eN.

bolesne i śmieszne

albo ilość albo jakość. Microsoft niemal zawsze wybiera to pierwsze. a im większy jest Azure/o365 – tym gorzej ze stabilnością i jakością. błędów jak ten, który zaraz opiszę, jest masa, ale ten mnie po pierwsze rozśmieszył, po drugie to śmiech przez łzy – bo straciłem półtora tygodnia… może komuś oszczędzę tej przyjemności?

kontekst: konfiguracja polityk Conditional Access dla Windows 365 Cloud PC. jeśli chcemy utworzyć dostęp warunkowy, działający 'wewnątrz’ w365CPC, ale równocześnie pozwalająca na logowanie się do niej samej to polityka musi mieć zrobiony wyjątek na aplikacje w365CPC, bo sama jest częścią 'All Cloud Apps’.  artyqł opisujący jak to zrobić można łatwo wyszukać, a kluczowy okazał się wyjątek na aplikację 'Azure Virtual Desktop’…

#1 dodajemy wyjątek na aplikację windows 365 – tu bez problemu, wyszuqję apkę i działa:

pięknie wyszuqje. więc teraz #2 – dodaję 'Azure Virtual Desktop’…

…średnio widać, ale nie ma liście tego, czego szukam. próbuję bardziej restrykcyjne słowa kluczowe – 'virtual’ a potem 'desktop’…

…apki nie ma. naszukałem się, ticket założony… a jakość wsparcia idzie w parze z samym produktem. słychać, że braqje ludzi na rynq. poziom 'dialogu’ ze wsparciem jest gorszy niż z Cyfrowym Asystentem w wersji beta – te dużo więcej rozumiały już lata temu, i odzywają się językiem, który bardziej przypomina angielski. każda rozmowa to wielo-minutowe 'przepraszam, proszę powtórzyć’ – bo albo ktoś gurgla do słuchawki, albo dzwoni z jakiegoś bazaru w słuchawkach za 5PLN, to makabra jakaś jest. i przy każdej rozmowie trzeba powtarzać wszystko co było w mailach – więc zaczynam podejrzewać, że nie umieją czytać. ale to tak na boq…

do rozwiązania doszedłem w końcu sam, przypadkiem, ponieważ słowem kluczowym do wyszukania 'Azure Virtual Desktop’ jest… 'Windows’:

jak widać, jest więcej aplikacji, których nazwy nie zawierają tego ciągu znaqw, a mimo to pojawiają się podczas wyszukiwania. pech – pewnie 99% innych osób od razu wpisuje 'windows’ i od razu widzi obie apki na ekranie… a mi się zachciało całość wpisać, razem z '365′ /:

bałagan jaki jest w tych nowych produktach jest kosmiczny. nie ma dnia, żebym nie znalazł jakiegoś glitcha – czy to w GUI czy w samych commandletach PS. zaczynamy coraz więcej płacić za tempo rozwoju i intuicja mi podpowiada, że to dopiero początek – już niedługo złożoność i wielkość systemów zje ich twórców, bo to nie jest tak, że Microsoft jakoś odstaje od innych firm. mam wrażenie że Internet jest bardzo à la mode – bo 9o-te są na fali. jak mi się czasem przypadkiem zdarzy uruchomić przeglądarkę bez ad-blockera, to nie wiem co się na ekranie dzieje. osoby z padaczką mogą dostać ataq. na początq lat 2k, jak wychodziło web2.o, były już świetne strony, które były lekkie i dynamiczne – ładowały się tylko w elementach, które się zmieniały i zawierały to, co było potrzebne. i co się z tym stało? większość Internetu to niechlujnie napisane aplikacje, przeładowane niepotrzebnymi dystraktorami, nawalone reklam albo innych elementów, a każde kliknięcie to przeładowanie… a miało być tak pięknie…

eN.

142 WGUiSW w MS!

już jutro (wtorek, o6.o9) wracamy na spotkania społeczności WGUiSW – to już 142 spotkanie. tematy bardzo rozległe ale głównie dotyczące bezpieczeństwa – będzie i o Defenderze i o podpisie prywatnym i o Elastic Search.

no i ważny news – wracamy do Microsoft. ponieważ minęły chyba ze 3 lata to na wszelki wypadek zamieszczę adres (;

Audytorium MICROSOFT POLSKA
al. Jerozolimskie 195A, Warszawa
https://goo.gl/maps/5CHWT8Bec7iwqJ62A

CU!

eN.

PowerShell dla początkujących

jakiś czas temu przygotowałem wraz z Microsoft szkolenie na MVA – Microsoft Virtual Academy. MVA został zlikwidowany i long-story-short – szkolenia przepadły. moje wypłakiwanie się przyniosło sqtek i jeden z czytelników odezwał się, iż ma backup. dziękuję ci Piotrze w imieniu swoim oraz przyszłych oglądających (:

udało mi się również skontaktować z Microsoft i otrzymać pozwolenie na publikację! dziękuję!

tu znajdziesz PowerShell dla początkujących

nie jestem wprawnym youtuberem, ale mam nadzieję, że opublikowałem prawidłowo. na razie pierwsza część, jak wszystko będzie ok – są jeszcze dwie (:

eN.

konsola PS7 nie przyjmuje wpisywania

na wczorajszym WGUiSW miałem przyjemność poopowiadać trochę o różnicach pomiędzy PS 5 a 7. krótki 'Snack’ więc nie chciałem targać całego lapka, przygotowałem wszystko na AVD i połączyłem się przez przeglądarkę.

… i tu zaskoczenie. z jakiegoś niewyjaśnionego powodu konsola PS7 nie akceptuje klawiszy przy takim połączeniu. konsola PS5 działa normalnie. co ciekawe – nawet uruchomienie pwsh wewnątrz konsoli PS5 nie pomoga. szczęśliwie dostałem szybkie wsparcie z sali (to chyba Zbyszek? dzięki!) i pomogła sztuczka, którą wykorzystuje się przy podobnym problemie przy konsoli Hyper-V:

uruchomić pwsh z parameterm 'noninteractive'

parametr ten wyłącza wszelkie funkcje interaktywne typu 'read-host’. co zmienia w takim scenariuszu? – drugi w-files. nie potrafię wyjaśnić mechanizmu, ani który blokuje, ani czemu non-interactive pomogło. ale warto pamiętać.

eN.

jak znaleźć zasób po IP?

w jaki sposób ludzie zgłaszają problemy, chyba nie trzeba nikomu mówić. wydawałoby się, że zgłoszenia typu 'komputer mi niedziała’ powinny być domeną enduserowego ciemnogrodu… ale niestety rzeczywistość pokazuje, że w tej krainie mieszka również rzesza IT. klasycznym przykładem dnia codziennego są zgłoszenia, w których dostaję tylko adres IP. ba! zdarza się, że dev przysyła tylko publiczny URI aplikacji i trzeba szukać… /:

życie. trzeba sobie radzić. a ponieważ mam nowe hobby, nowy język – KQL, postanowiłem coś wydziargać, co pomoże mi szybciej lokalizować zasoby, na podstawie IP.

najpierw przeszukanie sieci:

Search-AzGraph -Query "resources 
    | where type =~ 'microsoft.network/virtualNetworks' and properties.addressSpace.addressPrefixes contains '$netIP'
    | join kind=inner (resourceContainers 
    | where type =~ 'microsoft.resources/subscriptions' 
    | project subscriptionId,subscriptionName=name) on subscriptionId
    | project subscriptionName,resourceGroup,name,addressSpace = properties.addressSpace.addressPrefixes
" | Format-List

i wyszukiwanie NICs – czyli VMek, Private Endpoints i co tam jeszcze ma sieciówkę:

Search-AzGraph -Query "resources
    | where type =~ 'Microsoft.Network/networkInterfaces' and properties.ipConfigurations[0].properties.privateIPAddress contains '$IP'
    | extend sName = tostring(properties.ipConfigurations[0].properties.subnet.id)
    | extend type = iff(isnull(properties.virtualMachine),properties.ipConfigurations[0].name,'virtualMachine')
    | join kind=inner (resourceContainers
        | where type =~ 'microsoft.resources/subscriptions'
        | project subscriptionId,subscriptionName=name) on subscriptionId
    | project subscriptionName, resourceGroup,vNet = extract('virtualNetworks/(.+?)/',1,sName),subnetName = extract('subnets/(.+?)$',1,sName),name,privateIp = properties.ipConfigurations[0].properties.privateIPAddress,type
" | Format-List

jasna sprawa całość trzeba powiązać jakąś logiką i manipulacjami na IP – i tu już magia PS się przydaje (: całość do pobrania na GH i na pewno będzie się rozwijać, bo często potrzebuję…

PS. życie jest złośliwe. SQLa nigdy nie lubiłem, a oczywiście KQL jest jego kuzynem – szczęśliwie dużo bardziej uporządkowanym. jak ogarnę wszystkie typy joinów będę mógł uznać, że jest nieźle. niewątpliwym strzałem w kolano jest case-sensitivity przy podawaniu nazw atrybutów (kolumn)… do tego PowerShell korzysta z PascalCase a ARM z camelCase co powoduje lekką schizmę podczas pisania /:

niemniej dwa elementy KQL/Graph powodują, że po prostu nie da się bez nich zrobić czegoś sensownego: bezkontextowość i czas wykonania.

eN.