Przygotowywanie subskrypcji Azure pod warsztaty
Jednym z największych problemów (jak kto woli wyzwań) przy prowadzeniu szkoleń i warsztatów z Azure jest przygotowanie środowiska pod laboratoria. Jeśli nie prowadzisz szkolenia, które można zrobić poprzez Microsoft Learn (samo w sobie jest fajne do podstaw) czy Hands-on Labs to trzeba się przygotować. Z mojej praktyki wychodzą dwa rozwiązania, które pojawiają się najczęściej: Azure Pass lub współdzielona subskrypcja.
Zaczynając od początku najważniejsze jest przygotowanie osobnego Azure AD. Nie ma jak to dedykowane konta, które można skasować (bądź nie) po szkoleniu, a na jego początku mieć pewność, że użytkownik może się zalogować. Podsumowując krok pierwszy – zakładamy nowe czyste Azure AD.
Kolejnym krokiem są konta dla użytkowników. Nawet jeśli korzystasz z Azure Pass to konto, które przynosi uczestnik czy to Microsoft Account czy służbowe to jego użycie to proszenie się o problemy. To ktoś już kiedyś aktywował pass i już drugi raz nie może, kto inny ma problem i nie może założyć nowego Microsoft Account bo limit na IP z którego się łączycie wysycił się. Korzystając z nowo założonego Azure AD po prostu tworzymy konta dla użytkowników.
Osobiście korzystam z Azure CLI do tego. Logujemy się do nowego AAD w CLI i używamy skryptu jak poniżej.
#!/bin/bash
login_prefix=user
domain=demo.onmicrosoft.com
password='Changeme1#'
start=100
count=2
end=$(($count + $start -1))
for i in $(eval echo "{$start..$end}")
do
user=$login_prefix$i@$domain
echo $user
az ad user create --display-name $user \
--password $password \
--user-principal-name $user \
--force-change-password-next-login=true
done
Następnie przydaje się stworzyć Service Principal. W dużej ilości przypadków nie ma sensu tracić czasu przechodzenia scenariusza tworzenia samego sp. Wystarczy tylko dać go użytkownikowi w gotowej postaci. Jak w przypadku zakładania użytkowników sam korzystam z prostego skryptu w bash.
#!/bin/bash
login_prefix=user
password='TrudneHaslo1'
start=100
count=2
end=$(($count + $start -1))
for i in $(eval echo "{$start..$end}")
do
user=sp-$login_prefix$i
echo $user
az ad sp create-for-rbac --name $user --password $password --skip-assignment
done
Jeżeli używasz Azure Pass to wystarczy rozdać użytkownikom loginy, hasła i service principal. Może być wydrukowane, pdf czy mailem. Każda forma jest dobra. Ważne, żeby używali konta w przeglądarce w trybie prywatnym. Należy przypomnieć kilkukrotnie. Potem zdarzają się przypadki – „ooo nie wiem, gdzie aktywowałem” ;-)
Jeżeli jednak planujesz użyć subskrypcji współdzielonej to po pierwsze musisz przepiąć subskrypcję do dedykowanego AAD, w którym założyłeś już konta, a po drugie wypada nadać uprawnienia w subskrypcji. Zasadniczo są dwie możliwości: Nadanie uprawnień na poziomie subskrypcji lub stworzenie grupy zasób per uczestnik i na nich nadanie uprawnieni.
Opcja pierwsza jest bardzo prosta. Znowu Azure CLI ;-) W skrypcie poniżej uprawnienia nadawane są od razu dla użytkownika oraz sp.
#!/bin/bash
login_prefix=user
domain=demo.onmicrosoft.com
start=100
count=2
role=Owner
end=$(($count + $start -1))
for i in $(eval echo "{$start..$end}")
do
sp=sp-$login_prefix$i
user=$login_prefix$i@$domain
# sp
echo $sp
az role assignment create --assignee http://$sp --role $role
# user
echo $user
az role assignment create --assignee $user --role $role
done
Druga opcja wymaga w pierwszym kroku wykreowania grup zasobów, a dopiero potem nadania uprawnień. Skrypt poniżej.
#!/bin/bash
login_prefix=user
domain=demo.onmicrosoft.com
start=100
count=2
role=Owner
location=westeurope
end=$(($count + $start -1))
for i in $(eval echo "{$start..$end}")
do
rg=rg-$login_prefix$i
# rg
echo $rg
az group create -l $location -n $rg
sp=sp-$login_prefix$i
user=$login_prefix$i@$domain
# sp
echo $sp
az role assignment create --assignee http://$sp --role $role --resource-group $rg
# user
echo $user
az role assignment create --assignee $user --role $role --resource-group $rg
done
Jak w przypadku Azure Pass rozdajemy loginy, hasła i cieszymy się działającym środowiskiem.
PS. Jeśli chcesz posprzątać wszystko to ten bash pomoże na grupy zasobów ;-)
#!/bin/bash
az group list --query "[].{Name: name}" -o tsv | grep -v cloud-shell-storage |
while read -r name ; do
echo $name
az group delete --name $name --no-wait --yes
done
Ten za to na konta użytkowników i sp:
#!/bin/bash
login_prefix=user
domain=demo.onmicrosoft.com
start=100
count=2
role=Owner
end=$(($count + $start -1))
for i in $(eval echo "{$start..$end}")
do
sp=sp-$login_prefix$i
user=$login_prefix$i@$domain
# sp
echo $sp
az ad sp delete --id http://$sp
# user
echo $user
az ad user delete --upn-or-object-id $user
done