ARM şablonlarıyla abonelik dağıtımları
Kaynakların yönetimini basitleştirmek için Azure Resource Manager şablonunu (ARM şablonu) kullanarak kaynakları Azure aboneliğiniz düzeyinde dağıtabilirsiniz. Örneğin, ilkeleri ve Azure rol tabanlı erişim denetimini (Azure RBAC) aboneliğinize dağıtabilirsiniz ve bu da bunları aboneliğiniz genelinde uygular. Ayrıca abonelik içinde kaynak grupları oluşturabilir ve kaynakları abonelikteki kaynak gruplarına dağıtabilirsiniz.
Not
Abonelik düzeyinde dağıtımda 800 farklı kaynak grubuna dağıtabilirsiniz.
Şablonları abonelik düzeyinde dağıtmak için Azure CLI, PowerShell, REST API veya portalı kullanın.
İpucu
ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz. abonelik dağıtımları.
Desteklenen kaynaklar
Tüm kaynak türleri abonelik düzeyine dağıtılamaz. Bu bölümde hangi kaynak türlerinin desteklendiği listelenmektedir.
Azure Blueprints için şunu kullanın:
Azure İlkeleri için şunu kullanın:
Erişim denetimi için şunu kullanın:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Kaynak gruplarına dağıtılan iç içe yerleştirilmiş şablonlar için şunu kullanın:
Yeni kaynak grupları oluşturmak için şunu kullanın:
Aboneliğinizi yönetmek için şunları kullanın:
- Bütçe
- configurations - Danışman
- lineOfCredit
- Kilit
- profil - Değişiklik Analizi
- supportPlanTypes
- Etiketler
İzleme için şunu kullanın:
Güvenlik için şunu kullanın:
- advancedThreatProtectionSettings
- alertsSuppressionRules
- assessmentMetadata
- Değerlendirme
- autoProvisioningSettings
- Bağlayıcı
- deviceSecurityGroups
- ingestionSettings
- fiyatlandırmalar
- securityContacts
- ayarlar
- workspaceSettings
Desteklenen diğer türler şunlardır:
Şema
Abonelik düzeyinde dağıtımlar için kullandığınız şema, kaynak grubu dağıtımlarının şemasından farklıdır.
Şablonlar için şunu kullanın:
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
...
}
Parametre dosyasının şeması tüm dağıtım kapsamları için aynıdır. Parametre dosyaları için şunu kullanın:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Dağıtım komutları
Aboneliğe dağıtmak için abonelik düzeyinde dağıtım komutlarını kullanın.
Azure CLI için az deployment sub create komutunu kullanın. Aşağıdaki örnek, kaynak grubu oluşturmak için bir şablon dağıtır:
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
ARM şablonlarını dağıtmaya yönelik dağıtım komutları ve seçenekleri hakkında daha ayrıntılı bilgi için bkz:
- ARM şablonları ve Azure portal ile kaynakları dağıtma
- ARM şablonları ve Azure CLI ile kaynakları dağıtma
- ARM şablonları ve Azure PowerShell ile kaynakları dağıtma
- ARM şablonları ve Azure Resource Manager REST API ile kaynakları dağıtma
- GitHub deposundan şablon dağıtmak için dağıtım düğmesi kullanma
- arm şablonlarını Cloud Shell dağıtma
Dağıtım konumu ve adı
Abonelik düzeyi dağıtımlar için dağıtım için bir konum sağlamanız gerekir. Dağıtımın konumu, dağıttığınız kaynakların konumundan ayrıdır. Dağıtım konumu, dağıtım verilerinin depolandığı yeri belirtir. Yönetim grubu ve kiracı dağıtımları da bir konum gerektirir. Kaynak grubu dağıtımlarında, dağıtım verilerini depolamak için kaynak grubunun konumu kullanılır.
Dağıtım için bir ad sağlayabilir veya varsayılan dağıtım adını kullanabilirsiniz. Varsayılan ad, şablon dosyasının adıdır. Örneğin, azuredeploy.json adlı bir şablon dağıtılırken azuredeploy varsayılan dağıtım adı oluşturulur.
Her dağıtım adı için konum sabittir. Farklı bir konumda aynı ada sahip mevcut bir dağıtım olduğunda tek bir konumda dağıtım oluşturamazsınız. Örneğin, centralus içinde deployment1 adlı bir abonelik dağıtımı oluşturursanız, daha sonra deployment1 adlı başka bir dağıtım oluşturamazsınız ancak westus konumuna sahip olursunuz. hata kodunu InvalidDeploymentLocation
alırsanız, bu ad için farklı bir ad veya önceki dağıtımla aynı konumu kullanın.
Dağıtım kapsamları
Bir aboneliğe dağıtım yaparken kaynakları şu kaynaklara dağıtabilirsiniz:
- işlemden hedef abonelik
- kiracıdaki herhangi bir abonelik
- abonelik veya diğer abonelikler içindeki kaynak grupları
- aboneliğin kiracısı
Uzantı kaynağının kapsamı, dağıtım hedefinden farklı bir hedef olarak ayarlanabilir.
Şablonu dağıtan kullanıcının belirtilen kapsama erişimi olmalıdır.
Bu bölümde farklı kapsamların nasıl belirtileceğini gösterilmektedir. Bu farklı kapsamları tek bir şablonda birleştirebilirsiniz.
Hedef aboneliğe kapsam
Kaynakları hedef aboneliğe dağıtmak için bu kaynakları şablonun kaynaklar bölümüne ekleyin.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
subscription-level-resources
],
"outputs": {}
}
Aboneliğe dağıtma örnekleri için bkz. Kaynak grupları oluşturma ve İlke tanımı atama.
Diğer aboneliğin kapsamı
İşlemden farklı bir aboneliğe kaynak dağıtmak için iç içe bir dağıtım ekleyin. subscriptionId
özelliğini dağıtmak istediğiniz aboneliğin kimliğine ayarlayın. location
İç içe dağıtım için özelliğini ayarlayın.
{
"$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": {}
}
Kaynak grubu kapsamı
Kaynakları abonelik içindeki bir kaynak grubuna dağıtmak için iç içe bir dağıtım ekleyin ve özelliğini ekleyin resourceGroup
. Aşağıdaki örnekte, iç içe dağıtım adlı demoResourceGroup
bir kaynak grubunu hedefler.
{
"$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": {}
}
Kaynak grubuna dağıtma örneği için bkz. Kaynak grubu ve kaynak oluşturma.
Kapsamı kiracıya
Kiracıda kaynak oluşturmak için değerini olarak /
ayarlayınscope
. Şablonu dağıtan kullanıcının kiracıda dağıtmak için gerekli erişime sahip olması gerekir.
İç içe dağıtım kullanmak için ve location
ayarlayınscope
.
{
"$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": {}
}
İsterseniz, yönetim grupları gibi bazı kaynak türleri için kapsamı /
olarak da ayarlayabilirsiniz.
{
"$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')]"
}
}
}
Daha fazla bilgi için bkz . Yönetim grubu.
Kaynak grupları
Kaynak grupları oluşturma
ARM şablonunda kaynak grubu oluşturmak için, kaynak grubu için bir ad ve konum içeren bir Microsoft.Resources/resourceGroups kaynağı tanımlayın.
Aşağıdaki şablon boş bir kaynak grubu oluşturur.
{
"$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": {}
}
Birden fazla kaynak grubu oluşturmak için kaynak gruplarıyla copy öğesini kullanın.
{
"$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": {}
}
Kaynak yinelemesi hakkında bilgi için bkz . ARM şablonlarında kaynak yinelemesi ve Öğretici: ARM şablonlarıyla birden çok kaynak örneği oluşturma.
Kaynak grubu ve kaynakları oluşturma
Kaynak grubunu oluşturmak ve kaynaklara dağıtmak için iç içe bir şablon kullanın. İç içe yerleştirilmiş şablon, kaynak grubuna dağıtılacak kaynakları tanımlar. Kaynakları dağıtmadan önce kaynak grubunun var olduğundan emin olmak için iç içe şablonu kaynak grubuna bağımlı olarak ayarlayın. En fazla 800 kaynak grubuna dağıtabilirsiniz.
Aşağıdaki örnek bir kaynak grubu oluşturur ve kaynak grubuna bir depolama hesabı dağıtır.
{
"$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 İlkesi
İlke tanımı atama
Aşağıdaki örnekte aboneliğe mevcut bir ilke tanımı atanır. İlke tanımı parametreleri alıyorsa, bunları bir nesne olarak sağlayın. İlke tanımı parametreleri almazsa, varsayılan boş nesneyi kullanın.
{
"$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')]"
}
}
]
}
Bu şablonu Azure CLI ile dağıtmak için şunları kullanın:
# 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']} }"
Bu şablonu PowerShell ile dağıtmak için şunu kullanın:
$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
İlke tanımları oluşturma ve atama
Aynı şablonda bir ilke tanımı tanımlayabilir ve atayabilirsiniz.
{
"$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')]"
}
}
]
}
Aboneliğinizde ilke tanımını oluşturmak ve bunu aboneliğe atamak için aşağıdaki CLI komutunu kullanın:
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"
Bu şablonu PowerShell ile dağıtmak için şunu kullanın:
New-AzSubscriptionDeployment `
-Name definePolicy `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json"
Azure Blueprints
Şema tanımı oluşturma
Şablondan şema tanımı oluşturabilirsiniz .
{
"$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')]"
}
}
}
}
]
}
Aboneliğinizde şema tanımını oluşturmak için aşağıdaki CLI komutunu kullanın:
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"
Bu şablonu PowerShell ile dağıtmak için şunu kullanın:
New-AzSubscriptionDeployment `
-Name demoDeployment `
-Location centralus `
-TemplateUri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/blueprints-new-blueprint/azuredeploy.json"
Erişim denetimi
Rol atama hakkında bilgi edinmek için bkz. Azure Resource Manager şablonlarını kullanarak Azure rolleri atama.
Aşağıdaki örnek bir kaynak grubu oluşturur, buna bir kilit uygular ve sorumluya bir rol atar.
{
"$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'))]"
]
}
]
}
Sonraki adımlar
- Bulut için Microsoft Defender çalışma alanı ayarlarını dağıtma örneği için bkz. deployASCwithWorkspaceSettings.json.
- Örnek şablonlar GitHub'da bulunabilir.
- Şablonları yönetim grubu düzeyinde ve kiracı düzeyinde de dağıtabilirsiniz.