Nasazení předplatného pomocí šablon ARM
Pokud chcete zjednodušit správu prostředků, můžete k nasazení prostředků na úrovni předplatného Azure použít šablonu Resource Manager Azure (šablonu ARM). Do svého předplatného můžete například nasadit zásady a řízení přístupu na základě role v Azure (Azure RBAC), které je použije napříč vaším předplatným. Můžete také vytvořit skupiny prostředků v rámci předplatného a nasadit prostředky do skupin prostředků v předplatném.
Poznámka
V nasazení na úrovni předplatného můžete provést nasazení do 800 různých skupin prostředků.
Pokud chcete nasadit šablony na úrovni předplatného, použijte Azure CLI, PowerShell, rozhraní REST API nebo portál.
Tip
Doporučujeme Bicep , protože nabízí stejné funkce jako šablony ARM a jeho použití je jednodušší. Další informace najdete v tématu Nasazení předplatného.
Podporované prostředky
Na úrovni předplatného není možné nasadit všechny typy prostředků. Tato část obsahuje seznam podporovaných typů prostředků.
Pro Azure Blueprints použijte:
V případě zásad Azure použijte:
Pro řízení přístupu použijte:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- definice role
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Pro vnořené šablony, které se nasazují do skupin prostředků, použijte:
Při vytváření nových skupin prostředků použijte:
Ke správě předplatného použijte:
Pro účely monitorování použijte:
Z důvodu zabezpečení použijte:
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- Hodnocení
- autoProvisioningSettings
- Konektory
- deviceSecurityGroups
- nastavení příjmu dat
- ceny
- securityContacts
- zdroje dat
- workspaceSettings
Mezi další podporované typy patří:
Schéma
Schéma, které používáte pro nasazení na úrovni předplatného, se liší od schématu pro nasazení skupin prostředků.
Pro šablony použijte:
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
...
}
Schéma pro soubor parametrů je stejné pro všechny obory nasazení. Pro soubory parametrů použijte:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Příkazy nasazení
K nasazení do předplatného použijte příkazy pro nasazení na úrovni předplatného.
Pro Azure CLI použijte příkaz az deployment sub create. Následující příklad nasadí šablonu pro vytvoření skupiny prostředků:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/emptyrg.json" \
--parameters rgName=demoResourceGroup rgLocation=centralus
Podrobnější informace o příkazech nasazení a možnostech nasazení šablon ARM najdete tady:
- Nasazení prostředků pomocí šablon ARM a Azure Portal
- Nasazení prostředků pomocí šablon ARM a Azure CLI
- Nasazení prostředků pomocí šablon ARM a Azure PowerShell
- Nasazení prostředků pomocí šablon ARM a azure Resource Manager REST API
- Použití tlačítka nasazení k nasazení šablon z úložiště GitHub
- Nasazení šablon ARM z Cloud Shell
Umístění a název nasazení
Pro nasazení na úrovni předplatného musíte zadat umístění nasazení. Umístění nasazení je oddělené od umístění prostředků, které nasazujete. Umístění nasazení určuje, kam se mají ukládat data nasazení. Nasazení skupin pro správu a tenantů také vyžadují umístění. U nasazení skupin prostředků se umístění skupiny prostředků používá k uložení dat nasazení.
Můžete zadat název nasazení nebo použít výchozí název nasazení. Výchozí název je název souboru šablony. Například nasazení šablony s názvem azuredeploy.json vytvoří výchozí název nasazení azuredeploy.
Pro každý název nasazení je umístění neměnné. Nasazení nemůžete vytvořit v jednom umístění, pokud existuje nasazení se stejným názvem v jiném umístění. Pokud například vytvoříte nasazení předplatného s názvem deployment1 v centralus, nemůžete později vytvořit další nasazení s názvem deployment1 , ale umístění westus. Pokud se zobrazí kód InvalidDeploymentLocation
chyby , použijte pro tento název jiný název nebo stejné umístění jako v předchozím nasazení.
Rozsahy nasazení
Při nasazování do předplatného můžete prostředky nasadit do:
- cílové předplatné z operace
- libovolné předplatné v tenantovi
- skupiny prostředků v rámci předplatného nebo jiných předplatných
- tenant pro předplatné
Prostředek rozšíření je možné omezit na cíl, který se liší od cíle nasazení.
Uživatel nasazující šablonu musí mít přístup k zadanému oboru.
V této části se dozvíte, jak zadat různé obory. Tyto různé obory můžete kombinovat v jedné šabloně.
Rozsah na cílové předplatné
Pokud chcete prostředky nasadit do cílového předplatného, přidejte je do oddílu prostředků šablony.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
subscription-level-resources
],
"outputs": {}
}
Příklady nasazení do předplatného najdete v tématech Vytvoření skupin prostředků a Přiřazení definice zásad.
Rozsah na jiné předplatné
Pokud chcete nasadit prostředky do předplatného, které se liší od předplatného operace, přidejte vnořené nasazení. subscriptionId
Nastavte vlastnost na ID předplatného, do kterého chcete provést nasazení. location
Nastavte vlastnost pro vnořené nasazení.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"location": "westus",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Obor na skupinu prostředků
Pokud chcete nasadit prostředky do skupiny prostředků v rámci předplatného, přidejte vnořené nasazení a zahrňte resourceGroup
vlastnost . V následujícím příkladu vnořené nasazení cílí na skupinu prostředků s názvem demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Příklad nasazení do skupiny prostředků najdete v tématu Vytvoření skupiny prostředků a prostředků.
Rozsah na tenanta
Pokud chcete vytvořit prostředky v tenantovi, nastavte na scope
/
. Uživatel, který šablonu nasazuje, musí mít požadovaný přístup k nasazení v tenantovi.
Pokud chcete použít vnořené nasazení, nastavte scope
a location
.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
Nebo můžete nastavit rozsah /
na pro některé typy prostředků, jako jsou skupiny pro správu.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Další informace najdete v tématu Skupina pro správu.
Skupiny prostředků
Vytvoření skupin prostředků
Pokud chcete v šabloně ARM vytvořit skupinu prostředků, definujte prostředek Microsoft.Resources/resourceGroups s názvem a umístěním skupiny prostředků.
Následující šablona vytvoří prázdnou skupinu prostředků.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"type": "string"
},
"rgLocation": {
"type": "string"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2022-09-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
}
],
"outputs": {}
}
K vytvoření více než jedné skupiny prostředků použijte element copy se skupinami prostředků.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgNamePrefix": {
"type": "string"
},
"rgLocation": {
"type": "string"
},
"instanceCount": {
"type": "int"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2022-09-01",
"location": "[parameters('rgLocation')]",
"name": "[concat(parameters('rgNamePrefix'), copyIndex())]",
"copy": {
"name": "rgCopy",
"count": "[parameters('instanceCount')]"
},
"properties": {}
}
],
"outputs": {}
}
Informace o iteraci prostředků najdete v tématech Iterace prostředků v šablonách ARM a Kurz: Vytvoření více instancí prostředků pomocí šablon ARM.
Vytvoření skupiny prostředků a prostředků
Pokud chcete vytvořit skupinu prostředků a nasadit do ní prostředky, použijte vnořenou šablonu. Vnořená šablona definuje prostředky, které se mají nasadit do skupiny prostředků. Nastavte vnořenou šablonu jako závislou na skupině prostředků, abyste se před nasazením prostředků ujistili, že skupina prostředků existuje. Nasazení můžete provést až do 800 skupin prostředků.
Následující příklad vytvoří skupinu prostředků a nasadí do této skupiny prostředků účet úložiště.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"type": "string"
},
"rgLocation": {
"type": "string"
},
"storagePrefix": {
"type": "string",
"maxLength": 11
}
},
"variables": {
"storageName": "[format('{0}{1}', parameters('storagePrefix'), uniqueString(subscription().id, parameters('rgName')))]"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2022-09-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "storageDeployment",
"resourceGroup": "[parameters('rgName')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('storageName')]",
"location": "[parameters('rgLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
]
}
},
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
]
}
]
}
Azure Policy
Přiřazení definice zásad
Následující příklad přiřadí k předplatnému existující definici zásad. Pokud definice zásady přebírá parametry, zadejte je jako objekt. Pokud definice zásady nepřebírají parametry, použijte výchozí prázdný objekt.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"policyDefinitionID": {
"type": "string"
},
"policyName": {
"type": "string"
},
"policyParameters": {
"type": "object",
"defaultValue": {}
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2020-03-01",
"name": "[parameters('policyName')]",
"properties": {
"scope": "[subscription().id]",
"policyDefinitionId": "[parameters('policyDefinitionID')]",
"parameters": "[parameters('policyParameters')]"
}
}
]
}
K nasazení této šablony pomocí Azure CLI použijte:
# Built-in policy definition that accepts parameters
definition=$(az policy definition list --query "[?displayName=='Allowed locations'].id" --output tsv)
az deployment sub create \
--name demoDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json" \
--parameters policyDefinitionID=$definition policyName=setLocation policyParameters="{'listOfAllowedLocations': {'value': ['westus']} }"
K nasazení této šablony pomocí PowerShellu použijte:
$definition = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -eq 'Allowed locations' }
$locations = @("westus", "westus2")
$policyParams =@{listOfAllowedLocations = @{ value = $locations}}
New-AzSubscriptionDeployment `
-Name policyassign `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json" `
-policyDefinitionID $definition.PolicyDefinitionId `
-policyName setLocation `
-policyParameters $policyParams
Vytvoření a přiřazení definic zásad
Ve stejné šabloně můžete definovat a přiřadit definici zásady.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Authorization/policyDefinitions",
"apiVersion": "2020-03-01",
"name": "locationpolicy",
"properties": {
"policyType": "Custom",
"parameters": {},
"policyRule": {
"if": {
"field": "location",
"equals": "northeurope"
},
"then": {
"effect": "deny"
}
}
}
},
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2020-03-01",
"name": "location-lock",
"dependsOn": [
"locationpolicy"
],
"properties": {
"scope": "[subscription().id]",
"policyDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/policyDefinitions', 'locationpolicy')]"
}
}
]
}
Pokud chcete vytvořit definici zásady ve vašem předplatném a přiřadit ji k předplatnému, použijte následující příkaz rozhraní příkazového řádku:
az deployment sub create \
--name demoDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json"
K nasazení této šablony pomocí PowerShellu použijte:
New-AzSubscriptionDeployment `
-Name definePolicy `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json"
Azure Blueprints
Vytvoření definice podrobného plánu
Ze šablony můžete vytvořit definici podrobného plánu.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"blueprintName": {
"defaultValue": "sample-blueprint",
"type": "String",
"metadata": {
"description": "The name of the blueprint definition."
}
}
},
"resources": [
{
"type": "Microsoft.Blueprint/blueprints",
"apiVersion": "2018-11-01-preview",
"name": "[parameters('blueprintName')]",
"properties": {
"targetScope": "subscription",
"description": "Blueprint with a policy assignment artifact.",
"resourceGroups": {
"sampleRg": {
"description": "Resource group to add the assignment to."
}
},
"parameters": {
"listOfResourceTypesNotAllowed": {
"type": "array",
"metadata": {
"displayName": "Resource types to pass to the policy assignment artifact."
},
"defaultValue": [
"Citrix.Cloud/accounts"
]
}
}
}
},
{
"type": "Microsoft.Blueprint/blueprints/artifacts",
"apiVersion": "2018-11-01-preview",
"name": "[concat(parameters('blueprintName'), '/policyArtifact')]",
"kind": "policyAssignment",
"dependsOn": [
"[parameters('blueprintName')]"
],
"properties": {
"displayName": "Blocked Resource Types policy definition",
"description": "Block certain resource types",
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', '6c112d4e-5bc7-47ae-a041-ea2d9dccd749')]",
"resourceGroup": "sampleRg",
"parameters": {
"listOfResourceTypesNotAllowed": {
"value": "[[parameters('listOfResourceTypesNotAllowed')]"
}
}
}
}
]
}
K vytvoření definice podrobného plánu ve vašem předplatném použijte následující příkaz rozhraní příkazového řádku:
az deployment sub create \
--name demoDeployment \
--location centralus \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/blueprints-new-blueprint/azuredeploy.json"
K nasazení této šablony pomocí PowerShellu použijte:
New-AzSubscriptionDeployment `
-Name demoDeployment `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/blueprints-new-blueprint/azuredeploy.json"
Řízení přístupu
Další informace o přiřazování rolí najdete v tématu Přiřazování rolí Azure pomocí šablon Azure Resource Manager.
Následující příklad vytvoří skupinu prostředků, použije na ni zámek a přiřadí roli objektu zabezpečení.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "16815708176905569328"
}
},
"parameters": {
"rgName": {
"type": "string",
"metadata": {
"description": "Name of the resourceGroup to create"
}
},
"rgLocation": {
"type": "string",
"metadata": {
"description": "Location for the resourceGroup"
}
},
"principalId": {
"type": "string",
"metadata": {
"description": "principalId of the user that will be given contributor access to the resourceGroup"
}
},
"roleDefinitionId": {
"type": "string",
"defaultValue": "b24988ac-6180-42a0-ab88-20f7382dd24c",
"metadata": {
"description": "roleDefinition to apply to the resourceGroup - default is contributor"
}
},
"roleAssignmentName": {
"type": "string",
"defaultValue": "[guid(parameters('principalId'), parameters('roleDefinitionId'), parameters('rgName'))]",
"metadata": {
"description": "Unique name for the roleAssignment in the format of a guid"
}
}
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2019-10-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"tags": {
"Note": "subscription level deployment"
},
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "applyLock",
"resourceGroup": "[parameters('rgName')]",
"properties": {
"expressionEvaluationOptions": {
"scope": "inner"
},
"mode": "Incremental",
"parameters": {
"principalId": {
"value": "[parameters('principalId')]"
},
"roleDefinitionId": {
"value": "[parameters('roleDefinitionId')]"
},
"roleAssignmentName": {
"value": "[parameters('roleAssignmentName')]"
}
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "6034226420560042393"
}
},
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "principalId of the user that will be given contributor access to the resourceGroup"
}
},
"roleDefinitionId": {
"type": "string",
"metadata": {
"description": "roleDefinition to apply to the resourceGroup - default is contributor"
}
},
"roleAssignmentName": {
"type": "string",
"metadata": {
"description": "Unique name for the roleAssignment in the format of a guid"
}
}
},
"resources": [
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2016-09-01",
"name": "DontDelete",
"properties": {
"level": "CanNotDelete",
"notes": "Prevent deletion of the resourceGroup"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-04-01-preview",
"name": "[guid(parameters('roleAssignmentName'))]",
"properties": {
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
},
"dependsOn": [
"[subscriptionResourceId('Microsoft.Resources/resourceGroups', parameters('rgName'))]"
]
}
]
}
Další kroky
- Příklad nasazení nastavení pracovního prostoru pro Microsoft Defender for Cloud najdete v tématu deployASCwithWorkspaceSettings.json.
- Ukázkové šablony najdete na GitHubu.
- Šablony můžete také nasadit na úrovni skupiny pro správu a na úrovni tenanta.