Nasazení předplatných pomocí šablon ARM
Pro zjednodušení správy prostředků můžete použít šablonu Azure Resource Manager (šablonu ARM) k nasazení prostředků na úrovni předplatného Azure. Můžete například do svého předplatného nasadit zásady a řízení přístupu na základě role v Azure (Azure RBAC), které je použije v rámci vašeho předplatného. 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 nasadit do 800 různých skupin prostředků.
Pokud chcete nasadit šablony na úrovni předplatného, použijte Azure CLI, PowerShell, REST API nebo portál.
Podporované prostředky
Ne všechny typy prostředků je možné nasadit na úroveň předplatného. V této části je uveden 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
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Pro vnořené šablony, které se nasadí do skupin prostředků, použijte:
K vytváření nových skupin prostředků použijte:
Ke správě předplatného použijte:
Pro monitorování použijte:
Pro zabezpečení použijte:
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- Hodnocení
- nastavení automatického zřizování
- Konektory
- deviceSecurityGroups
- nastavení příjmu dat
- ceny
- zabezpečeníAktuály
- zdroje dat
- workspaceSettings (nastavení pracovního prostoru)
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 souboru 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 nasazení na úrovni předplatného.
V případě 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 a možnostech nasazení šablon ARM najdete v těchto tématu:
- 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 GitHub úložiště
- 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í pro nasazení. Umístění nasazení je oddělené od umístění prostředků, které nasadíte. Umístění nasazení určuje, kam se budou ukládat data nasazení. Nasazení skupiny pro správu a tenanta také vyžadují umístění. Pro nasazení skupin prostředků se k ukládání dat nasazení používá umístění skupiny prostředků.
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 při nasazení šablony s názvem azuredeploy.json se 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ím westus. Pokud se zobrazí kód chyby , použijte pro tento název jiný název nebo stejné umístění jako InvalidDeploymentLocation předchozí nasazení.
Obory nasazení
Při nasazování do předplatného můžete prostředky nasadit do:
- cílové předplatné z operace
- jakékoli 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í může být vymezen na cíl, který se liší od cíle nasazení.
Uživatel, který šablonu nasazuje, 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 jediné šabloně.
Obor do cílového předplatného
Chcete-li nasadit prostředky do cílového předplatného, přidejte tyto prostředky do části Resources (prostředky) v šabloně.
{
"$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ématu Vytvoření skupin prostředků a přiřazení definice zásad.
Rozsah pro jiné předplatné
Pokud chcete nasadit prostředky do předplatného, které se liší od předplatného této operace, přidejte vnořené nasazení. Nastavte subscriptionId vlastnost na ID předplatného, které chcete nasadit. Nastavte location 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": {}
}
Rozsah do skupiny 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 je vnořené nasazení cíleno 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 věnovaném Vytvoření skupiny prostředků a prostředků.
Rozsah do tenanta
Chcete-li vytvořit prostředky v tenantovi, nastavte scope na / . Uživatel, který šablonu nasazuje, musí mít požadovaný přístup k nasazení v tenantovi.
Chcete-li 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 obor 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 vytvořit skupinu prostředků v šabloně ARM, definujte prostředek Microsoft. Resources/resourceGroups s názvem a umístěním pro skupinu 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": "2021-04-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
}
],
"outputs": {}
}
Pomocí elementu Copy se skupinami prostředků vytvořte více než jednu skupinu 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": "2021-04-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ématu iterace prostředků v šablonách ARMa 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 pro nasazení do skupiny prostředků. Nastavte vnořenou šablonu jako závislou na skupině prostředků, abyste před nasazením prostředků zajistili, že skupina prostředků existuje. Můžete nasadit až 800 skupin prostředků.
Následující příklad vytvoří skupinu prostředků a nasadí účet úložiště do skupiny 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"
},
"storagePrefix": {
"type": "string",
"maxLength": 11
}
},
"variables": {
"storageName": "[concat(parameters('storagePrefix'), uniqueString(subscription().id, parameters('rgName')))]"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('rgName')]",
"location": "[parameters('rgLocation')]",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "storageDeployment",
"resourceGroup": "[parameters('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('rgLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
Azure Policy
Přiřazení definice zásady
Následující příklad přiřadí existující definici zásady k předplatnému. Pokud definice zásad přijímá parametry, poskytněte je jako objekt. Pokud definice zásady nepřijímá 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')]"
}
}
]
}
Pokud chcete tuto šablonu nasadit 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']} }"
Pokud chcete tuto šablonu nasadit 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
Definici zásady můžete definovat a přiřadit ve stejné šabloně.
{
"$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 v rámci vašeho předplatného a přiřadit ji k předplatnému, použijte následující příkaz CLI:
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"
Pokud chcete tuto šablonu nasadit 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řit definici podrobného plánu
Definici podrobného plánu můžete vytvořit ze šablony.
{
"$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')]"
}
}
}
}
]
}
Pokud chcete ve svém předplatném vytvořit definici podrobného plánu, 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"
Pokud chcete tuto šablonu nasadit 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řazení 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.4.1.14562",
"templateHash": "17666923867108240565"
}
},
"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"
}
}
},
"functions": [],
"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": "2019-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.4.1.14562",
"templateHash": "12740078983609655962"
}
},
"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"
}
}
},
"functions": [],
"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 program Microsoft Defender pro Cloud najdete v tématu deployASCwithWorkspaceSettings. JSON.
- Ukázkové šablony najdete na adrese GitHub.
- Šablony můžete nasadit také na úrovni skupiny pro správu a na úrovni tenanta.