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:
Microsoft.Authorization/roleAssignments/write
uprawnienia, takie jak kontrola dostępu oparta na rolach Administracja istrator- Powłoka Bash w usłudze Azure Cloud Shell lub interfejs wiersza polecenia platformy Azure
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 w zakresie 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"