ユーザーへ Azure VM の起動および停止のみを許可する方法

Arika Okubo

こんにちは。Azure サポートチームの小久保です。

Azure では、ロールベースのアクセス制御 (RBAC) という機能を使用し、アクセスできるリソースを制限したり、リソースへの操作を制限することが可能です。

[参考]

ロールベースのアクセス制御 (RBAC) とは

https://azure.microsoft.com/ja-jp/documentation/articles/role-based-access-control-what-is/

今回は RBAC を使用し、リソース マネージャ モデル (ARM) VM の起動 / 停止だけをユーザーに許可する方法についてご案内させていただきます。

本ご要望は、以下の 2 つのパターンが考えられます。それぞれの手順について、ご案内させていただきますので、ご要件に合わせて、いずれかの手順をご確認いただければと思います。

  1. ユーザーに "特定の" VM の起動 / 停止だけ行わせたい。
  2. ユーザーに "サブスクリプション内のすべての" VM の起動 / 停止だけ行わせたい。

※ 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

1. ユーザーに "特定 VM" の起動 / 停止だけを許可する手順


Azure ポータルで VM を 1 つ選択し、アクセス制御 (IAM) のブレードでユーザーにロールを割り当てるだけです。

理由は、後述の「*** 解説 ***」に記載いたしますが、割り当てるロールは「DevTest Labs ユーザー (DevTest Labs User)」が良いのではないかと思います。

*** 解説 ***

Azure ポータルにて、VM の起動 / 停止を行うためには、以下の操作が Actions プロパティに含まれるロールをユーザーに割り当てる必要があります。

上記の操作が Actions プロパティに含まれる組み込み (既存の) ロールは、以下の通りです。

所有者 (Owner)

共同作成者 (Contributor)

仮想マシン共同作成者 (Virtual Machine Contributor)

DevTest Labs ユーザー (DevTest Labs User)

[参考]

Azure の組み込みロール

https://docs.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles

VM のスコープで RBAC の設定を行っている為、該当の VM に対する操作のみが可能であり、その他リソースへのアクセス権限がないので、基本的に構成変更は行えません。

例えば、VM に NIC を追加しようとしても、NIC の新規作成も、既存の NIC の参照もできません。

VM の起動 / 停止だけを行わせたいのであれば、VM に対して行える操作が最も限定的な「DevTest Labs ユーザー (DevTest Labs User)」が一番適しているのではないかと思われます。

2. ユーザーに "サブスクリプション内のすべての" VM の起動と停止だけを許可する手順


Azure ポータルでサブスクリプションを選択し、アクセス制御 (IAM) のブレードでユーザーにロールを割り当てます。

サブスクリプションのスコープで、「DevTest Labs ユーザー (DevTest Labs User)」ロールをユーザーに割り当てた場合、VM 以外のリソースへのアクセスが可能となります。組み込みロールでは要件を満たせない (今回の場合は、VM の起動 / 停止だけを行わせたい) 場合には、独自のカスタムロールを作成する必要があります。

*** 解説 ***

RBAC は、サブスクリプション、リソース グループ、各リソースのそれぞれのスコープで設定が可能です。

Azure のリソースは、サブスクリプション配下のリソース グループ内に作成されます。

Azure PowerShell でリソースを管理する - スコープを理解する

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/powershell-azure-resource-manager#understand-scope

その為、サブスクリプションのスコープで「DevTest Labs ユーザー (DevTest Labs User)」のロールを適用しますと、このロールで許可されている操作 (既存の NIC の読み取り、VM を NIC へ接続するなど) が可能となります。

ご参考までに「DevTest Labs ユーザー (DevTest Labs User)」のロールは以下の通りです。

※ 上述「Azure の組み込みロール」のドキュメントより、一部抜粋

カスタムロールを作成し、Actions プロパティで、許可したい操作だけを明示的に定義することにより、ご要望に沿った (今回の場合、VM の起動と停止だけを行える) ロールの作成が可能となります。

カスタムロールの作成方法については、以下ブログをご参照ください。

[参考]

ロールベースのアクセス制御 (RBAC) の設定 – カスタムロールの使用

https://blogs.technet.microsoft.com/jpaztech/2016/10/12/rbac-custom-role/

カスタムロールの定義サンプル

※ <XXX> 部分は環境に応じて変更してご利用ください。

{

"Name": "<カスタムロール名>",

"IsCustom": true,

"Description": "<カスタムロールの説明>",

"Actions": [

"Microsoft.Compute/virtualMachines/read"

,"Microsoft.Compute/VirtualMachines/start/action"

,"Microsoft.Compute/virtualMachines/deallocate/action"

,"Microsoft.Compute/virtualMachines/restart/action"

],

"NotActions": [

],

"AssignableScopes": [

"/subscriptions/<サブスクリプション ID>"

]

}

※ 上記のカスタムロールを、特定のリソース グループで使用したい場合

AssignableScopes プロパティに、以下を指定します。

"/subscriptions/<サブスクリプション ID>/resourcegroups/<リソース グループ名>"

また、リソース グループやリソース グループ内のリソースの読み取りを許可する為に、Actions プロパティには、以下を指定します。

"Microsoft.Resources/subscriptions/resourceGroups/read"

"Microsoft.Resources/subscriptions/resourceGroups/resources/read"