つい先日、ユーザー、グループ、サービス プリンシパルに対して、Azure サブスクリプションおよび Azure リソース グループのスコープで割り当てることができる「Azure カスタムロール」が Azure ポータルで作成できるようになったとアナウンスがありました。
Azure カスタムロールについては、以下のドキュメントを読んでおさらいしましょう。
アップデートを確認
- 参考:Creating custom roles in the Azure portal is now in public preview
- 参考:Azure portal での Azure カスタム ロール作成の一般提供を開始
アップデート情報のアナウンスには以下のように書かれています。
Azure portal での Azure カスタム ロール作成の一般提供が開始されました。以前は、カスタム ロールの作成または編集は、コマンドラインまたは Azure Resource Manager API を通じて行う必要がありました。この新しいエクスペリエンスを使用すると、ロールベースのアクセス制御 (RBAC) ワークフローが容易になります。
たしかに、以前までカスタムロールを作るのはとても苦労しました...
ホントにカンタンに作れるか試してみます。
やってみよう
Azure ポータルでカスタムロールを作成する手順は、以下のドキュメントを参考にします。
参考:Azure portal を使用して Azure カスタム ロールを作成または更新する (プレビュー)
どんなアクセス制御を行うか
そういえば、2 年ほど前に PowerShell でカスタムロールを作る記事を投稿していました。
参考:ユーザーへ Azure VM の起動、停止と接続のみを許可したい
今回も先の記事で取り上げた「仮想マシンの起動、停止、接続のみ許可」するロールを作ります。
カスタムロール作る!
Azure ポータルでカスタムロールを作るには、以下の 3 つの方法があります。
すべての方法を試してみます。
※それぞれにリンクを貼っておきます。
-
ロールを複製する
- 既存のロールを複製し、そしてアクセス許可を変更する
-
最初から始める
- カスタムロールを一から作る
-
JSON ファイルから始める
- ロールの定義ファイル (JSON) を作成し、それをアップロードする
その 1 :「ロールを複製する」で作る!
Azure ポータルでカスタムロールを割り当てるサブスクリプション、リソースグループの [アクセス制御 (IAM)] を開きます。そして、[役割] タブを開きます。
そして、複製するロールを探します。今回は「DevTest Labs ユーザー」を使います。
検索したロールの右端にある [...] をクリックして、メニューから [複製] を選択します。
すると、[カスタムロールを作成する] に遷移します。
[基本] タブ
[基本] タブで、基本情報を入力します。[ベースラインのアクセス許可] と [複製するロール] は入力済みとなっていると思います。
入力後、[次へ] をクリックします。
[アクセス許可] タブ
[アクセス許可] タブで、「アクセス許可する操作」と「除外する操作」を編集します。
※「アクセス許可する操作」の中から「除外する操作」も編集できますが、今回は使いませんでした。
既存のロールに「アクセス許可する操作」が存在しなかったので、[アクセス許可の追加] をクリックして操作を追加します。
[アクセス許可の追加] をクリックすると、Azure リソース プロバイダーがタイル表示されます。
ここから Azure リソース プロバイダーを絞り込んで対象のものを選択します。
※「Microsoft.Resources/subscriptions/resourceGroups/resources/read」みたいに操作まで指定して絞り込むこともできます。なお、この検索条件はその後の操作を選択するところに引き継がれます。
そして、「アクセス許可する操作」を選択して、[追加] をクリックします。
編集後、[次へ] をクリックします。
[割り当て可能なスコープ] タブ
[割り当て可能なスコープ] タブで、カスタムロールが割り当て可能なサブスクリプション、またはリソースグループを指定します。
複数のリソースグループを一度に追加することもできます。
[次へ] をクリックします。
[JSON] タブ
[JSON] タブには、JSON 形式のカスタム ロールが表示されます。JSON を直接編集するも JSON ファイルをダウンロードすることもできます。
[次へ] をクリックします。
[確認と作成] タブ
内容に問題なければ [作成] をクリックします。
[OK] をクリックして、出来上がるまでしばらく待ちます。
出来上がり
はい。出来ました。ラクちんです。
その 2 :「最初から始める」で作る!
Azure ポータルでカスタムロールを割り当てるサブスクリプション、リソースグループの [アクセス制御 (IAM)] を開きます。そして、[追加] をクリックし、[カスタムロールの追加] をクリックします。
すると、[カスタムロールを作成する] に遷移します。
[基本] タブ
[基本] タブで、基本情報を入力します。[ベースラインのアクセス許可] は入力済みとなっていると思います。
入力後、[次へ] をクリックします。
[アクセス許可] タブ
[アクセス許可] タブで、「アクセス許可する操作」と「除外する操作」を編集します。
その 1 :「ロールを複製する」で作る!の [アクセス許可] タブとは違い、許可および除外する操作は何も指定されていません。
一から編集します。
※「アクセス許可する操作」の中から「除外する操作」も編集できますが、今回は使いませんでした。
追加した内容は以下のとおりです。
なお、「Microsoft.Network/networkInterfaces/*/read」のようなワイルドカードが含む操作は [アクセス許可] タブでは選択できず、[JSON] タブで表示される JSON 形式のカスタム ロールを直接編集します。
[次へ] をクリックします。
[割り当て可能なスコープ] タブ
その 1 :「ロールを複製する」で作る!の [割り当て可能なスコープ] タブと同じなので、省略します。
[JSON] タブ
[アクセス許可] タブで、追加できなかった操作をここで追加します。[編集] をクリックします。
編集が終わったら、[保存] をクリックして編集内容を保存します。
[次へ] をクリックします。
[確認と作成] タブ
内容に問題なければ [作成] をクリックします。
その後、[OK] をクリックして、出来上がるまでしばらく待ちます。
出来上がり
はい。出来ました。操作を探し出すのはちょっとシンドイですね...
しかし、Azure ポータル上で操作を検索できるのはとても便利です。
その 3 :「JSON ファイルから始める」で作る!
はじめに、カスタムロールの定義ファイル (JSON) を作成します。
前述で紹介した記事で作っていたので、その JSON ファイルを参考に以下のように作成しました。
{
"properties": {
"roleName": "(3) Azure VM Start/Stop/Connect",
"description": "Azure 仮想マシンの起動、停止、接続のみを許可するロール",
"assignableScopes": [
"/subscriptions/<サブスクリプション ID>"
],
"permissions": [
{
"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"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
]
}
}
次に、Azure ポータルでカスタムロールを割り当てるサブスクリプション、リソースグループの [アクセス制御 (IAM)] を開きます。そして、[追加] をクリックし、[カスタムロールの追加] をクリックします。
すると、[カスタムロールを作成する] に遷移します。
[基本] タブ
[基本] タブで、基本情報を入力します。[ベースラインのアクセス許可] で「JSON から始める」を選択し、先ほど作成した JSON ファイルをアップロードします。アップロードした内容に問題なければ、その JSON ファイルに記述した [カスタムロール名] と [説明] が反映されます。
入力後、[次へ] をクリックします。
[アクセス許可] タブ
[アクセス許可] タブにも JSON ファイルの内容が反映されています。
[次へ] をクリックします。
[割り当て可能なスコープ] タブ
[割り当て可能なスコープ] タブにも JSON ファイルの内容が反映されています。
[次へ] をクリックします。
[JSON] タブ
問題ないので、[次へ] をクリックします。
[確認と作成] タブ
内容に問題なければ [作成] をクリックします。
その後、[OK] をクリックして、出来上がるまでしばらく待ちます。
出来上がり
はい。出来ました。事前にカスタムロールの定義ファイルが用意できていれば、とてもラクちんですね。
まとめ
カスタムロールを作成して、それをユーザーに割り当てる...という一連のオペレーションが Azure ポータルで完結できることをとても素晴らしいです。以前より圧倒的にラクちんです。
カスタムロールを作るのがめんどくさくて、組み込みロールで妥協することはなくなるはず!(といいですね)