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

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

Megjegyzés

Előfizetési szintű üzemelő példányban 800 különböző erőforráscsoportban helyezhet üzembe.

Sablonok előfizetési szinten való üzembe helyezéséhez használja az Azure CLI-t, a PowerShellt, REST API a portált.

Támogatott erőforrások

Nem minden erőforrástípus helyezhető üzembe az előfizetés szintjén. Ez a szakasz felsorolja a támogatott erőforrástípusokat.

A Azure Blueprints használja a következőt:

Azure-szabályzatok:

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

Az erőforráscsoportokban üzembe helyezett beágyazott sablonokhoz 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:

A monitorozáshoz használja a következőt:

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

További támogatott típusok:

Séma

Az előfizetés-szintű üzembe helyezések sémája eltér az erőforráscsoportok üzemelő példányai 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 üzembe helyezési hatókörben ugyanaz. Paraméterfájlokhoz használja a következőt:

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

Üzembe helyezési parancsok

Az előfizetésben való üzembe helyezéshez használja az előfizetés-szintű üzembe helyezési parancsokat.

Az Azure CLI-hez használja az az deployment sub create szolgáltatásokat. Az alábbi példa üzembe helyez egy sablont 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 üzembe helyezési parancsokkal és az ARM-sablonok üzembe helyezésének beállításaival kapcsolatos további 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 üzemelő példány helyét. Az üzembe helyezés helye elkülönül az üzembe helyezett erőforrások helyétől. Az üzembe helyezési hely határozza meg, hogy hol tárolja az üzembe helyezési adatokat. A felügyeleti csoportok és bérlők üzembe helyezéséhez hely is szükséges. Az erőforráscsoportok üzemelő példányai esetén az erőforráscsoport helye az üzembe helyezési adatok tárolására használható.

Meg kell adnia az üzemelő példány nevét, vagy használhatja az alapértelmezett üzembe helyezési nevet. Az alapértelmezett név a sablonfájl neve. Egy azuredeploy.json nevű sablon üzembe helyezése például létrehoz egy alapértelmezett azuredeploy üzembe helyezési nevet.

A hely minden üzembe helyezési névhez nem módosítható. Nem hozhat létre üzemelő példányokat egyetlen helyen, ha már létezik egy azonos nevű üzemelő példány egy másik helyen. Ha például a centralusban létrehoz egy deployment1 nevű előfizetés-üzemelő példányt, később nem hozhat létre másik üzemelő példányt deployment1 néven, de a westus nevű helyet. Ha a hibakód jelenik meg, vagy használjon másik nevet, vagy ugyanazt a helyet, mint az előző üzembe InvalidDeploymentLocation helyezés.

Üzembe helyezési hatókörök

Előfizetésben való üzembe helyezéskor a következő erőforrásokat helyezheti üzembe:

  • a művelet cél-előfizetése
  • bármely előfizetés a bérlőben
  • erőforráscsoportok az előfizetésen vagy más előfizetésen belül
  • az előfizetés bérlője

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

A sablont üzembe helyező felhasználónak hozzáféréssel kell lennie a megadott hatókörben.

Ez a szakasz a különböző hatókörök megadását mutatja be. Ezeket a különböző hatókörök egyetlen sablonban kombinálhatóak.

Hatókör 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 resources (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 üzemelő példányt. Állítsa subscriptionId a tulajdonságot annak az előfizetésnek az azonosítójára, amelybe az üzembe helyezést szeretné helyezni. Állítsa be location a beágyazott üzemelő példány 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 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 üzemelő példányt, és adja hozzá a resourceGroup tulajdonságot. A következő példában a beágyazott üzemelő példány a nevű erőforráscsoportot célozza demoResourceGroup 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": {}
}

Egy erőforráscsoportban való üzembe helyezésre vonatkozó példáért lásd: Erőforráscsoport és erőforrások létrehozása.

Hatókör bérlőre

Ha erőforrásokat hoz létre a bérlőben, állítsa a scope következőt: / . A sablont üzembe helyező felhasználónak a bérlőn való üzembe helyezéshez szükséges hozzáféréssel kell lennie.

Beágyazott üzembe helyezéshez állítsa be a és a scope location halmazt.

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

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

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

Erőforráscsoport ARM-sablonban való létrehozásához definiálja a Microsoft.Resources/resourceGroups erőforrást 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ás 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ó AZ 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 helyezni kívánt erőforrásokat. Állítsa be 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. Legfeljebb 800 erőforráscsoportot helyezhet üzembe.

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 hozzá az előfizetéshez. Ha a szabályzatdefiníció paramétereket használ, adja meg őket objektumként. Ha a szabályzatdefiníció nem használ 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-val 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-rel 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á egy 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')]"
      }
    }
  ]
}

A következő CLI-paranccsal hozza létre a szabályzatdefiníciót az előfizetésben, és rendelje hozzá az előfizetéshez:

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-rel 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

Sablonból is létrehozhat tervdefiníciót.

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

További információ a szerepkörök hozzárendelésről: Azure-szerepkörök hozzárendelése Azure Resource Manager sablonokkal.

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

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

Következő lépések