Előfizetések üzembe helyezése ARM-sablonokkal

Az erőforrások kezelésének egyszerűsítése érdekében azure Resource Manager sablonnal (ARM-sablonnal) helyezhet üzembe erőforrásokat az Azure-előfizetés szintjén. Üzembe helyezhet például szabályzatokat és Azure-beli szerepköralapú hozzáférés-vezérlést (Azure RBAC) az előfizetésében, amely az előfizetésre alkalmazza őket. Az előfizetésen belül is létrehozhat erőforráscsoportokat, és erőforrásokat helyezhet üzembe az előfizetés erőforráscsoportjaiban.

Megjegyzés

Előfizetési szintű üzembe helyezés esetén 800 különböző erőforráscsoportra telepítheti azokat.

A sablonok előfizetési szinten történő üzembe helyezéséhez használja az Azure CLI-t, a PowerShellt, a REST API-t vagy a portált.

Tipp

Azért javasoljuk a Bicep használatát, mert ugyanazokkal a képességekkel rendelkezik, mint az ARM-sablonok, és a szintaxis használata egyszerűbb. További információkért lásd az előfizetés üzembe helyezését ismertető cikket.

Támogatott erőforrások

Nem minden erőforrástípus helyezhető üzembe az előfizetés szintjén. Ez a szakasz felsorolja, hogy mely erőforrástípusok támogatottak.

Az Azure Blueprints esetében használja a következőt:

Azure-szabályzatok esetén használja a következőket:

Hozzáférés-vezérléshez használja a következőt:

Az erőforráscsoportokban üzembe helyező beágyazott sablonok esetében használja a következőt:

Új erőforráscsoportok létrehozásához használja a következőt:

Az előfizetés kezeléséhez használja a következőt:

Monitorozáshoz használja a következőt:

A biztonság érdekében használja a következőt:

Egyéb támogatott típusok a következők:

Séma

Az előfizetési szintű üzemelő példányokhoz használt séma eltér az erőforráscsoport-üzemelő példányok sémáitól.

Sablonokhoz használja a következőt:

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  ...
}

A paraméterfájl sémája minden üzembehelyezési hatókör esetében megegyezik. Paraméterfájlok esetén használja a következőt:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Üzembehelyezési parancsok

Előfizetésben való üzembe helyezéshez használja az előfizetésszintű üzembehelyezési parancsokat.

Az Azure CLI-hez használja az az deployment sub create parancsot. Az alábbi példa egy sablont helyez üzembe egy erőforráscsoport létrehozásához:

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

Az ARM-sablonok üzembe helyezési parancsaival és beállításaival kapcsolatos részletesebb információkért lásd:

Üzembe helyezés helye és neve

Előfizetési szintű üzemelő példányok esetén meg kell adnia az üzembe helyezés helyét. Az üzembe helyezés helye eltér az üzembehelyezési erőforrások helyétől. Az üzembehelyezési hely határozza meg, hogy hol tárolja az üzembehelyezési adatokat. A felügyeleti csoportok és a bérlők üzembe helyezéséhez is szükség van egy helyre. Az erőforráscsoport üzemelő példányai esetében az erőforráscsoport helye az üzembehelyezési adatok tárolására szolgál.

Megadhatja az üzembe helyezés nevét, vagy használhatja az alapértelmezett üzembe helyezési nevet. Az alapértelmezett név a sablonfájl neve. Az azuredeploy.json nevű sablon üzembe helyezése például létrehozza az azuredeploy alapértelmezett üzembehelyezési nevét.

Minden üzembe helyezési név esetében a hely nem módosítható. Nem hozható létre üzembe helyezés egyetlen helyen, ha egy másik helyen található egy azonos nevű meglévő üzemelő példány. Ha például a centralusban a Deployment1 névvel rendelkező előfizetési üzembe helyezést hoz létre, később nem hozhat létre egy másik üzembe helyezést a deployment1 névvel, hanem a westus helyével. Ha a hibakódot InvalidDeploymentLocationkapja, használjon másik nevet, vagy ugyanazt a helyet, mint az előző üzembe helyezés.

Üzembehelyezési hatókörök

Az előfizetésben való üzembe helyezéskor az alábbi erőforrásokat helyezheti üzembe:

  • a műveletből származó cél-előfizetés
  • bármely előfizetés a bérlőben
  • erőforráscsoportok az előfizetésen vagy más előfizetéseken belül
  • az előfizetés bérlője

A bővítményerőforrás hatóköre az üzembehelyezési céltól eltérő célra is kiterjedhet.

A sablont telepítő felhasználónak hozzáféréssel kell rendelkeznie a megadott hatókörhöz.

Ez a szakasz bemutatja, hogyan adhat meg különböző hatóköröket. Ezeket a különböző hatóköröket egyetlen sablonban kombinálhatja.

Hatókör a cél-előfizetéshez

Ha erőforrásokat szeretne üzembe helyezni a cél-előfizetésben, adja hozzá ezeket az erőforrásokat a sablon Erőforrások szakaszához.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    subscription-level-resources
  ],
  "outputs": {}
}

Példák az előfizetésben való üzembe helyezésre: Erőforráscsoportok létrehozása és Szabályzatdefiníció hozzárendelése.

Hatókör más előfizetésre

Ha a művelettől eltérő előfizetésben szeretne erőforrásokat üzembe helyezni, adjon hozzá egy beágyazott üzembe helyezést. Állítsa a subscriptionId tulajdonságot annak az előfizetésnek az azonosítójára, amelybe telepíteni szeretné az előfizetést. Állítsa be a location beágyazott üzembe helyezés tulajdonságát.

{
  "$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": {}
}

Hatókör az erőforráscsoporthoz

Ha erőforrásokat szeretne üzembe helyezni egy erőforráscsoportban az előfizetésen belül, adjon hozzá egy beágyazott üzembe helyezést, és foglalja bele a tulajdonságot resourceGroup . A következő példában a beágyazott üzembe helyezés egy nevű demoResourceGrouperőforráscsoportot céloz meg.

{
  "$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": {}
}

Az erőforráscsoportban való üzembe helyezésre vonatkozó példa: Erőforráscsoport és erőforrások létrehozása.

Hatókör a bérlőre

Ha erőforrásokat szeretne létrehozni a bérlőben, állítsa a értéket a scope értékre /. A sablont telepítő felhasználónak rendelkeznie kell a bérlőn való üzembe helyezéshez szükséges hozzáféréssel.

Beágyazott üzembe helyezés használatához állítsa be a és locationa értéketscope.

{
  "$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": {}
}

Vagy beállíthatja a hatókört / bizonyos erőforrástípusokra, például a felügyeleti csoportokra.

{
  "$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')]"
    }
  }
}

További információ: Felügyeleti csoport.

Erőforráscsoportok

Erőforráscsoportok létrehozása

Ha erőforráscsoportot szeretne létrehozni egy ARM-sablonban, definiáljon egy Microsoft. Resources/resourceGroups erőforrás az erőforráscsoport nevével és helyével.

Az alábbi sablon egy üres erőforráscsoportot hoz létre.

{
  "$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": {}
}

Több erőforráscsoport létrehozásához használja a másolási elemet erőforráscsoportokkal.

{
  "$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": {}
}

További információ az erőforrás-iterációról: Erőforrás-iteráció ARM-sablonokban és Oktatóanyag: Több erőforráspéldány létrehozása ARM-sablonokkal.

Erőforráscsoport és erőforrások létrehozása

Az erőforráscsoport létrehozásához és az erőforrások üzembe helyezéséhez használjon beágyazott sablont. A beágyazott sablon határozza meg az erőforráscsoportban üzembe helyezendő erőforrásokat. Állítsa a beágyazott sablont az erőforráscsoporttól függőként, hogy az erőforráscsoport létezik-e az erőforrások üzembe helyezése előtt. Akár 800 erőforráscsoportban is üzembe helyezheti azokat.

Az alábbi példa létrehoz egy erőforráscsoportot, és üzembe helyez egy tárfiókot az erőforráscsoportban.

{
  "$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

Szabályzatdefiníció hozzárendelése

Az alábbi példa egy meglévő szabályzatdefiníciót rendel az előfizetéshez. Ha a szabályzatdefiníció paramétereket vesz fel, adja meg őket objektumként. Ha a szabályzatdefiníció nem fogad el paramétereket, használja az alapértelmezett üres objektumot.

{
  "$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')]"
      }
    }
  ]
}

A sablon Azure CLI-vel való üzembe helyezéséhez használja a következőt:

# 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']} }"

A sablon PowerShell-lel való üzembe helyezéséhez használja a következőt:

$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

Szabályzatdefiníciók létrehozása és hozzárendelése

Ugyanabban a sablonban definiálhat és rendelhet hozzá szabályzatdefiníciót.

{
  "$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')]"
      }
    }
  ]
}

Ha létre szeretné hozni a szabályzatdefiníciót az előfizetésben, és hozzá szeretné rendelni az előfizetéshez, használja a következő CLI-parancsot:

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"

A sablon PowerShell-lel való üzembe helyezéséhez használja a következőt:

New-AzSubscriptionDeployment `
  -Name definePolicy `
  -Location centralus `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json"

Azure Blueprints

Tervdefiníció létrehozása

Tervdefiníciót sablonból hozhat létre .

{
  "$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')]"
          }
        }
      }
    }
  ]
}

A tervdefiníció előfizetésben való létrehozásához használja a következő CLI-parancsot:

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"

A sablon PowerShell-lel való üzembe helyezéséhez használja a következőt:

New-AzSubscriptionDeployment `
  -Name demoDeployment `
  -Location centralus `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/blueprints-new-blueprint/azuredeploy.json"

Hozzáférés-vezérlés

A szerepkörök hozzárendelésével kapcsolatos további információkért lásd: Azure-szerepkörök hozzárendelése Azure-Resource Manager-sablonok használatával.

Az alábbi példa létrehoz egy erőforráscsoportot, zárolást alkalmaz rá, és hozzárendel egy szerepkört egy taghoz.

{
  "$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'))]"
      ]
    }
  ]
}

Következő lépések