Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
こんにちは。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"