▶️

特定のリソースグループ内のVMのみ起動停止できるカスタムロール

2025/01/05に公開

はじめに

以前、VMの起動停止権限のロールを作成する記事を作成しました。

https://zenn.dev/arbr/articles/830ec0fbee620b

上記記事ではVM単位で指定していましたが、今回はリソースグループを指定して、その内部のVMを起動停止できるようなカスタムロールを作りました。

概要

  • 起動停止のポリシーを作り、ユーザに割り付けします
    • スコープにはリソースグループ(RG)のリソースIDを指定
      • 今回の例は、RGは一つ

やってみた

構成

構成は以下のように作りました。同じサブネット内に4台のVMを作り、2つのRGに分けました。

片方のRGのみ、起動停止権限を持つロールを作ります。

作ったVMは大体以下の内容です。

コード

コードは以下になります。

create_startstoprg.bicep
targetScope = 'subscription'

param targetRg string

@description('Array of Scope for the roleDefinition')
var assignableScopes = split(targetRg,'')

@description('extract RG name')
var rgName = last(split(targetRg,'/'))

@description('Friendly name of the role definition')
var roleName = 'Custom Role - Start Stop ${rgName}'

@description('Detailed description of the role definition')
var roleDescription = 'Role for starting resources in Resource Group ${rgName}'

var roleDefName = guid(roleName)

param actions array = [
  'Microsoft.Compute/virtualMachines/read'
  'Microsoft.Compute/virtualMachines/start/action'
  'Microsoft.Compute/virtualMachines/deallocate/action'
]

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

上記ファイルを引数に、az deploymentコマンドで作成します。

az deployment sub create \
  --name SampleSubDeployment \
  --location japaneast \
  --template-file create_startstoprg.bicep \
  --parameters targetRg='【RGのリソースID】'

RGのリソースIDは、コンソールからプロパティで確認できます。

ユーザへの割り当て方は、以前の記事を参考にしてください。

操作

Administratorで見ると、4つのVMが確認できます。

権限を割り当てたユーザで見ると、2つのVMが確認できます。

目的であった起動も終了も可能です。

おわりに

今回は、RG内のVMを起動停止できるカスタムロールを作ってみました。
RGは、プロジェクトや管理部署など、意味のあるグループで作ることが多いかと思います。以前のようにVM単位より、RG単位で権限付与の方が使い勝手が良いと思います。

この記事がどなたかのお役に立ちましたら幸いです。

Discussion