5
7

More than 3 years have passed since last update.

ユーザーへ Azure VM の起動、停止と接続のみを許可したい

Last updated at Posted at 2018-09-24

Azure ポータルなどでユーザーがアクセスできるリソースを限定させたい、リソースへの操作を限定させたい場合、ロールベースのアクセス制御 (RBAC) を使用して制御します。
あらかじめ用意された組み込みロールで事足りれば良いのですが、それよりさらに制限させたい場合は、やはりカスタムロールを作って、ユーザーにそれを割り当てます。

カスタムロールって面倒くさいなーって思い込んでいましたが、実際にやってみたらそんなことはありませんでした。

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

Azure サポートの以下の記事を参考にしました。

参考:ユーザーへ Azure VM の起動および停止のみを許可する方法 - Japan Azure IaaS Support Blog

この記事を要約すると冒頭で書いたとおりですが、具体例として「ユーザーに特定の仮想マシンの起動と停止のみ許可する」手段について書かれています。
jazug_p4.png

この具体例のとおりにアクセス制限させるためには、

  • 以下の操作が Action プロパティに含むロールをユーザーに割り当てる
    • Microsoft.Compute/virtualMachines/read
    • Microsoft.Compute/virtualMachines/deallocate/action
    • Microsoft.Compute/virtualMachines/start/action
  • これらのプロパティが含む組み込み (既定の) ロールは
    • 所有者 (Owner)
    • 共同作成者 (Contributor)
    • 仮想マシン共同作成者 (Virtual Machine Contributor)
    • DevTest Labs ユーザー (DevTest Labs User)
  • ユーザーに組み込みロールを割り当てるなら、限定的な「DevTest Labs ユーザー」が最適
  • 許可する操作のみを明示的に限定したいなら、「カスタムロール」を作成 → ユーザーにそれを割り当てる

ちょうど情シスから「仮想マシンの起動、停止、接続のみ許可できるなら、システムの担当者にも Azure ポータルにアクセスさせても良いんだけど...今それないからよろしくねー」という話があり、私もいつまでも付き合っていられないので、以下のようなカスタムロールを作ることにしました。

jazug_p6.png

1.カスタムロール定義 (json) を作成

カスタムロールを作るためには、定義ファイルを用意する必要があります。書式は以下のとおり。

customroles.json
{
  "Name": "カスタムロールの名前",
  "IsCustom": true,
  "Description": "カスタムロールの説明",
  "Actions": [
    "COMMENT:このロールで実行できる操作を指定"
  ],
  "NotActions": [
    "COMMENT:実行できる操作の中 (Actions) から除外する操作を指定"
  ],
  "DataActions":  [
    "COMMENT:対象のオブジェクト内のデータに対して、このロールで実行できるデータ操作を指定 ※プレビュー"
  ],
  "NotDataActions": [ 
    "COMMENT:実行できるデータ操作の中 (DataActions) から除外するデータ操作を指定 ※プレビュー"
  ],
  "AssignableScopes": [
    "COMMENT:このロールを割り当て可能なスコープ (サブスクリプション, リソースグループ, リソース) を指定"
  ]
}

リソースに対する操作は、以下の記事から探し出します。
巨大なページなので、ページ内検索を駆使してやりたいことを探し出します。
ピンとこない説明に苦戦、負けそうです...(@_@)
※もっと良い方法あるかな??

参考:Azure Resource Manager のリソース プロバイダー操作

そんなこんなで私が作ってみたカスタムロールの定義は以下のとおり。

AzureVMStartStopConnect.json
{
  "Name": "Azure VM Start/Stop/Connect",
  "IsCustom": true,
  "Description": "Azure 仮想マシンの起動、停止、接続のみを許可するロール",
  "Actions": [
     "Microsoft.Compute/virtualMachines/read"
    ,"Microsoft.Compute/virtualMachines/deallocate/action"
    ,"Microsoft.Compute/virtualMachines/restart/action"
    ,"Microsoft.Compute/virtualMachines/start/action"
    ,"Microsoft.Network/networkInterfaces/*/read"
    ,"Microsoft.Network/networkInterfaces/read"
    ,"Microsoft.Resources/subscriptions/resourceGroups/read"
    ,"Microsoft.Resources/subscriptions/resourceGroups/resources/read"
    ,"Microsoft.ClassicCompute/virtualMachines/read"
    ,"Microsoft.ClassicCompute/VirtualMachines/start/action"
    ,"Microsoft.ClassicCompute/virtualMachines/shutdown/action"
    ,"Microsoft.ClassicCompute/virtualMachines/restart/action"
    ,"Microsoft.ClassicCompute/virtualMachines/downloadRemoteDesktopConnectionFile/action"
    ,"Microsoft.ClassicCompute/virtualMachines/operationStatuses/read"
  ],
"AssignableScopes": [
     "/subscriptions/<サブスクリプション ID>"
  ]
}

クラシック仮想マシンはやりたい操作の Action を探し出すのはとてもラクでしたが、ARM 仮想マシンはやりたい操作に関連するリソースを考えながら書いていきました。あとは、やりたい操作が実現できている組み込みロールを参考にしながら書きました。(今回は「DevTest Labs ユーザー」ロールを参考にしました。)

2.サブスクリプションにカスタムロール定義を登録

PowerShell で作成したカスタムロール定義を登録します。

# ログイン
PS C:\> Login-AzureRmAccount

# サブスクリプションを選択
PS C:\> Select-AzureRmSubscription -Subscription <サブスクリプション ID>

# カスタムロールを登録
PS C:\> New-AzureRmRoleDefinition -InputFile <カスタムロール定義ファイルパス>

3.リソースのアクセス制御にユーザーを登録

あとは、特定のリソースのアクセス制御に、登録したカスタムロールを割り当てたユーザーを登録します。

役割に登録したカスタムロール (Azure VM Start/Stop/Connect) が登録されていることを確認。

jazug_p11.png

仮想マシンのアクセス制御に、登録したカスタムロールを割り当てたユーザーを登録します。

jazug_p11_2.png

登録したカスタムロールを書き換えたい

はじめから希望どおりのものが作れるわけでもなく、トライ&エラーを何度も繰り返しました。
カスタムロールを登録し直す場合は、ユーザーに割り当てたロールを解除→再割り当てしたり、登録したカスタムロールを削除→再登録したりすると、それらの設定がうまく反映されない (反映がとても遅い) 場合があります。

最も良いやり方は、リソースのアクセス制御のカスタムロールを割り当てたユーザーはそのままに、PowerShell で、以下のように「ロールを取得」、「ロールのプロパティを編集」、「ロールを更新」という手順を行うと良いと思います。

  • Get-AzureRmRoleDefinition
  • ロールのプロパティを編集 ※Actions や NotActions などのデータ型は List[string]
  • Set-AzureRmRoleDefinition

jazug_p12.png

参考文献

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7