Sytuacja kobiet w IT w 2024 roku
22.10.20214 min
Szymon Rożek

Szymon Rożek.NET Developer

Sprawdź jak ustawić dostęp do zasobów w AAD

Azure Active Directory bez tajemnic, czyli dowiedź się jak zarządzać dostępami do zasobów. Poznaj AAD.

Sprawdź jak ustawić dostęp do zasobów w AAD

AAD, czyli Azure Active Directory jest to usługa w chmurze Microsoftu pomagająca zarządzać dostępami do zasobów. Dzięki jej zastosowaniu możemy definiować grupy z konkretnymi uprawnieniami, czy też zapraszać nowe osoby do naszych directories, nadając im wgląd tylko do ograniczonych resources. Oczywiście możliwości tej usługi są znacznie szersze, natomiast w tym artykule skupimy się na przydzielaniu dostępu do przykładowych zasobów dla grupy. Aby wejść w panel zarządzania AAD, w Azure portalu trzeba rozwinąć hamburgera znajdującego się po lewej stronie:

Panel AAD

Po wejściu pojawia nam się panel zarządzania, taki jak na załączonym poniżej obrazku:

Z jego poziomu możemy przejrzeć grupy istniejące w AAD, użytkowników, ich role, oraz wiele innych rzeczy, na których nie będziemy się skupiać.

Nadawanie ról

Istnieje możliwość przypisania ról do zasobów z poziomu portalu, natomiast nie jest to rozwiązanie optymalne, ponieważ wymaga czasu oraz nie zapewnia nam powtarzalności, o wiele lepszym sposobem jest napisanie skryptu. Dzięki automatyzacji będziemy mogli nadać zdefiniowane przez nas uprawnienia dla różnych osób, odpalając jeden skrypt. Bardzo dobrym zwyczajem jest tworzenie grup posiadające konkretne uprawnienia oraz dodawanie do nich odpowiednich obiektów, a nie bezpośrednie nadawanie uprawnień obiektom. Poprzez obiekty możemy rozumieć zarówno użytkowników jak i aplikacje.

Przykład użycia

Załóżmy, że mamy stworzony Storage Account „bulldog” wraz z kontenerem „external”. 

Istnieją dwie możliwości, możemy skorzystać z wbudowanych ról , albo stworzyć swoje własne, w dzisiejszym rozwiązaniu skupimy się na tych drugich. Jedyną rolę, którą chcemy przypisać do naszej nowej grupy będzie możliwość odczytywania blobów z wymienionego wyżej kontenera. W tym celu w pierwszej kolejności stworzymy grupę, używając do tego Powershella:

$group = New-AzureADGroup -DisplayName "external-SA-Container-Reader-Group" `
-Description "This group allows to read blobs from specific container" `
-SecurityEnabled $true `
-MailEnabled $false  `
-MailNickName "Unused"


Następnym krokiem będzie stworzenie odpowiedniej roli, która zostanie zdefiniowana według templatki. W naszym wypadku niech będzie to pozwolenie na odczytywanie blobów, które znajdują się tylko w konkretnym kontenerze. Jeśli potrzebujemy zdefiniować również inne pozwolenia wystarczy zajrzeć do dokumnetacji i znaleźć to czego potrzebumey. Poniżej znajduje się plik json (SAContainerReaderRole.json) oraz polecenie, które posłużą nam do wygenerowania roli dla konkretnej subskrybcji.

{
    "Name":  "Storage Container Reader",
    "Description":  "Allows to read data from SA container",
    "IsCustom":  true,
    "AssignableScopes":  [
        "/subscriptions/<subscription>"
    ],
    "Actions":  [],
    "NotActions":  [],
    "DataActions":  [
        "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
    ],
    "NotDataActions":  []
}
$role = New-AzRoleDefinition
-InputFile "SAContainerReaderRole.json"


W momencie gdy mamy już zarówno stworzoną rolę jak i grupę zostało je połączyć.

Oprócz tych dwóch rzeczy będziemy potrzebować również Scope – czyli informację o naszym resource, do którego grupa powinna mieć dostęp. Czyli wcześniej wspomnianym kontenerze „external”

$scope = "/subscriptions/<subscription>/resourceGroups/<resource-name>/providers/Microsoft.Storage/storageAccounts/bulldog/blobServices/default/containers/external"
 
New-AzRoleAssignment `
-ObjectId $group.ObjectId `
-RoleDefinitionId $role.Id ` 
-Scope $scope


Na tym poleceniu zakończył się skrypt przypisujący Rolę dla grupy do konkretnego zasobu. Dzięki zaimplementowaniu tego rozwiązania teraz nie musimy się martwić o to, że będziemy za każdym razem potrzebowali to „wyklikać” z poziomu Azure portalu. Pozostało nam dodać do grupy osoby czy aplikacje, które chcemy, aby miały dostęp do tego zasobu oraz używać naszego skryptu i wygodnie zarządzać dostępami.

Finalny Skrypt

Oczywiście w powyższych krokach kolejne polecenia zostały wklejane wyrywkowo, aby bezpośrednio zrozumieć ich działanie. Natomiast w celu ponownego użycia tego skryptu, powinniśmy zastąpić nazwy zasobów zmiennymi oraz sprawdzić, czy konkretne grupy, role, przypisania już istnieją. Jeśli chodzi o  to drugie — to pozwoliłem sobie lekko ulepszyć ten skrypt, natomiast resztę zostawiam w formie pracy domowej. AAD jest potężnym narzędziem, które dla programisty korzystającego z Azure nie powinno być obce. 

skrypt:

$name = "external-SA-Container-Reader-Group"
$roleFile = "SAContainerReaderRole.json"
 
$group = Get-AzureADGroup -Filter "displayName eq '$name'"
 
if (-not $group)
{
    $group = New-AzureADGroup -DisplayName $name `
    -Description "This group allows to read blobs from specific container" `
    -SecurityEnabled $true `
    -MailEnabled $false `
    -MailNickName "Unused"
}
 
$roleObject = Get-Content $roleFile | Out-String | ConvertFrom-Json
 
$role = Get-AzRoleDefinition -Name $roleObject.Name
 
if (-not $role)
{
    $role = New-AzRoleDefinition -InputFile $roleFile
}
 
$scope = "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/bulldog/blobServices/default/containers/external"
 
Write-Host $group.ObjectId 
Write-Host $role.Id
 
$assignment = Get-AzRoleAssignment -ObjectId $group.ObjectId -RoleDefinitionId $role.Id -Scope $scope
 
if (-not $assignment)
{
    New-AzRoleAssignment -ObjectId $group.ObjectId -RoleDefinitionId $role.Id -Scope $scope
}
else
{
    Write-Host "Assignment already exist"
<p>Loading...</p>