Penyebaran penyewa dengan templat ARM
Saat organisasi Anda dewasa, Anda mungkin perlu menentukan dan menetapkan kebijakan atau kontrol akses berbasis peran Azure (Azure RBAC) di seluruh penyewa Microsoft Entra Anda. Dengan templat tingkat penyewa, Anda dapat menerapkan kebijakan secara deklaratif dan menetapkan peran di tingkat global.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat penyebaran penyewa.
Sumber daya yang didukung
Tidak semua jenis sumber daya dapat disebarkan ke tingkat penyewa. Bagian ini mencantumkan jenis sumber daya mana yang didukung.
Untuk kontrol akses berbasis peran Azure (Azure RBAC), gunakan:
Untuk templat berlapis yang disebarkan ke grup manajemen, langganan, atau grup sumber daya, gunakan:
Untuk membuat grup manajemen, gunakan:
Untuk membuat langganan, gunakan:
Untuk mengelola biaya, gunakan:
Untuk mengonfigurasi portal, gunakan:
Definisi kebijakan bawaan adalah sumber daya tingkat penyewa, tetapi Anda tidak dapat meneyebarkan definisi kebijakan kustom di penyewa. Untuk contoh penetapan definisi kebijakan bawaan ke sumber daya, lihat contoh tenantResourceId.
Skema
Skema yang Anda gunakan untuk penyebaran tingkat langganan berbeda dengan skema untuk penyebaran grup sumber daya.
Untuk templat, gunakan:
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
...
}
Skema untuk file parameter sama untuk semua cakupan penyebaran. Untuk file parameter, gunakan:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Akses yang diperlukan
Utama yang menyebarkan templat harus memiliki izin untuk membuat sumber daya di lingkup penyewa. Utama harus memiliki izin untuk menjalankan tindakan penyebaran (Microsoft.Resources/deployments/*
) dan untuk membuat sumber daya yang ditentukan dalam template. Misalnya, untuk membuat grup manajemen, utama harus memiliki izin Kontributor di lingkup penyewa. Untuk membuat tugas peran, utama harus memiliki izin Pemilik.
Administrator Global untuk ID Microsoft Entra tidak secara otomatis memiliki izin untuk menetapkan peran. Untuk mengaktifkan penyebaran templat di cakupan penyewa, Administrator Global harus melakukan langkah-langkah berikut:
Tingkatkan akses akun sehingga Administrator Global dapat menetapkan peran. Untuk informasi lebih lanjut, lihat Tingkatkan akses untuk mengelola semua langganan Azure dan grup manajemen.
Tetapkan Pemilik atau Kontributor ke utama yang perlu menyebarkan templat.
New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
Utama sekarang memiliki izin yang diperlukan untuk menyebarkan templat.
Perintah penyebaran
Perintah untuk penyebaran penyewa berbeda dari perintah untuk penyebaran grup sumber daya.
Untuk Azure CLI, gunakan az deployment group 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"
Untuk informasi selengkapnya terkait perintah penyebaran dan opsi untuk menyebarkan templat ARM, lihat:
- Menyebarkan sumber daya dengan templat ARM dan portal Microsoft Azure
- Menyebarkan sumber daya dengan templat ARM dan Azure CLI
- Menyebarkan sumber daya dengan templat ARM dan Azure PowerShell
- Menyebarkan sumber daya dengan templat ARM dan REST API Azure Resource Manager
- Menggunakan tombol penyebaran untuk menyebarkan templat dari repositori GitHub
- Menyebarkan templat ARM dari Cloud Shell
Lokasi dan nama penyebaran
Untuk penyebaran tingkat penyewa, Anda harus menyediakan lokasi untuk penyebaran. Lokasi penyebaran terpisah dari lokasi sumber daya yang Anda sebarkan. Lokasi penyebaran menentukan tempat menyimpan data penyebaran. Penyebaran Langganan dan grup manajemen juga memerlukan lokasi. Untuk penyebaran grup sumber daya, lokasi grup sumber daya digunakan untuk menyimpan data penyebaran.
Anda dapat memberikan nama untuk penyebaran atau menggunakan nama penyebaran default. Nama default adalah nama file templat. Misalnya, menyebarkan templat bernama azuredeploy.json akan membuat nama penyebaran azuredeploy secara default.
Untuk setiap nama penyebaran, lokasi tidak dapat diubah. Anda tidak dapat membuat penyebaran di satu lokasi saat ada penyebaran yang ada dengan nama yang sama di lokasi lain. Misalnya, jika Anda membuat penyebaran penyewa dengan nama deployment1 di centralus, Anda nantinya tidak dapat membuat penyebaran lain dengan nama deployment1 tetapi lokasinya di westus. Jika Anda mendapatkan kode kesalahan InvalidDeploymentLocation
, gunakan nama yang berbeda atau lokasi yang sama dengan penyebaran sebelumnya untuk nama tersebut.
Cakupan penyebaran
Saat menyebarkan ke penyewa, Anda dapat menyebarkan sumber daya untuk:
- penyewa
- grup manajemen dalam penyewa
- langganan
- grup sumber daya
Satu-satunya transisi cakupan yang dilarang terjadi dari Grup Sumber Daya ke Grup Manajemen, atau dari Langganan ke Grup Manajemen.
Sumber daya ekstensi dapat dicakup ke target yang berbeda dari target penyebaran.
Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Bagian ini memperlihatkan cara menentukan cakupan yang berbeda. Anda dapat menggabungkan cakupan yang berbeda ini dalam templat tunggal.
Cakupan ke penyewa
Sumber daya yang ditentukan dalam bagian sumber daya templat akan diterapkan ke penyewa.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
tenant-resources
],
"outputs": {}
}
Cakupan ke grup manajemen
Untuk menargetkan grup manajemen dalam penyewa, tambahkan penyebaran berlapis dan tentukan properti 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": {}
}
Cakupan ke langganan
Anda juga dapat menargetkan langganan dalam penyewa. Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Untuk menargetkan langganan dalam penyewa, tambahkan penyebaran berlapis dan properti 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
}
]
}
}
}
]
}
Cakupan ke grup sumber daya
Anda juga dapat menargetkan grup sumber daya dalam penyewa. Pengguna yang menyebarkan templat harus memiliki akses ke cakupan yang ditentukan.
Untuk menargetkan grup sumber daya dalam penyewa, gunakan penyebaran berlapis. Atur properti subscriptionId
dan resourceGroup
. Jangan atur lokasi untuk penyebaran bersarang karena penyebaran dilakukan di lokasi grup sumber daya.
{
"$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
}
]
}
}
}
]
}
Membuat grup manajemen
Templat berikut ini akan membuat grup manajemen.
{
"$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": {
}
}
]
}
Jika akun Anda tidak memiliki izin untuk melakukan penyebaran ke penyewa, Anda masih dapat membuat grup manajemen dengan menggunakan cakupan lain. Untuk informasi selengkapnya, lihat Grup manajemen.
Menetapkan peran
Templat berikut menetapkan peran di cakupan penyewa.
{
"$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')]"
}
}
]
}
Langkah berikutnya
- Untuk mempelajari cara menetapkan peran, lihat Menetapkan peran Azure menggunakan templat Azure Resource Manager.
- Anda juga dapat menggunakan templat di tingkat langganan atau tingkat grup manajemen.