Bicep ファイルを使用したテナントのデプロイ

組織が成熟するにつれて、ポリシーまたは Azure ロールベースのアクセス制御 (Azure RBAC) を定義し、Microsoft Entra テナント全体に割り当てる必要性が生じることがあります。 テナント レベルのテンプレートを使用すると、宣言によってポリシーを適用し、グローバル レベルでロールを割り当てることができます。

トレーニング リソース

段階的なガイダンスを通じてデプロイ スコープの詳細を学習するには、「Bicep を使用してサブスクリプション、管理グループ、テナントにリソースをデプロイする」を参照してください。

サポートされているリソース

すべてのリソースの種類をテナント レベルにデプロイできるわけではありません。 このセクションでは、サポートされているリソースの種類を示します。

Azure のロールベースのアクセス制御 (Azure RBAC) では、以下を使用します。

管理グループ、サブスクリプション、またはリソース グループにデプロイする入れ子になったテンプレートでは、以下を使用します。

管理グループを作成するには、以下を使用します。

サブスクリプションを作成するには、以下を使用します。

コストを管理するには、以下を使用します。

ポータルを構成するには、以下を使用します。

組み込みのポリシー定義はテナントレベルのリソースですが、カスタム ポリシー定義をテナントにデプロイすることはできません。 組み込みのポリシー定義をリソースに割り当てる例については、「Tenantresourceid の例」を参照してください。

セット スコープ

スコープをテナントに設定するには、次のようにします。

targetScope = 'tenant'

必要なアクセス

テンプレートをデプロイするプリンシパルには、テナントのスコープでリソースを作成するためのアクセス許可が必要です。 このプリンシパルには、デプロイ アクション (Microsoft.Resources/deployments/*) を実行し、テンプレートに定義されているリソースを作成するためのアクセス許可が必要です。 たとえば、管理グループを作成するには、プリンシパルにテナントのスコープの共同作成者アクセス許可が必要です。 ロールの割り当てを作成するには、プリンシパルに所有者アクセス許可が必要です。

Microsoft Entra ID の全体管理者には、ロールを割り当てるアクセス許可が自動的に付与されるわけではありません。 テナントのスコープでテンプレートのデプロイを有効にするには、全体管理者が次の手順を実行する必要があります。

  1. 全体管理者がロールを割り当てることができるように、アカウントのアクセス権を昇格させます。 詳細については、「Azure のすべてのサブスクリプションと管理グループを管理する目的でアクセス権限を昇格させる」を参照してください。

  2. テンプレートをデプロイする必要があるプリンシパルに、所有者または共同作成者を割り当てます。

    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 テンプレートをデプロイするためのデプロイ コマンドとオプションの詳細については、以下を参照してください。

デプロイの場所と名前

テナント レベルのデプロイの場合は、デプロイの場所を指定する必要があります。 デプロイの場所は、デプロイするリソースの場所とは異なります。 デプロイの場所では、デプロイ データを格納する場所を指定します。 サブスクリプションおよび管理グループのデプロイにも場所が必要です。 リソース グループのデプロイの場合、リソース グループの場所を使用してデプロイ データを格納します。

デプロイ名を指定することも、既定のデプロイ名を使用することもできます。 既定の名前は、テンプレート ファイルの名前です。 たとえば、main.bicep という名前のファイルをデプロイすると、main という既定のデプロイ名が作成されます。

デプロイ名ごとに、場所を変更することはできません。 ある場所にデプロイを作成しようとしても、別の場所に同じ名前の既存のデプロイがあると、作成することはできません。 たとえば、centralusdeployment1 という名前のテナントのデプロイを作成した場合、後でdeployment1 という名前の別のデプロイを westus の場所に作成することはできません。 エラー コード InvalidDeploymentLocation が表示された場合は、別の名前を使用するか、その名前の以前のデプロイと同じ場所を使用してください。

デプロイのスコープ

テナントにデプロイする際には、リソースを以下にデプロイできます。

  • テナント
  • テナント内の管理グループ
  • subscriptions
  • リソース グループ

拡張リソースは、デプロイ ターゲットとは異なるターゲットにスコープ設定できます。

テンプレートをデプロイするユーザーは、特定のスコープにアクセスできる必要があります。

このセクションでは、異なるスコープを指定する方法について説明します。 これらの異なるスコープを 1 つのテンプレートで結合することができます。

テナントへのスコープ

Bicep ファイルで定義されたリソースは、テナントに適用されます。

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-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@2021-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
  }
}

次のステップ

他のスコープについて確認するには、以下を参照してください。