Créer des groupes de ressources et des ressources au niveau de l’abonnementCreate resource groups and resources at the subscription level

En règle générale, vous déployez des ressources Azure sur un groupe de ressources dans votre abonnement Azure.Typically, you deploy Azure resources to a resource group in your Azure subscription. Toutefois, vous pouvez également créer des groupes de ressources Azure et créer des ressources Azure au niveau de l’abonnement.However, you can also create Azure resource groups, and create Azure resources at the subscription level. Pour déployer des modèles au niveau de l’abonnement, vous utilisez Azure CLI et Azure PowerShell.To deploy templates at the subscription level, you use Azure CLI and Azure PowerShell. Le portail Azure ne prend pas en charge le déploiement dans le niveau de l’abonnement.The Azure portal doesn't support deployment in the subscription level.

Pour créer un groupe de ressources dans un modèle Azure Resource Manager, définissez une ressource Microsoft.Resources/resourceGroups avec un nom et un emplacement pour le groupe de ressources.To create a resource group in an Azure Resource Manager template, define a Microsoft.Resources/resourceGroups resource with a name and location for the resource group. Vous pouvez créer un groupe de ressources et déployer des ressources sur ce groupe de ressources dans le même modèle.You can create a resource group and deploy resources to that resource group in the same template. Les ressources que vous pouvez déployer au niveau de l’abonnement sont les suivantes : Stratégies et Contrôle d’accès en fonction du rôle.The resources that you can deploy at the subscription level include: Policies, and Role-based access control.

Notes

Cet article a été mis à jour pour tenir compte de l’utilisation du nouveau module Az d’Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Vous pouvez toujours utiliser le module AzureRM, qui continue à recevoir des correctifs de bogues jusqu’à au moins décembre 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Pour en savoir plus sur le nouveau module Az et la compatibilité avec AzureRM, consultez Présentation du nouveau module Az d’Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Pour des instructions d’installation du module Az, consultez Installer Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Points à prendre en considération pour le déploiementDeployment considerations

Les aspects suivants sont différents entre le déploiement au niveau de l’abonnement et le déploiement de groupe de ressources :Subscription level deployment is different from resource group deployment in the following aspects:

Schéma et commandesSchema and commands

Le schéma et les commandes que vous utilisez pour les déploiements au niveau abonnement sont différents de ceux utilisés pour les déploiements de groupes de ressources.The schema and commands you use for subscription-level deployments are different than resource group deployments.

Pour le schéma, utilisez https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#.For the schema, use https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#.

Pour la commande de déploiement Azure CLI, utilisez az deployment create.For the Azure CLI deployment command, use az deployment create. Par exemple, la commande CLI suivante déploie un modèle pour créer un groupe de ressources :For example, the following CLI command deploys a template to create a resource group:

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/emptyRG.json \
  --parameters rgName=demoResourceGroup rgLocation=centralus

Pour la commande de déploiement PowerShell, utilisez New-AzDeployment.For the PowerShell deployment command, use New-AzDeployment. Par exemple, la commande PowerShell suivante déploie un modèle pour créer un groupe de ressources :For example, the following PowerShell command deploys a template to create a resource group:

New-AzDeployment `
  -Name demoDeployment `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/emptyRG.json `
  -rgName demoResourceGroup `
  -rgLocation centralus

Nom et emplacement du déploiementDeployment name and location

Quand vous effectuez un déploiement sur votre abonnement, vous devez fournir un emplacement pour ce déploiement.When deploying to your subscription, you must provide a location for the deployment. Vous pouvez également fournir un nom pour le déploiement.You can also provide a name for the deployment. Si vous ne spécifiez pas de nom pour le déploiement, le nom du modèle est utilisé comme nom de déploiement.If you don't specify a name for the deployment, the name of the template is used as the deployment name. Par exemple, le déploiement d’un modèle nommé azuredeploy.json crée le nom de déploiement par défaut azuredeploy.For example, deploying a template named azuredeploy.json creates a default deployment name of azuredeploy.

L’emplacement des déploiements au niveau de l’abonnement est immuable.The location of subscription level deployments is immutable. Vous ne pouvez pas créer un déploiement dans un emplacement alors qu’il existe un déploiement portant le même nom, mais à un autre emplacement.You can't create a deployment in one location when there's an existing deployment with the same name but different location. Si vous obtenez le code d’erreur InvalidDeploymentLocation, utilisez un autre nom ou le même emplacement que le déploiement précédent pour ce nom.If you get the error code InvalidDeploymentLocation, either use a different name or the same location as the previous deployment for that name.

Utiliser des fonctions de modèleUse template functions

Pour les déploiements au niveau de l’abonnement, il existe quelques considérations importantes liées à l’utilisation des fonctions de modèle :For subscription-level deployments, there are some important considerations when using template functions:

  • La fonction resourceGroup() n’est pas prise en charge.The resourceGroup() function is not supported.
  • La fonction resourceId() est prise en charge.The resourceId() function is supported. Elle permet d’obtenir l’ID des ressources qui sont utilisées dans les déploiements au niveau de l’abonnement.Use it to get the resource ID for resources that are used at subscription level deployments. Par exemple, vous pouvez obtenir l’ID de ressource d’une définition de stratégie avec resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition')).For example, get the resource ID for a policy definition with resourceId('Microsoft.Authorization/roleDefinitions/', parameters('roleDefinition'))
  • Les fonctions reference() et list() sont prises en charge.The reference() and list() functions are supported.

Créer des groupes de ressourcesCreate resource groups

Le modèle suivant crée un groupe de ressources vide.The following template creates an empty resource group.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "rgName": {
            "type": "string"
        },
        "rgLocation": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/resourceGroups",
            "apiVersion": "2018-05-01",
            "location": "[parameters('rgLocation')]",
            "name": "[parameters('rgName')]",
            "properties": {}
        }
    ],
    "outputs": {}
}

Vous trouverez le schéma de modèle ici.The template schema can be found at here. Vous trouverez des modèles similaires dans GitHub.Similar templates can be found at GitHub.

Créer plusieurs groupes de ressourcesCreate multiple resource groups

Pour créer plus d’un groupe de ressources, utilisez l’élément copy avec des groupes de ressources.Use the copy element with resource groups to create more than one resource group.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "rgNamePrefix": {
            "type": "string"
        },
        "rgLocation": {
            "type": "string"
        },
        "instanceCount": {
            "type": "int"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/resourceGroups",
            "apiVersion": "2018-05-01",
            "location": "[parameters('rgLocation')]",
            "name": "[concat(parameters('rgNamePrefix'), copyIndex())]",
            "copy": {
                "name": "rgCopy",
                "count": "[parameters('instanceCount')]"
            },
            "properties": {}
        }
    ],
    "outputs": {}
}

Pour plus d’informations sur l’itération de ressource, consultez Déployer plusieurs instances d’une ressource ou d’une propriété dans des modèles Azure Resource Manager et Didacticiel : Créer plusieurs instances de ressources grâce à des modèles Resource Manager.For information about resource iteration, see Deploy more than one instance of a resource or property in Azure Resource Manager Templates, and Tutorial: Create multiple resource instances with Resource Manager templates.

Créer un groupe de ressources et déployer des ressourcesCreate resource group and deploy resources

Pour créer le groupe de ressources et déployer des ressources sur celui-ci, utilisez un modèle imbriqué.To create the resource group and deploy resources to it, use a nested template. Le modèle imbriqué définit les ressources à déployer sur le groupe de ressources.The nested template defines the resources to deploy to the resource group. Définissez le modèle imbriqué comme dépendant du groupe de ressources pour vous assurer que le groupe de ressources existe avant de déployer les ressources.Set the nested template as dependent on the resource group to make sure the resource group exists before deploying the resources.

L’exemple suivant crée un groupe de ressources, et déploie un compte de stockage sur le groupe de ressources.The following example creates a resource group, and deploys a storage account to the resource group.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "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": "2018-05-01",
            "location": "[parameters('rgLocation')]",
            "name": "[parameters('rgName')]",
            "properties": {}
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "storageDeployment",
            "resourceGroup": "[parameters('rgName')]",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
            ],
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "type": "Microsoft.Storage/storageAccounts",
                            "apiVersion": "2017-10-01",
                            "name": "[variables('storageName')]",
                            "location": "[parameters('rgLocation')]",
                            "kind": "StorageV2",
                            "sku": {
                                "name": "Standard_LRS"
                            }
                        }
                    ],
                    "outputs": {}
                }
            }
        }
    ],
    "outputs": {}
}

Création des stratégiesCreate policies

Assigner une stratégieAssign policy

L’exemple suivant assigne une définition de stratégie existante à l’abonnement.The following example assigns an existing policy definition to the subscription. Si la stratégie utilise des paramètres, fournissez-les en tant qu’objet.If the policy takes parameters, provide them as an object. Si la stratégie n’utilise pas de paramètres, utilisez l’objet vide par défaut.If the policy doesn't take parameters, use the default empty object.

{
    "$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",
            "name": "[parameters('policyName')]",
            "apiVersion": "2018-03-01",
            "properties": {
                "scope": "[subscription().id]",
                "policyDefinitionId": "[parameters('policyDefinitionID')]",
                "parameters": "[parameters('policyParameters')]"
            }
        }
    ]
}

Pour appliquer une stratégie intégrée à votre abonnement Azure, utilisez les commandes Azure CLI suivantes :To apply a built-in policy to your Azure subscription, use the following Azure CLI commands:

# Built-in policy that does not accept parameters
definition=$(az policy definition list --query "[?displayName=='Audit resource location matches resource group location'].id" --output tsv)

az deployment 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=auditRGLocation

Pour déployer ce modèle avec PowerShell, utilisez :To deploy this template with PowerShell, use:

$definition = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -eq 'Audit resource location matches resource group location' }

New-AzDeployment `
  -Name policyassign `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policyassign.json `
  -policyDefinitionID $definition.PolicyDefinitionId `
  -policyName auditRGLocation

Pour appliquer une stratégie intégrée à votre abonnement Azure, utilisez les commandes Azure CLI suivantes :To apply a built-in policy to your Azure subscription, use the following Azure CLI commands:

# Built-in policy that accepts parameters
definition=$(az policy definition list --query "[?displayName=='Allowed locations'].id" --output tsv)

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

Pour déployer ce modèle avec PowerShell, utilisez :To deploy this template with PowerShell, use:

$definition = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -eq 'Allowed locations' }

$locations = @("westus", "westus2")
$policyParams =@{listOfAllowedLocations = @{ value = $locations}}

New-AzDeployment `
  -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

Définir et assigner une stratégieDefine and assign policy

Vous pouvez définir et assigner une stratégie dans le même modèle.You can define and assign a policy in the same template.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Authorization/policyDefinitions",
            "name": "locationpolicy",
            "apiVersion": "2018-05-01",
            "properties": {
                "policyType": "Custom",
                "parameters": {},
                "policyRule": {
                    "if": {
                        "field": "location",
                        "equals": "northeurope"
                    },
                    "then": {
                        "effect": "deny"
                    }
                }
            }
        },
        {
            "type": "Microsoft.Authorization/policyAssignments",
            "name": "location-lock",
            "apiVersion": "2018-05-01",
            "dependsOn": [
                "locationpolicy"
            ],
            "properties": {
                "scope": "[subscription().id]",
                "policyDefinitionId": "[resourceId('Microsoft.Authorization/policyDefinitions', 'locationpolicy')]"
            }
        }
    ]
}

Pour créer la définition de stratégie dans votre abonnement et l’appliquer à l’abonnement, utilisez la commande CLI suivante :To create the policy definition in your subscription, and apply it to the subscription, use the following CLI command:

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/policydefineandassign.json

Pour déployer ce modèle avec PowerShell, utilisez :To deploy this template with PowerShell, use:

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

Créer des rôlesCreate roles

Attribuer un rôle au niveau de l’abonnementAssign role at subscription

L’exemple suivant attribue un rôle à un utilisateur ou à un groupe pour l’abonnement.The following example assigns a role to a user or group for the subscription. Dans cet exemple, vous ne spécifiez pas d’étendue pour l’attribution, car elle est définie automatiquement sur l’abonnement.In this example, you don't specify a scope for the assignment because the scope is automatically set to the subscription.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "principalId": {
            "type": "string"
        },
        "roleDefinitionId": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Authorization/roleAssignments",
            "name": "[guid(parameters('principalId'), deployment().name)]",
            "apiVersion": "2017-09-01",
            "properties": {
                "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
                "principalId": "[parameters('principalId')]"
            }
        }
    ]
}

Pour affecter un groupe Active Directory à un rôle pour votre abonnement, utilisez les commandes Azure CLI suivantes :To assign an Active Directory group to a role for your subscription, use the following Azure CLI commands:

# Get ID of the role you want to assign
role=$(az role definition list --name Contributor --query [].name --output tsv)

# Get ID of the AD group to assign the role to
principalid=$(az ad group show --group demogroup --query objectId --output tsv)

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/roleassign.json \
  --parameters principalId=$principalid roleDefinitionId=$role

Pour déployer ce modèle avec PowerShell, utilisez :To deploy this template with PowerShell, use:

$role = Get-AzRoleDefinition -Name Contributor

$adgroup = Get-AzADGroup -DisplayName demogroup

New-AzDeployment `
  -Name demoRole `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/roleassign.json `
  -roleDefinitionId $role.Id `
  -principalId $adgroup.Id

Attribuer un rôle à une étendueAssign role at scope

Le modèle au niveau de l’abonnement suivant attribue un rôle à un utilisateur ou à un groupe qui a pour étendue un groupe de ressources au sein de l’abonnement.The following subscription-level template assigns a role to a user or group that is scoped to a resource group within the subscription. L’étendue doit être inférieure ou égale au niveau de déploiement.The scope must be at or below the level of deployment. Vous pouvez déployer sur un abonnement et spécifier une attribution de rôle ayant comme étendue un groupe de ressources au sein de cet abonnement.You can deploy to a subscription and specify a role assignment scoped to a resource group within that subscription. En revanche, vous ne pouvez pas déployer sur un groupe de ressources et spécifier l’abonnement comme étendue d’attribution de rôle.However, you can't deploy to a resource group and specify a role assignment scope to the subscription.

Pour attribuer le rôle dans une étendue, utilisez un déploiement imbriqué.To assign the role at a scope, use a nested deployment. Notez que le nom du groupe de ressources est spécifié à la fois dans les propriétés de la ressource de déploiement et dans la propriété d’étendue de l’attribution de rôle.Notice that the resource group name is specified both in the properties for the deployment resource and in the scope property of the role assignment.

{
    "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "parameters": {
        "principalId": {
            "type": "string"
        },
        "roleDefinitionId": {
            "type": "string"
        },
        "rgName": {
            "type": "string"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2018-05-01",
            "name": "assignRole",
            "resourceGroup": "[parameters('rgName')]",
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "type": "Microsoft.Authorization/roleAssignments",
                            "name": "[guid(parameters('principalId'), deployment().name)]",
                            "apiVersion": "2017-09-01",
                            "properties": {
                                "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
                                "principalId": "[parameters('principalId')]",
                                "scope": "[concat(subscription().id, '/resourceGroups/', parameters('rgName'))]"
                            }
                        }
                    ],
                    "outputs": {}
                }
            }
        }
    ],
    "outputs": {}
}

Pour affecter un groupe Active Directory à un rôle pour votre abonnement, utilisez les commandes Azure CLI suivantes :To assign an Active Directory group to a role for your subscription, use the following Azure CLI commands:

# Get ID of the role you want to assign
role=$(az role definition list --name Contributor --query [].name --output tsv)

# Get ID of the AD group to assign the role to
principalid=$(az ad group show --group demogroup --query objectId --output tsv)

az deployment create \
  --name demoDeployment \
  --location centralus \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/scopedRoleAssign.json \
  --parameters principalId=$principalid roleDefinitionId=$role rgName demoRg

Pour déployer ce modèle avec PowerShell, utilisez :To deploy this template with PowerShell, use:

$role = Get-AzRoleDefinition -Name Contributor

$adgroup = Get-AzADGroup -DisplayName demogroup

New-AzDeployment `
  -Name demoRole `
  -Location centralus `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/scopedRoleAssign.json `
  -roleDefinitionId $role.Id `
  -principalId $adgroup.Id `
  -rgName demoRg

Étapes suivantesNext steps