▶️

Azureにて、特定のVMのみ起動停止できるカスタムロール

2024/05/12に公開

はじめに

VMを貸し出すという運用を行っていると、VMの起動停止だけできるユーザーを渡すということがあるかと思います。

それをAzureのVMで実現するポリシーを作ってみました。

概要

  • 起動停止のポリシーを作り、ユーザに割り付けします
    • スコープには対象VMのリソースIDを指定
    • AWSとは異なり、タグなどで判別することはできない模様

参考

https://jpaztech.github.io/blog/vm/rbac-vm-start-stop-restart/

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/custom-roles-template

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/custom-roles-bicep?tabs=CLI

やってみた

VMのリソースID取得

カスタムロールのスコープに設定するため、VMのリソースIDを取得します。

カスタムロール作成

以下のBicepのテンプレートで、カスタムロールを作成します。

create_startstopvm.bicep
targetScope = 'resourceGroup'

@description('Array of Scope for the roleDefinition')
param assignableScopes array = [
  '[先に取得したVMのリソースID]'
]

@description('Array of actions for the roleDefinition')
param actions array = [
  'Microsoft.Compute/virtualMachines/read'
  'Microsoft.Compute/virtualMachines/start/action'
  'Microsoft.Compute/virtualMachines/deallocate/action'
]

@description('Friendly name of the role definition')
param roleName string = 'Custom Role - Start Stop 001'

@description('Detailed description of the role definition')
param roleDescription string = 'ResourceGroup 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
      }
    ]
    assignableScopes: assignableScopes
  }
}

ロールをユーザに割り当て

作成したカスタムロールをユーザに割り当てます。ロールのスコープがVMなので、VMの設定画面から操作します。

カスタムロールでフィルタすると、作成したロールが確認できます

紐づけるユーザを指定します。

操作

ロールを割り当てたユーザでサインインし、VMの画面に遷移します。

開始/停止 でVMの起動停止ができることを確認します。

アクションの許可がされていない再起動を実行すると、エラーになります。

おわりに

今回は特定のVMのみ起動停止できるカスタムロールを作成しました。
AWSと異なり、特定のタグに一致するVMのみ操作、のような設定は出来なそうでした。
複数のVMを扱う場合は、一つずつスコープに定義するか、対象のVMのみ存在するリソースグループ作成してスコープにする、などになりそうです。

この記事がどなたかのお役に立てれば幸いです。

Discussion