ARM şablonlarıyla abonelik dağıtımları
Kaynakların yönetimini basitleştirmek için azure aboneliğiniz düzeyinde kaynak dağıtmak için bir Azure Resource Manager şablonu (ARM şablonu) kullanabilirsiniz. Ö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 listelenir.
Azure Blueprints için şunu kullanın:
Azure İlkeleri için şunu kullanın:
Erişim denetimi için şunu kullanın:
- accessReviewScheduleDefinitions
- accessReviewSchedule Ayarlar
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Kaynak gruplarına dağıtılan iç içe şablonlar için şunu kullanın:
Yeni kaynak grupları oluşturmak için şunu kullanın:
Aboneliğinizi yönetmek için şunu 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:
- advancedThreatProtection Ayarlar
- alertsSuppressionRules
- assessmentMetadata
- Değerlendirme
- autoProvisioning Ayarlar
- Bağlayıcı
- deviceSecurityGroups
- alma Ayarlar
- fiyatlandırmalar
- securityContacts
- Ayarlar
- çalışma alanı Ayarlar
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üzeyi 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 kaynak dağıtma
- ARM şablonları ve Azure PowerShell ile kaynak dağıtma
- ARM şablonları ve Azure Resource Manager REST API'siyle kaynakları dağıtma
- GitHub deposundan şablonları dağıtmak için dağıtım düğmesi kullanma
- Cloud Shell'den ARM şablonları 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ı için, 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'ta 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ı
Yasaklanan tek kapsam geçişleri Kaynak Grubundan Yönetim Grubuna veya Abonelikten Yönetim Grubuna gerçekleşir.
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 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": {}
}
Kapsam- kaynak grubu
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şturun
ARM şablonunda kaynak grubu oluşturmak için, kaynak grubunun adı ve konumuyla 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 kaynak oluşturma
Kaynak grubunu oluşturmak ve buna kaynak 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 yerleştirilmiş şablonu kaynak grubuna bağımlı olarak ayarlayın. En fazla 800 kaynak grubu 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 var olan 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 şunu 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 için çalışma alanı ayarlarını dağıtma örneği için bkz. deployASCwithWorkspace Ayarlar.json.
- Örnek şablonlar GitHub'da bulunabilir.
- Şablonları yönetim grubu düzeyinde ve kiracı düzeyinde de dağıtabilirsiniz.