Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 przydzielić role użytkownikom, grupom, jednostkom usługowym lub tożsamościom zarządzanym w określonym zakresie. Oprócz korzystania z programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure można przypisywać role przy użyciu szablonów usługi Azure Resource Manager. Szablony mogą być przydatne, jeśli konieczne jest spójne i wielokrotne wdrażanie zasobów. W tym artykule opisano sposób przypisywania ról przy użyciu szablonów.
Uwaga
Bicep to nowy język definiowania zasobów platformy Azure. Ma prostsze środowisko tworzenia niż JSON wraz z innymi funkcjami, które pomagają poprawić jakość infrastruktury jako kodu. Zalecamy, aby każda osoba nowa w używaniu infrastruktury jako kodu na platformie Azure korzystała z Bicep zamiast z JSON.
Aby dowiedzieć się, jak definiować przypisania ról przy użyciu Bicep, zobacz Tworzenie zasobów RBAC platformy Azure przy użyciu Bicep. Aby zapoznać się z przykładem szybkiego startu, zobacz Szybki start: przypisanie roli Azure za pomocą Bicep.
Wymagania wstępne
Aby przypisać role platformy Azure, musisz mieć następujące elementy:
-
Microsoft.Authorization/roleAssignments/writeuprawnienia, takie jak administrator kontroli dostępu opartej na rolach lub administrator dostępu użytkowników
Należy użyć następujących wersji:
-
2018-09-01-previewor later to assign an Azure role to a new service principal -
2020-04-01-previewor later to assign an Azure role at resource scope -
2022-04-01jest pierwszą stabilną wersją
Więcej informacji można znaleźć w Wersjach interfejsów API REST RBAC platformy Azure.
Pobieranie identyfikatorów obiektów
Aby przypisać rolę, musisz określić identyfikator użytkownika, grupy lub aplikacji, do której chcesz przypisać rolę. Identyfikator ma format: 11111111-1111-1111-1111-111111111111. Identyfikator można uzyskać przy użyciu witryny Azure Portal, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.
Użytkownik
Aby uzyskać identyfikator użytkownika, możesz użyć poleceń Get-AzADUser lub az ad user show .
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
Grupa
Aby uzyskać identyfikator grupy, możesz użyć poleceń Get-AzADGroup lub az ad group show .
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
Managed identities
To get the ID of a managed identity, you can use Get-AzAdServiceprincipal or az ad sp commands.
$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].id --output tsv)
Aplikacja
To get the ID of a service principal (identity used by an application), you can use the Get-AzADServicePrincipal or az ad sp list commands. W przypadku jednostki usługi użyj identyfikatora obiektu, zamiast identyfikatora aplikacji.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
Przypisywanie roli platformy Azure
Aby udzielić dostępu w Azure RBAC, należy przypisać rolę.
Zakres grupy zasobów (bez parametrów)
Poniższy szablon przedstawia podstawowy sposób przypisywania roli. Niektóre wartości są określone w szablonie. Poniższy szablon przedstawia następujące elementy:
- Jak przypisać rolę Czytelnik do użytkownika, grupy lub aplikacji w zakresie grupy zasobów
Aby użyć szablonu, należy wykonać następujące czynności:
- Tworzenie nowego pliku JSON i kopiowanie szablonu
- Replace
<your-principal-id>with the ID of a user, group, managed identity, or application to assign the role to
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(resourceGroup().id)]",
"properties": {
"roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"principalId": "<your-principal-id>"
}
}
]
}
Oto przykładowe polecenia New-AzResourceGroupDeployment i az deployment group create, aby rozpocząć wdrożenie w grupie zasobów o nazwie ExampleGroup.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
Poniżej przedstawiono przykład przypisania roli Czytelnik do użytkownika dla grupy zasobów po wdrożeniu szablonu.
Grupa zasobów lub zakres subskrypcji
Poprzedni szablon nie jest bardzo elastyczny. Poniższy szablon używa parametrów i może być używany w różnych zakresach. Poniższy szablon przedstawia następujące elementy:
- Jak przypisać rolę do użytkownika, grupy lub aplikacji w zakresie grupy zasobów lub subskrypcji
- Jak określić role Właściciela, Współautora i Czytelnika jako parametr
Aby użyć szablonu, należy określić następujące dane wejściowe:
- Identyfikator użytkownika, grupy, tożsamości zarządzanej lub aplikacji, do której ma być przypisana rola
- Unikatowy identyfikator, który będzie używany do przypisania roli, lub można użyć domyślnego identyfikatora
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Uwaga
Ten szablon nie jest idempotentny, chyba że ta sama roleNameGuid wartość jest podana jako parametr dla każdego wdrożenia szablonu. Jeśli nie podano roleNameGuid, domyślnie podczas każdego wdrożenia generowany jest nowy identyfikator GUID, a kolejne wdrożenia kończą się niepowodzeniem z błędem Conflict: RoleAssignmentExists.
Zakres przypisania roli zależy od poziomu wdrożenia. Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment at a resource group scope.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Reader
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader
Oto przykłady poleceń New-AzDeployment i az deployment sub create pokazujące, jak uruchomić wdrożenie w zakresie subskrypcji i określić lokalizację.
New-AzDeployment -Location centralus -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Reader
az deployment sub create --location centralus --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader
Zakres zasobów
Jeśli musisz przypisać rolę na poziomie zasobu, ustaw scope właściwość przypisania roli na nazwę zasobu.
Poniższy szablon przedstawia następujące elementy:
- Jak utworzyć nowe konto magazynowe
- How to assign a role to a user, group, or application at the storage account scope
- Jak określić role Właściciela, Współautora i Czytelnika jako parametr
Aby użyć szablonu, należy określić następujące dane wejściowe:
- Identyfikator użytkownika, grupy, tożsamości zarządzanej lub aplikacji, do której ma być przypisana rola
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"storageName": "[concat('storage', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"scope": "[concat('Microsoft.Storage/storageAccounts', '/', variables('storageName'))]",
"dependsOn": [
"[variables('storageName')]"
],
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Aby wdrożyć poprzedni szablon, należy użyć poleceń grupy zasobów. Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment at a resource scope.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Contributor
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Contributor
Poniżej przedstawiono przykład przypisania roli Współtwórca do użytkownika dla konta przechowywania po wdrożeniu szablonu.
New service principal
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 utworzysz nową tożsamość zarządzaną, a następnie spróbujesz przypisać rolę do tej jednostki usługi w tym samym szablonie usługi Azure Resource Manager, przypisanie roli może zakończyć się niepowodzeniem. Przyczyną tego błędu jest prawdopodobnie opóźnienie replikacji. The service principal is created in one region; however, the role assignment might occur in a different region that hasn't replicated the service principal yet.
Aby rozwiązać ten scenariusz, należy ustawić principalType właściwość na wartość ServicePrincipal podczas tworzenia przypisania roli. You must also set the apiVersion of the role assignment to 2018-09-01-preview or later.
2022-04-01 jest pierwszą stabilną wersją.
Poniższy szablon przedstawia następujące elementy:
- How to create a new managed identity service principal
- How to specify the
principalType - How to assign the Contributor role to that service principal at a resource group scope
Aby użyć szablonu, należy określić następujące dane wejściowe:
- Nazwa podstawowa tożsamości zarządzanej lub można użyć ciągu domyślnego
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"baseName": {
"type": "string",
"defaultValue": "msi-test"
}
},
"variables": {
"identityName": "[concat(parameters('baseName'), '-bootstrap')]",
"bootstrapRoleAssignmentId": "[guid(concat(resourceGroup().id, 'contributor'))]",
"contributorRoleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]"
},
"resources": [
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"name": "[variables('identityName')]",
"apiVersion": "2018-11-30",
"location": "[resourceGroup().location]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[variables('bootstrapRoleAssignmentId')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
],
"properties": {
"roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName')), '2018-11-30').properties.principalId]",
"principalType": "ServicePrincipal"
}
}
]
}
Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment at a resource group scope.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
The following shows an example of the Contributor role assignment to a new managed identity service principal after deploying the template.