Azure リソースのカスタム ロールを作成する

こんにちは、パーソルプロセス&テクノロジーの内田です。

 

今回はAzureでアクセス制御を実施する上で登場する “カスタム ロール” についてご紹介します。

 

まず、Azure のアクセス制御は “RBAC” というモデルに基づいています。RBAC(アールバックと呼びます)はRole Base Access Controlの略で、特定の操作の許可/拒否のコレクションであるロールを、ユーザやグループに割り当てることでアクセス制御を実現します。

アクセス権を付与する対象(ユーザやグループ)とアクセス権(ロール)を別々に管理することができるので、ユーザの追加や異動にも容易に対応することができます。

Azureには組込みのロールがいくつか存在していますが、必要最低限の操作だけを許可したいという場合は、ロールを自分で作成する必要があります。これがカスタム ロールです。

カスタム ロールの作成や更新といった作業は現時点(2019年12月10日時点)でAzure Portalに対応しておりません。

というわけで、Powershellを使ってカスタムロールを作成する手順をご紹介します。

カスタムロール作成の流れ

次の4ステップで、作成していきます。

  1. ロールに定義するアクションを決定する
  2. リソース プロバイダーを探す
  3. リソース プロバイダーが定義しているアクションを把握する
  4. カスタム ロールを作成する

1. ロールに定義するアクションを決定する

ロールはその性質上、役割ごとつまり職務ごとに作成することがよいとされています。

そのためまず最初に、職務をはたすために必要な操作(アクション)を洗い出してみましょう。

ここでは例として次の職務を取り上げてみます。

職務 アクション
オペレーター 仮想マシンの起動・停止・再起動

アクションは、実際にAzure Portalの画面でどんなことをさせるのか、といったことを考えると書き出しやすいでしょう。

 

2. リソース プロバイダーを探す

ロールに定義するアクションが決まったので、次にそのアクションを定義している “リソース プロバイダー” を探しましょう。
リソース プロバイダーとは、Azureの各サービスのデプロイや操作を管理するものです。

 

具体的に説明するために Azure 仮想マシン リソースを提供する “Microsoft.Compute”を例にみてみましょう。
Azure 仮想マシンに対するアクションで、すぐに思い浮かぶものとして「起動」、「停止」、「再起動」がありますよね。ただこれ以外にも「サイズの変更」や「再デプロイ」、「拡張機能」といった操作もあります。

 

これら “操作の一覧” がどこで定義されているのかという、リソース プロバイダーで定義されているわけです。

 

リソース プロバイダーの一覧は次のURLで確認できます。
Azure サービスのリソース プロバイダー

 

見ていただければわかると思いますが、リソース プロバイダーはたくさんあります。(100個以上あります。)

 

ここで、「リソースがどのリソース プロバイダーから提供されているかわからない」という事態に陥るわけです。
調べる方法はいくつかありますが、取っ付きやすいものとして “URL” から判別する方法をご紹介します。

  1. ブラウザを起動して、Azure Portal (https://portal.azure.com) を開きます。
  2. 操作対象のリソースを選択します。(仮想マシンを選択しました。)
  3. このページでURLを確認します。
    https://portal.azure.com/#@<ドメイン名>/resource/subscriptions/<サブスクリプションID>/resourceGroups/<リソース グループ名>/providers/Microsoft.Compute/virtualMachines/<リソース名>/overview
    上記の形式であることが確認できると思います。赤字の箇所がそのリソースのリソース プロバイダー名です。

上記の手順を用いて、操作対象のリソースのリソース プロバイダー情報を全て把握します。

※この手順で確認できない場合もあります。その場合はAzure サービスのリソース プロバイダーより該当するリソースを探してください。

 

3. リソース プロバイダーが定義しているアクションを把握する

リソース プロバイダーがわかったので、それが提供しているアクションを確認しましょう。次のPowershell コマンドで確認ができます。

Get-AzResourceProviderAction -OperationSearchString "<リソース プロバイダー名>/*"

今回の場合、リソース プロバイダー名は “Microsoft.Compute” ですので次のようになります。

Get-AzResourceProviderAction -OperationSearchString "Microsoft.Compute/*"

すごい量でわかりづらいので、Select-ObjectでOperationとOperationNameに絞ってみます。

Get-AzResourceProviderAction -OperationSearchString "Microsoft.Compute/*" | Select-Object Operation, OperationName

相変わらず量がすごいですが、多少みやすくなりました。

今回の例では、仮想マシンの起動、停止、再起動のアクションを許可するため

  • Microsoft.Compute/virtualMachines/start/action
  • Microsoft.Compute/virtualMachines/deallocate/action
  • Microsoft.Compute/virtualMachines/restart/action

これらアクションを構成します。注意点として、readが許可されていないとAzure Portalでリソースを参照することができません。次のアクションも構成しましょう。

  • Microsoft.Compute/*/read

※アスタリスク(*)でワイルドカード展開となります。

 

4. カスタム ロールを作成する

ロールに定義するアクションが決定したので、ようやくカスタム ロールの作成にとりかかります。カスタム ロールは一から作ると大変ですので、既存のロールを修正する形で作成します。

 

Powershellを開いて次のとおり実行します。

  1. Reader ロール(ビルトイン)のロール定義を取得
    $reader_role = Get-AzRoleDefinition -Name Reader
  2. 初期化するために、次のコマンドを実行
    $reader_role.Id = $null
    $reader_role.IsCustom = $true
    $reader_role.Description = $null
    $reader_role.Actions = $null
  3. 次のコマンドで、Name, Description(任意), Actions, AssignableScopesをカスタマイズ
    $reader_role.Name = "<カスタム ロール名>"
    $reader_role.Description = "<説明>"
    $reader_role.Actions += "Microsoft.Compute/virtualMachines/start/action"
    $reader_role.Actions += "Microsoft.Compute/virtualMachines/deallocate/action"
    $reader_role.Actions += "Microsoft.Compute/virtualMachines/restart/action"
    $reader_role.Actions += "Microsoft.Compute/*/read"
    $reader_role.AssignableScopes = "/subscriptions/<サブスクリプションID>"
  4. 次のコマンドでカスタム ロールを作成
    New-AzRoleDefinition -Role $reader_role
  5. エラーなく実行できれば完了です。カスタム ロールが作成できたかどうかは、Azure Portalの [サブスクリプション]-[アクセス制御(IAM)]-[役割] から確認できます。

 

以上で、カスタム ロールを作成することができました。

 

まとめ

カスタム ロールの作成がAzure Portal で対応していないため、作成には手間がかかります。またAzure リソース プロバイダーを調べなければ、アクションの一覧がわからないというのは、ハードルが高いと言えるでしょう。

 

とはいえ、ロールは一度作成してしまえば、それを更新する頻度は少ないはずです。

またロール設計を正しく行ことで、ユーザの不用意な操作によって、システムが危険に晒される恐れが減ることは確かです。

カスタム ロールを作成して、安心できるAzure環境を構築しましょう。

 

今回はこれで以上です。

いいね (この記事が参考になった人の数:3)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください