ARM 템플릿을 사용하여 테넌트 배포
조직이 성숙되면 Microsoft Entra 테넌트 전체에서 정책 또는 Azure RBAC(Azure 역할 기반 액세스 제어)를 정의하거나 할당해야 할 수 있습니다. 테넌트 수준 템플릿을 사용하면 선언적으로 정책을 적용하고 전역 수준에서 역할을 할당할 수 있습니다.
지원되는 리소스
모든 리소스 종류를 테넌트 수준에 배포할 수 있는 것은 아닙니다. 이 섹션에서는 지원되는 리소스 종류를 나열합니다.
Azure RBAC(Azure 역할 기반 액세스 제어)의 경우 다음을 사용합니다.
관리 그룹, 구독 또는 리소스 그룹에 배포하는 중첩된 템플릿의 경우 다음을 사용합니다.
관리 그룹을 만들려면 다음을 사용합니다.
구독을 만들려면 다음을 사용합니다.
비용을 관리하려면 다음을 사용합니다.
포털을 구성하려면 다음을 사용합니다.
기본 제공 정책 정의는 테넌트 수준 리소스이지만 테넌트에서 사용자 지정 정책 정의를 배포할 수는 없습니다. 리소스에 기본 제공 정책 정의를 할당하는 예제는 tenantResourceId 예제를 참조하세요.
스키마
테넌트 배포에 사용하는 스키마는 리소스 그룹 배포에 대한 스키마와 다릅니다.
템플릿의 경우 다음을 사용합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
...
}
매개 변수 파일에 대한 스키마는 모든 배포 범위에 대해 동일합니다. 매개 변수 파일의 경우 다음을 사용합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
필요한 액세스
템플릿을 배포하는 주체는 테넌트 범위에서 리소스를 만들 수 있는 권한이 있어야 합니다. 주체는 배포 작업(Microsoft.Resources/deployments/*
)을 실행하고 템플릿에 정의된 리소스를 만들 수 있는 권한이 있어야 합니다. 예를 들어 관리 그룹을 만들려면 주체는 테넌트 범위에서 기여자 권한이 있어야 합니다. 역할 할당을 만들려면 주체에 소유자 권한이 있어야 합니다.
Microsoft Entra ID의 전역 관리자에게 역할을 할당할 수 있는 권한이 자동으로 생기지는 않습니다. 테넌트 범위에서 템플릿 배포를 사용하도록 설정하려면 전역 관리자가 다음 단계를 수행해야 합니다.
계정 액세스 권한을 승격하여 전역 관리자가 역할을 할당할 수 있도록 합니다. 자세한 내용은 모든 Azure 구독 및 관리 그룹을 관리할 수 있도록 액세스 권한 상승을 참조하세요.
템플릿을 배포해야 하는 주체에 소유자 또는 기여자를 할당합니다.
New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
이제 주체는 템플릿을 배포하는 데 필요한 권한이 있습니다.
배포 명령
테넌트 배포에 대한 명령은 리소스 그룹 배포에 대한 명령과 다릅니다.
Azure CLI의 경우 az deployment tenant create를 사용합니다.
az deployment tenant create \
--name demoTenantDeployment \
--location WestUS \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"
ARM 템플릿 배포를 위한 배포 명령 및 옵션에 대한 자세한 내용은 다음을 참조하세요.
- ARM 템플릿 및 Azure Portal을 사용하여 리소스 배포
- ARM 템플릿 및 Azure CLI를 사용하여 리소스 배포
- ARM 템플릿 및 Azure PowerShell을 사용하여 리소스 배포
- ARM 템플릿 및 Azure Resource Manager REST API를 사용하여 리소스 배포
- 배포 단추를 사용하여 GitHub 리포지토리에서 템플릿 배포
- Cloud Shell에서 ARM 템플릿 배포
배포 위치 및 이름
테넌트 수준 배포의 경우 배포할 위치를 제공해야 합니다. 배포 위치는 배포하는 리소스의 위치와는 별개입니다. 배포 위치는 배포 데이터를 저장할 위치를 지정합니다. 구독 및 관리 그룹 배포에도 위치가 필요합니다. 리소스 그룹 배포의 경우 배포 데이터를 저장하는 데 리소스 그룹의 위치가 사용됩니다.
배포 이름을 제공하거나 기본 배포 이름을 사용할 수 있습니다. 기본 이름은 템플릿 파일의 이름입니다. 예를 들어 azuredeploy.json이라는 템플릿을 배포하면 azuredeploy라는 기본 배포 이름을 만듭니다.
각 배포 이름의 경우 위치는 변경할 수 없습니다. 다른 위치의 이름이 동일한 기존 배포가 있는 경우 하나의 위치에서 배포를 만들 수 없습니다. 예를 들어 centralus에서 이름이 deployment1인 테넌트 배포를 만들 경우 나중에 이름은 deployment1이지만 위치는 westus인 다른 배포를 만들 수 없습니다. 오류 코드 InvalidDeploymentLocation
을 수신하게 되면 해당 이름의 이전 배포와 다른 이름이나 동일한 위치를 사용합니다.
배포 범위
테넌트에 배포하는 경우 리소스를 다음에 배포할 수 있습니다.
- 테넌트
- 테넌트 내의 관리 그룹
- 구독
- resource groups
금지된 유일한 범위 전환은 리소스 그룹에서 관리 그룹으로 또는 구독에서 관리 그룹으로 발생합니다.
확장 리소스의 범위를 배포 대상과 다른 대상으로 지정할 수 있습니다.
템플릿을 배포하는 사용자가 지정된 범위에 액세스할 수 있어야 합니다.
이 섹션에서는 다양한 범위를 지정하는 방법을 보여 줍니다. 단일 템플릿에서 이러한 여러 범위를 결합할 수 있습니다.
테넌트로 범위 지정
템플릿의 리소스 섹션 내에 정의된 리소스는 테넌트에 적용됩니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
tenant-resources
],
"outputs": {}
}
관리 그룹에 대한 범위
테넌트 내의 관리 그룹을 대상으로 지정하려면 중첩된 배포를 추가하고 scope
속성을 지정합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string"
}
},
"variables": {
"mgId": "[concat('Microsoft.Management/managementGroups/', parameters('mgName'))]"
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "nestedMG",
"scope": "[variables('mgId')]",
"location": "eastus",
"properties": {
"mode": "Incremental",
"template": {
management-group-resources
}
}
}
],
"outputs": {}
}
구독으로 범위 지정
테넌트 내의 구독을 대상으로 지정할 수도 있습니다. 템플릿을 배포하는 사용자가 지정된 범위에 액세스할 수 있어야 합니다.
테넌트 내의 구독을 대상으로 지정하려면 중첩된 배포 및 subscriptionId
속성을 사용합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedSub",
"location": "westus2",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
subscription-resources
}
]
}
}
}
]
}
리소스 그룹에 대한 범위
테넌트 내의 리소스 그룹을 대상으로 지정할 수도 있습니다. 템플릿을 배포하는 사용자가 지정된 범위에 액세스할 수 있어야 합니다.
테넌트 내의 리소스 그룹을 대상으로 지정하려면 중첩된 배포를 사용합니다. subscriptionId
및 resourceGroup
속성을 설정합니다. 중첩된 배포는 리소스 그룹의 위치에 배포되므로 위치를 설정하지 마세요.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedRGDeploy",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
resource-group-resources
}
]
}
}
}
]
}
관리 그룹 만들기
다음 템플릿은 관리 그룹을 만듭니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2020-02-01",
"name": "[parameters('mgName')]",
"properties": {
}
}
]
}
계정이 테넌트에 배포할 수 있는 권한이 없는 경우에도 다른 범위에 배포하여 관리 그룹을 만들 수 있습니다. 자세한 내용은 관리 그룹을 참조하세요.
역할 할당
다음 템플릿은 테넌트 범위에서 역할을 할당합니다.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "17107802581699825924"
}
},
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "principalId if the user that will be given contributor access to the tenant"
}
},
"roleDefinitionId": {
"type": "string",
"defaultValue": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
"metadata": {
"description": "roleDefinition for the assignment - default is owner"
}
}
},
"variables": {
"roleAssignmentName": "[guid('/', parameters('principalId'), parameters('roleDefinitionId'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-03-01-preview",
"name": "[variables('roleAssignmentName')]",
"properties": {
"roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
다음 단계
- 역할 할당에 대해 자세히 알아보려면 Azure Resource Manager 템플릿을 사용하여 Azure 역할 할당을 참조하세요.
- 구독 수준 또는 관리 그룹 수준에서 템플릿을 배포할 수도 있습니다.