Bicep を使用して Azure カスタム ロールを作成または更新する

Azure の組み込みロールが組織の特定のニーズを満たさない場合は、独自のカスタム ロールを作成することができます。 この記事では、Bicep を使用してカスタム ロールを作成または更新する方法について説明します。

Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep により、Azure のコード ソリューションとしてのインフラストラクチャに最適な作成エクスペリエンスが実現します。

カスタム ロールを作成するには、ロール名、ロールのアクセス許可、およびロールを使用できる場所を指定します。 この記事では、サブスクリプション スコープ以下で割り当てることができる、リソースのアクセス許可を持つ Custom Role - RG Reader という名前のロールを作成します。

前提条件

カスタム ロールを作成するには、ユーザー アクセス管理者など、カスタム ロールを作成するためのアクセス許可が必要です。

また、アクティブな Azure サブスクリプションも必要となります。 まだ持っていない場合は、開始する前に無料アカウントを作成してください。

Bicep ファイルを確認する

この記事で使用されている Bicep ファイルは Azure クイックスタート テンプレートからのものです。 この Bicep ファイルには、4 つのパラメーターと 1 つのリソース セクションがあります。 4 つのパラメーターは次のとおりです。

  • 既定値が ["Microsoft.Resources/subscriptions/resourceGroups/read"] であるアクションの配列。
  • 空の既定値が指定された notActions の配列。
  • 既定値が Custom Role - RG Reader であるロールの名前。
  • 既定値が Subscription Level Deployment of a Role Definition であるロールの説明。

このカスタム ロールを割り当てることができるスコープは、現在のサブスクリプションに設定されます。

カスタム ロールには一意の ID が必要です。 ID は、guid() 関数を使用して生成できます。 カスタム ロールにはテナントの一意の表示名も必要なので、ロール名を guid() 関数のパラメーターとして使用して、決定論的 GUID を作成することができます。 決定論的 GUID は、後で同じ Bicep ファイルを使用して、カスタム ロールを更新する必要がある場合に便利です。

targetScope = 'subscription'

@description('Array of actions for the roleDefinition')
param actions array = [
  'Microsoft.Resources/subscriptions/resourceGroups/read'
]

@description('Array of notActions for the roleDefinition')
param notActions array = []

@description('Friendly name of the role definition')
param roleName string = 'Custom Role - RG Reader'

@description('Detailed description of the role definition')
param roleDescription string = 'Subscription Level Deployment of a Role Definition'

var roleDefName = guid(roleName)

resource roleDef 'Microsoft.Authorization/roleDefinitions@2022-04-01' = {
  name: roleDefName
  properties: {
    roleName: roleName
    description: roleDescription
    type: 'customRole'
    permissions: [
      {
        actions: actions
        notActions: notActions
      }
    ]
    assignableScopes: [
      subscription().id
    ]
  }
}

Bicep ファイルに定義されているリソースは以下です。

Bicep ファイルをデプロイする

  1. Bicep ファイルを main.bicep としてローカル コンピューターに保存します。

  2. roleDefinition のアクションを使用して、myActions という名前の変数を作成します。

    $myActions='["Microsoft.Resources/subscriptions/resourceGroups/read"]'
    
  3. Azure CLI または Azure PowerShell のどちらかを使用して Bicep ファイルをデプロイします。

    az deployment sub create --location eastus --name customRole --template-file ./main.bicep --parameters actions=$myActions
    

デプロイが完了すると、デプロイが成功したことを示すメッセージが表示されます。

デプロイされているリソースを確認する

Azure portal、Azure CLI、Azure PowerShell のいずれかを使用して、カスタム ロールが作成されたことを確認します。

az role definition list --name "Custom Role - RG Reader"

カスタム ロールの更新

カスタム ロールを作成する場合と同じく、Bicep を使用して既存のカスタム ロールを更新できます。 カスタム ロールを更新するには、更新するロールを指定する必要があります。 前に決定論的な一意のロール ID を持つカスタム ロールを Bicep に作成した場合は、表示名を使用するだけで、同じ Bicep ファイルを使用して、カスタム ロールを指定することができます。

  1. 更新されたアクションを指定します。

    $myActions='["Microsoft.Resources/resources/read","Microsoft.Resources/subscriptions/resourceGroups/read"]'
    
  2. Azure CLI または Azure PowerShell を使用して、カスタム ロールを更新します。

    az deployment sub create --location eastus --name customrole --template-file ./main.bicep --parameters actions=$myActions roleName="Custom Role - RG Reader"
    

    Note

    更新されたカスタム ロールが反映されるまでに数分かかる場合があります。

リソースをクリーンアップする

不要になったら、Azure portal、Azure CLI、Azure PowerShell のいずれかを使用してカスタム ロールを削除します。

az role definition delete --name "Custom Role - RG Reader"

次のステップ