この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
こんにちは、パーソルプロセス&テクノロジーの内田です。
今回はAzureでアクセス制御を実施する上で登場する “カスタム ロール” についてご紹介します。
まず、Azure のアクセス制御は “RBAC” というモデルに基づいています。RBAC(アールバックと呼びます)はRole Base Access Controlの略で、特定の操作の許可/拒否のコレクションであるロールを、ユーザやグループに割り当てることでアクセス制御を実現します。
アクセス権を付与する対象(ユーザやグループ)とアクセス権(ロール)を別々に管理することができるので、ユーザの追加や異動にも容易に対応することができます。
Azureには組込みのロールがいくつか存在していますが、必要最低限の操作だけを許可したいという場合は、ロールを自分で作成する必要があります。これがカスタム ロールです。
カスタム ロールの作成や更新といった作業は現時点(2019年12月10日時点)でAzure Portalに対応しておりません。
というわけで、Powershellを使ってカスタムロールを作成する手順をご紹介します。
カスタムロール作成の流れ
次の4ステップで、作成していきます。
- ロールに定義するアクションを決定する
- リソース プロバイダーを探す
- リソース プロバイダーが定義しているアクションを把握する
- カスタム ロールを作成する
1. ロールに定義するアクションを決定する
ロールはその性質上、役割ごとつまり職務ごとに作成することがよいとされています。
そのためまず最初に、職務をはたすために必要な操作(アクション)を洗い出してみましょう。
ここでは例として次の職務を取り上げてみます。
職務 | アクション |
オペレーター | 仮想マシンの起動・停止・再起動 |
アクションは、実際にAzure Portalの画面でどんなことをさせるのか、といったことを考えると書き出しやすいでしょう。
2. リソース プロバイダーを探す
ロールに定義するアクションが決まったので、次にそのアクションを定義している “リソース プロバイダー” を探しましょう。
リソース プロバイダーとは、Azureの各サービスのデプロイや操作を管理するものです。
具体的に説明するために Azure 仮想マシン リソースを提供する “Microsoft.Compute”を例にみてみましょう。
Azure 仮想マシンに対するアクションで、すぐに思い浮かぶものとして「起動」、「停止」、「再起動」がありますよね。ただこれ以外にも「サイズの変更」や「再デプロイ」、「拡張機能」といった操作もあります。
これら “操作の一覧” がどこで定義されているのかという、リソース プロバイダーで定義されているわけです。
リソース プロバイダーの一覧は次のURLで確認できます。
Azure サービスのリソース プロバイダー
見ていただければわかると思いますが、リソース プロバイダーはたくさんあります。(100個以上あります。)
ここで、「リソースがどのリソース プロバイダーから提供されているかわからない」という事態に陥るわけです。
調べる方法はいくつかありますが、取っ付きやすいものとして “URL” から判別する方法をご紹介します。
- ブラウザを起動して、Azure Portal (https://portal.azure.com) を開きます。
- 操作対象のリソースを選択します。(仮想マシンを選択しました。)
- このページで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を開いて次のとおり実行します。
- Reader ロール(ビルトイン)のロール定義を取得
$reader_role = Get-AzRoleDefinition -Name Reader
- 初期化するために、次のコマンドを実行
$reader_role.Id = $null
$reader_role.IsCustom = $true
$reader_role.Description = $null
$reader_role.Actions = $null
- 次のコマンドで、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>"
- 次のコマンドでカスタム ロールを作成
New-AzRoleDefinition -Role $reader_role
- エラーなく実行できれば完了です。カスタム ロールが作成できたかどうかは、Azure Portalの [サブスクリプション]-[アクセス制御(IAM)]-[役割] から確認できます。
以上で、カスタム ロールを作成することができました。
まとめ
カスタム ロールの作成がAzure Portal で対応していないため、作成には手間がかかります。またAzure リソース プロバイダーを調べなければ、アクションの一覧がわからないというのは、ハードルが高いと言えるでしょう。
とはいえ、ロールは一度作成してしまえば、それを更新する頻度は少ないはずです。
またロール設計を正しく行ことで、ユーザの不用意な操作によって、システムが危険に晒される恐れが減ることは確かです。
カスタム ロールを作成して、安心できるAzure環境を構築しましょう。
今回はこれで以上です。