組織が成熟するにつれて、ポリシーまたは Azure ロールベースのアクセス制御 (Azure RBAC) を定義し、Microsoft Entra テナント全体に割り当てる必要性が生じることがあります。 テナント レベルのテンプレートを使用すると、宣言によってポリシーを適用し、グローバル レベルでロールを割り当てることができます。
学習内容:
- テナント スコープでリソースをデプロイする方法
- 必要なアクセス許可とセットアップ手順
- テナント レベルのリソースのデプロイ コマンド
- 管理グループとロールの割り当てを作成する例
サポートされているリソース
すべてのリソースの種類をテナント レベルにデプロイできるわけではありません。 このセクションでは、サポートされているリソースの種類を示します。
Azure のロールベースのアクセス制御 (Azure RBAC) では、以下を使用します。
管理グループ、サブスクリプション、またはリソース グループにデプロイする入れ子になったテンプレートでは、以下を使用します。
管理グループを作成するには、以下を使用します。
サブスクリプションを作成するには、以下を使用します。
コストを管理するには、以下を使用します。
ポータルを構成するには、以下を使用します。
組み込みのポリシー定義はテナントレベルのリソースですが、カスタム ポリシー定義をテナントにデプロイすることはできません。 組み込みのポリシー定義をリソースに割り当てる例については、「Tenantresourceid の例」を参照してください。
セット スコープ
スコープをテナントに設定するには、次のようにします。
targetScope = 'tenant'
必要なアクセス
テンプレートをデプロイするプリンシパルには、テナントのスコープでリソースを作成するためのアクセス許可が必要です。 このプリンシパルには、デプロイ アクション (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-file main.bicep
ARM テンプレートをデプロイするためのデプロイ コマンドとオプションの詳細については、以下を参照してください。
- ARM テンプレートと Azure CLI でリソースをデプロイする
- ARM テンプレートと Azure PowerShell を使用したリソースのデプロイ
- Cloud Shell から ARM テンプレートをデプロイする
デプロイの場所と名前
テナント レベルのデプロイの場合は、デプロイの場所を指定する必要があります。 デプロイの場所は、デプロイするリソースの場所とは異なります。 デプロイの場所では、デプロイ データを格納する場所を指定します。 サブスクリプションおよび管理グループのデプロイにも場所が必要です。 リソース グループのデプロイの場合、リソース グループの場所を使用してデプロイ データを格納します。
デプロイ名を指定することも、既定のデプロイ名を使用することもできます。 既定の名前は、テンプレート ファイルの名前です。 たとえば、main.bicep という名前のファイルをデプロイすると、main という既定のデプロイ名が作成されます。
デプロイ名ごとに、場所を変更することはできません。 ある場所にデプロイを作成しようとしても、別の場所に同じ名前の既存のデプロイがあると、作成することはできません。 たとえば、centralus で deployment1 という名前のテナントのデプロイを作成した場合、後でdeployment1 という名前の別のデプロイを westus の場所に作成することはできません。 エラー コード InvalidDeploymentLocation が表示された場合は、別の名前を使用するか、その名前の以前のデプロイと同じ場所を使用してください。
デプロイのスコープ
Bicep ファイルでは、resource キーワードで宣言されているすべてのリソースを、デプロイと同じスコープでデプロイする必要があります。 テナントのデプロイの場合、Bicep ファイル内のすべての resource 宣言を、同じテナントにデプロイするか、デプロイと同じテナント内でリソースの子または拡張リソースとしてデプロイする必要があります。
ただし、この制限は、existing リソースには適用されません。 既存のリソースは、デプロイとは異なるスコープで参照できます。
1 つのデプロイ内の複数のスコープでリソースをデプロイするには、モジュールを使用します。 モジュールをデプロイすると、"入れ子になったデプロイ" がトリガーされ、さまざまなスコープをターゲットにすることができます。 親 Bicep ファイルをデプロイするユーザーは、それらのスコープでデプロイを開始するために必要なアクセス許可を持っている必要があります。
テナント スコープの Bicep ファイル内から、次のスコープでリソースをデプロイできます。
テナントへのスコープ
Bicep ファイルで定義されたリソースは、テナントに適用されます。
targetScope = 'tenant'
// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2023-04-01' = {
...
}
管理グループへのスコープ
テナント内の管理グループを対象とするには、モジュールを追加します。
managementGroup 関数を使用して、scope プロパティを設定します。 管理グループ名を指定します。
targetScope = 'tenant'
param managementGroupName string
// create resources at management group level
module 'module.bicep' = {
name: 'deployToMG'
scope: managementGroup(managementGroupName)
}
サブスクリプションへのスコープ
テナント内のサブスクリプションを対象とするには、モジュールを追加します。
subscription 関数を使用して、scope プロパティを設定します。 サブスクリプション ID を入力します。
targetScope = 'tenant'
param subscriptionID string
// create resources at subscription level
module 'module.bicep' = {
name: 'deployToSub'
scope: subscription(subscriptionID)
}
リソース グループへのスコープ
テナント内のリソース グループを対象とするには、モジュールを追加します。
resourceGroup 関数を使用して、scope プロパティを設定します。 サブスクリプション ID とリソース グループ名を指定します。
targetScope = 'tenant'
param resourceGroupName string
param subscriptionID string
// create resources at resource group level
module 'module.bicep' = {
name: 'deployToRG'
scope: resourceGroup(subscriptionID, resourceGroupName)
}
管理グループの作成
次のテンプレートを使うと、管理グループを作成できます。
targetScope = 'tenant'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource mgName_resource 'Microsoft.Management/managementGroups@2023-04-01' = {
name: mgName
properties: {}
}
テナントにデプロイするためのアクセス許可がアカウントにない場合でも、別のスコープにデプロイすることによって管理グループを作成できます。 詳細については、「管理グループ」を参照してください。
ロールを割り当てる
次のテンプレートを使うと、テナントのスコープでロールを割り当てることができます。
targetScope = 'tenant'
@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string
@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
var roleAssignmentName = guid(principalId, roleDefinitionId)
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: roleAssignmentName
properties: {
roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
principalId: principalId
}
}
次のステップ
テナントのデプロイについて理解したら、次の関連する展開スコープを確認します。
- リソース グループのデプロイ - 特定のリソース グループにリソースをデプロイする
- サブスクリプションのデプロイ - サブスクリプション レベルでリソースをデプロイする
- 管理グループのデプロイ - 管理グループへのリソースのデプロイ
実践的な演習については、「 Bicep を使用してサブスクリプション、管理グループ、テナントにリソースをデプロイする」というトレーニング モジュールを試してください。