Przypisywanie ról platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure

Kontrola dostępu oparta na rolach (RBAC) platformy Azure to system autoryzacji używany do zarządzania dostępem do zasobów platformy Azure. Aby udzielić dostępu, należy przypisać role do użytkowników, grup, jednostek usług lub tożsamości zarządzanych w określonym zakresie. W tym artykule opisano sposób przypisywania ról przy użyciu interfejsu wiersza polecenia platformy Azure.

Wymagania wstępne

Aby przypisać role, musisz mieć następujące elementy:

Kroki przypisywania roli platformy Azure

Aby przypisać rolę, składa się z trzech elementów: podmiot zabezpieczeń, definicja roli i zakres.

Krok 1. Określanie, kto potrzebuje dostępu

Rolę można przypisać do użytkownika, grupy, jednostki usługi lub tożsamości zarządzanej. Aby przypisać rolę, może być konieczne określenie unikatowego identyfikatora obiektu. Identyfikator ma format: 11111111-1111-1111-1111-111111111111. Identyfikator można uzyskać przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Użytkownik

W przypadku użytkownika Entra firmy Microsoft pobierz główną nazwę użytkownika, taką jak patlong@contoso.com lub identyfikator obiektu użytkownika. Aby uzyskać identyfikator obiektu, możesz użyć polecenia az ad user show.

az ad user show --id "{principalName}" --query "id" --output tsv

Grupa

W przypadku grupy Entra firmy Microsoft potrzebny jest identyfikator obiektu grupy. Aby uzyskać identyfikator obiektu, możesz użyć polecenia az ad group show lub az ad group list.

az ad group show --group "{groupName}" --query "id" --output tsv

Jednostka usługi

W przypadku jednostki usługi Entra firmy Microsoft (tożsamości używanej przez aplikację) potrzebny jest identyfikator obiektu jednostki usługi. Aby uzyskać identyfikator obiektu, możesz użyć polecenia az ad sp list. W przypadku jednostki usługi użyj identyfikatora obiektu, a nie identyfikatora aplikacji.

az ad sp list --all --query "[].{displayName:displayName, id:id}" --output tsv
az ad sp list --display-name "{displayName}"

Tożsamość zarządzana

W przypadku tożsamości zarządzanej przypisanej przez system lub przypisanej przez użytkownika potrzebny jest identyfikator obiektu. Aby uzyskać identyfikator obiektu, możesz użyć polecenia az ad sp list.

az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"

Aby po prostu wyświetlić listę tożsamości zarządzanych przypisanych przez użytkownika, możesz użyć polecenia az identity list.

az identity list

Krok 2. Wybieranie odpowiedniej roli

Uprawnienia są grupowane razem w role. Możesz wybrać z listy kilku wbudowanych ról platformy Azure lub użyć własnych ról niestandardowych. Najlepszym rozwiązaniem jest udzielanie dostępu z najniższymi wymaganymi uprawnieniami, dlatego należy unikać przypisywania szerszej roli.

Aby wyświetlić listę ról i uzyskać unikatowy identyfikator roli, możesz użyć polecenia az role definition list.

az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv

Poniżej przedstawiono sposób wyświetlania listy szczegółów określonej roli.

az role definition list --name "{roleName}"

Aby uzyskać więcej informacji, zobacz Wyświetlanie listy definicji ról platformy Azure.

Krok 3. Identyfikowanie wymaganego zakresu

Platforma Azure oferuje cztery poziomy zakresu: zasób, grupę zasobów, subskrypcję i grupę zarządzania. Najlepszym rozwiązaniem jest udzielanie dostępu z najniższymi wymaganymi uprawnieniami, dlatego należy unikać przypisywania roli w szerszym zakresie. Aby uzyskać więcej informacji na temat zakresu, zobacz Omówienie zakresu.

Zakres zasobów

W przypadku zakresu zasobów potrzebny jest identyfikator zasobu dla zasobu. Identyfikator zasobu można znaleźć, przeglądając właściwości zasobu w witrynie Azure Portal. Identyfikator zasobu ma następujący format.

/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}

Zakres grupy zasobów

W przypadku zakresu grupy zasobów potrzebna jest nazwa grupy zasobów. Nazwę można znaleźć na stronie Grupy zasobów w witrynie Azure Portal lub użyć polecenia az group list.

az group list --query "[].{name:name}" --output tsv

Zakres subskrypcji

W przypadku zakresu subskrypcji potrzebny jest identyfikator subskrypcji. Identyfikator można znaleźć na stronie Subskrypcje w witrynie Azure Portal lub użyć polecenia az account list.

az account list --query "[].{name:name, id:id}" --output tsv

Zakres grupy zarządzania

W przypadku zakresu grupy zarządzania potrzebna jest nazwa grupy zarządzania. Nazwę można znaleźć na stronie Grupy zarządzania w witrynie Azure Portal lub użyć polecenia az account management-group list.

az account management-group list --query "[].{name:name, id:id}" --output tsv

Krok 4. Przypisywanie roli

Aby przypisać rolę, użyj polecenia az role assignment create . W zależności od zakresu polecenie zwykle ma jeden z następujących formatów.

Zakres zasobów

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"

Zakres grupy zasobów

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

Zakres subskrypcji

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"

Zakres grupy zarządzania

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"

Poniżej przedstawiono przykład danych wyjściowych podczas przypisywania roli Współautor maszyny wirtualnej do użytkownika w zakresie grupy zasobów.

{
  "canDelegate": null,
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
  "name": "{roleAssignmentId}",
  "principalId": "{principalId}",
  "principalType": "User",
  "resourceGroup": "{resourceGroupName}",
  "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
  "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
  "type": "Microsoft.Authorization/roleAssignments"
}

Przypisywanie przykładów ról

Przypisywanie roli dla wszystkich kontenerów obiektów blob w zakresie zasobów konta magazynu

Przypisuje rolę Współautor danych obiektu blob magazynu do jednostki usługi z identyfikatorem obiektu 55555555-5555-5555-5555-555555555555555 w zakresie zasobów dla konta magazynu o nazwie storage12345.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"

Przypisywanie roli dla określonego zakresu zasobów kontenera obiektów blob

Przypisuje rolę Współautor danych obiektu blob magazynu do jednostki usługi z identyfikatorem obiektu 55555555-5555-5555-55555-55555555555555555 w zakresie zasobów dla kontenera obiektów blob o nazwie blob-container-01.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"

Przypisywanie roli dla grupy w określonym zakresie zasobów sieci wirtualnej

Przypisuje rolę Współautor maszyny wirtualnej do grupy Ann Mack Team o identyfikatorze 222222222-2222-2222-2222-2222222222222222222 w zakresie zasobów dla sieci wirtualnej o nazwie pharma-sales-project-network.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"

Przypisywanie roli użytkownika w zakresie grupy zasobów

Przypisuje użytkownikowi rolę patlong@contoso.com Współautor maszyny wirtualnej w zakresie grupy zasobów pharma-sales.

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Przypisywanie roli dla użytkownika przy użyciu unikatowego identyfikatora roli w zakresie grupy zasobów

Istnieje kilka razy, gdy nazwa roli może ulec zmianie, na przykład:

  • Używasz własnej roli niestandardowej i decydujesz się zmienić nazwę.
  • Używasz roli w wersji zapoznawczej z nazwą (wersja zapoznawcza). Gdy rola zostanie zwolniona, nazwa roli zostanie zmieniona.

Nawet jeśli nazwa roli zostanie zmieniona, identyfikator roli nie ulegnie zmianie. Jeśli używasz skryptów lub automatyzacji do tworzenia przypisań ról, najlepszym rozwiązaniem jest użycie unikatowego identyfikatora roli zamiast nazwy roli. W związku z tym jeśli nazwa roli zostanie zmieniona, skrypty będą działać częściej.

Poniższy przykład przypisuje użytkownikowi rolę Współautor maszyny wirtualnej w zakresie grupy zasobów pharma-sales.patlong@contoso.com

az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Przypisywanie roli dla wszystkich kontenerów obiektów blob w zakresie grupy zasobów

Przypisuje rolę Współautor danych obiektu blob usługi Storage do jednostki usługi z identyfikatorem obiektu 55555555-5555-5555-55555-5555555555555 wzakresie grupy zasobów Example-Storage-rg.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"

Przypisywanie roli dla aplikacji w zakresie grupy zasobów

Przypisuje rolę Współautor maszyny wirtualnej do aplikacji z identyfikatorem jednostki usługi o identyfikatorze 4444444444-4444-4444-44444444444 w zakresie grupy zasobów pharma-sales.

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Przypisywanie roli dla nowej jednostki usługi w zakresie grupy zasobów

Jeśli tworzysz nową jednostkę usługi i natychmiast spróbujesz przypisać rolę do tej jednostki usługi, przypisanie tej roli może zakończyć się niepowodzeniem w niektórych przypadkach. Jeśli na przykład użyjesz skryptu do utworzenia nowej tożsamości zarządzanej, a następnie spróbujesz przypisać rolę do tej jednostki usługi, przypisanie roli może zakończyć się niepowodzeniem. Przyczyną tego błędu jest prawdopodobnie opóźnienie replikacji. Jednostka usługi jest tworzona w jednym regionie; Jednak przypisanie roli może wystąpić w innym regionie, który jeszcze nie zreplikował jednostki usługi. Aby rozwiązać ten scenariusz, należy określić typ podmiotu zabezpieczeń podczas tworzenia przypisania roli.

Aby przypisać rolę, użyj polecenia az role assignment create, określ wartość elementu --assignee-object-id, a następnie ustaw wartość --assignee-principal-type na ServicePrincipal.

az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

Poniższy przykład przypisuje rolę Współautor maszyny wirtualnej do tożsamości zarządzanej testowej msi w zakresie grupy zasobów pharma-sales:

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Przypisywanie roli użytkownika w zakresie subskrypcji

Przypisuje użytkownikowi rolę annm@example.com Czytelnik w zakresie subskrypcji.

az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Przypisywanie roli dla grupy w zakresie subskrypcji

Przypisuje rolę Czytelnik do grupy Ann Mack Team o identyfikatorze 222222222-2222-2222-2222-222222222222222222 w zakresie subskrypcji.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Przypisywanie roli dla wszystkich kontenerów obiektów blob w zakresie subskrypcji

Przypisuje użytkownikowi rolę alain@example.com Czytelnik danych obiektu blob usługi Storage w zakresie subskrypcji.

az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Przypisywanie roli użytkownika w zakresie grupy zarządzania

Przypisuje użytkownikowi alain@example.com rolę Czytelnik rozliczeń w zakresie grupy zarządzania.

az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"

Następne kroki