ユーザーへ Azure VM の起動および停止のみを許可する方法
こんにちは。Azure サポートチームの小久保です。
Azure では、ロールベースのアクセス制御 (RBAC) という機能を使用し、アクセスできるリソースを制限したり、リソースへの操作を制限することが可能です。
[参考]
ロールベースのアクセス制御 (RBAC) とは
https://azure.microsoft.com/ja-jp/documentation/articles/role-based-access-control-what-is/
今回は RBAC を使用し、リソース マネージャ モデル (ARM) VM の起動 / 停止だけをユーザーに許可する方法についてご案内させていただきます。
本ご要望は、以下の 2 つのパターンが考えられます。それぞれの手順について、ご案内させていただきますので、ご要件に合わせて、いずれかの手順をご確認いただければと思います。
- ユーザーに "特定の" VM の起動 / 停止だけ行わせたい。
- ユーザーに "サブスクリプション内のすべての" VM の起動 / 停止だけ行わせたい。
※ 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
1. ユーザーに "特定 VM" の起動 / 停止だけを許可する手順
Azure ポータルで VM を 1 つ選択し、アクセス制御 (IAM) のブレードでユーザーにロールを割り当てるだけです。
理由は、後述の「*** 解説 ***」に記載いたしますが、割り当てるロールは「DevTest Labs ユーザー (DevTest Labs User)」が良いのではないかと思います。
*** 解説 ***
Azure ポータルにて、VM の起動 / 停止を行うためには、以下の操作が Actions プロパティに含まれるロールをユーザーに割り当てる必要があります。
- Microsoft.Compute/virtualMachines/read仮想マシンのプロパティの取得
- Microsoft.Compute/virtualMachines/deallocate/action仮想マシンの割り当て解除
- Microsoft.Compute/virtualMachines/start/action仮想マシンの開始
上記の操作が Actions プロパティに含まれる組み込み (既存の) ロールは、以下の通りです。
所有者 (Owner)
共同作成者 (Contributor)
仮想マシン共同作成者 (Virtual Machine Contributor)
DevTest Labs ユーザー (DevTest Labs User)
[参考]
Azure の組み込みロール
/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 でリソースを管理する - スコープを理解する
/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"