9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure ポータルでカスタムロールを作る

Last updated at Posted at 2020-05-10

つい先日、ユーザー、グループ、サービス プリンシパルに対して、Azure サブスクリプションおよび Azure リソース グループのスコープで割り当てることができる「Azure カスタムロール」が Azure ポータルで作成できるようになったとアナウンスがありました。

Azure カスタムロールについては、以下のドキュメントを読んでおさらいしましょう。

アップデートを確認

アップデート情報のアナウンスには以下のように書かれています。

Azure portal での Azure カスタム ロール作成の一般提供が開始されました。以前は、カスタム ロールの作成または編集は、コマンドラインまたは Azure Resource Manager API を通じて行う必要がありました。この新しいエクスペリエンスを使用すると、ロールベースのアクセス制御 (RBAC) ワークフローが容易になります。

たしかに、以前までカスタムロールを作るのはとても苦労しました...:disappointed_relieved:
ホントにカンタンに作れるか試してみます。

やってみよう

Azure ポータルでカスタムロールを作成する手順は、以下のドキュメントを参考にします。
参考:Azure portal を使用して Azure カスタム ロールを作成または更新する (プレビュー)

どんなアクセス制御を行うか

そういえば、2 年ほど前に PowerShell でカスタムロールを作る記事を投稿していました。
参考:ユーザーへ Azure VM の起動、停止と接続のみを許可したい

今回も先の記事で取り上げた「仮想マシンの起動、停止、接続のみ許可」するロールを作ります。

jazug_p6.png

カスタムロール作る!

Azure ポータルでカスタムロールを作るには、以下の 3 つの方法があります。
すべての方法を試してみます。
※それぞれにリンクを貼っておきます。

その 1 :「ロールを複製する」で作る!

Azure ポータルでカスタムロールを割り当てるサブスクリプション、リソースグループの [アクセス制御 (IAM)] を開きます。そして、[役割] タブを開きます。

image.png

そして、複製するロールを探します。今回は「DevTest Labs ユーザー」を使います。
検索したロールの右端にある [...] をクリックして、メニューから [複製] を選択します。

image.png

すると、[カスタムロールを作成する] に遷移します。

[基本] タブ

[基本] タブで、基本情報を入力します。[ベースラインのアクセス許可] と [複製するロール] は入力済みとなっていると思います。
入力後、[次へ] をクリックします。

image.png

[アクセス許可] タブ

[アクセス許可] タブで、「アクセス許可する操作」と「除外する操作」を編集します。
※「アクセス許可する操作」の中から「除外する操作」も編集できますが、今回は使いませんでした。

image.png

既存のロールに「アクセス許可する操作」が存在しなかったので、[アクセス許可の追加] をクリックして操作を追加します。
[アクセス許可の追加] をクリックすると、Azure リソース プロバイダーがタイル表示されます。

image.png

ここから Azure リソース プロバイダーを絞り込んで対象のものを選択します。
※「Microsoft.Resources/subscriptions/resourceGroups/resources/read」みたいに操作まで指定して絞り込むこともできます。なお、この検索条件はその後の操作を選択するところに引き継がれます。

image.png

そして、「アクセス許可する操作」を選択して、[追加] をクリックします。

image.png

編集後、[次へ] をクリックします。

image.png

[割り当て可能なスコープ] タブ

[割り当て可能なスコープ] タブで、カスタムロールが割り当て可能なサブスクリプション、またはリソースグループを指定します。

image.png

複数のリソースグループを一度に追加することもできます。

image.png

[次へ] をクリックします。

[JSON] タブ

[JSON] タブには、JSON 形式のカスタム ロールが表示されます。JSON を直接編集するも JSON ファイルをダウンロードすることもできます。

image.png

[次へ] をクリックします。

[確認と作成] タブ

内容に問題なければ [作成] をクリックします。

image.png

[OK] をクリックして、出来上がるまでしばらく待ちます。

image.png

出来上がり

はい。出来ました。ラクちんです。:heart_eyes:

image.png

その 2 :「最初から始める」で作る!

Azure ポータルでカスタムロールを割り当てるサブスクリプション、リソースグループの [アクセス制御 (IAM)] を開きます。そして、[追加] をクリックし、[カスタムロールの追加] をクリックします。

image.png

すると、[カスタムロールを作成する] に遷移します。

[基本] タブ

[基本] タブで、基本情報を入力します。[ベースラインのアクセス許可] は入力済みとなっていると思います。
入力後、[次へ] をクリックします。

image.png

[アクセス許可] タブ

[アクセス許可] タブで、「アクセス許可する操作」と「除外する操作」を編集します。

その 1 :「ロールを複製する」で作る!の [アクセス許可] タブとは違い、許可および除外する操作は何も指定されていません。
一から編集します。
※「アクセス許可する操作」の中から「除外する操作」も編集できますが、今回は使いませんでした。

image.png

追加した内容は以下のとおりです。
なお、「Microsoft.Network/networkInterfaces/*/read」のようなワイルドカードが含む操作は [アクセス許可] タブでは選択できず、[JSON] タブで表示される JSON 形式のカスタム ロールを直接編集します。

image.png

[次へ] をクリックします。

[割り当て可能なスコープ] タブ

その 1 :「ロールを複製する」で作る!の [割り当て可能なスコープ] タブと同じなので、省略します。

[JSON] タブ

[アクセス許可] タブで、追加できなかった操作をここで追加します。[編集] をクリックします。

image.png

編集が終わったら、[保存] をクリックして編集内容を保存します。

image.png

[次へ] をクリックします。

[確認と作成] タブ

内容に問題なければ [作成] をクリックします。
その後、[OK] をクリックして、出来上がるまでしばらく待ちます。

image.png

出来上がり

はい。出来ました。操作を探し出すのはちょっとシンドイですね...:sweat_smile:
しかし、Azure ポータル上で操作を検索できるのはとても便利です。:heart_eyes:

image.png

その 3 :「JSON ファイルから始める」で作る!

はじめに、カスタムロールの定義ファイル (JSON) を作成します。
前述で紹介した記事で作っていたので、その JSON ファイルを参考に以下のように作成しました。

AzureVMStartStopConnect.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)] を開きます。そして、[追加] をクリックし、[カスタムロールの追加] をクリックします。

image.png

すると、[カスタムロールを作成する] に遷移します。

[基本] タブ

[基本] タブで、基本情報を入力します。[ベースラインのアクセス許可] で「JSON から始める」を選択し、先ほど作成した JSON ファイルをアップロードします。アップロードした内容に問題なければ、その JSON ファイルに記述した [カスタムロール名] と [説明] が反映されます。
入力後、[次へ] をクリックします。

image.png

[アクセス許可] タブ

[アクセス許可] タブにも JSON ファイルの内容が反映されています。
[次へ] をクリックします。

image.png

[割り当て可能なスコープ] タブ

[割り当て可能なスコープ] タブにも JSON ファイルの内容が反映されています。
[次へ] をクリックします。

image.png

[JSON] タブ

問題ないので、[次へ] をクリックします。

image.png

[確認と作成] タブ

内容に問題なければ [作成] をクリックします。
その後、[OK] をクリックして、出来上がるまでしばらく待ちます。

image.png

出来上がり

はい。出来ました。事前にカスタムロールの定義ファイルが用意できていれば、とてもラクちんですね。:heart_eyes:

image.png

まとめ

カスタムロールを作成して、それをユーザーに割り当てる...という一連のオペレーションが Azure ポータルで完結できることをとても素晴らしいです。以前より圧倒的にラクちんです。:heart::heart::heart:
カスタムロールを作るのがめんどくさくて、組み込みロールで妥協することはなくなるはず!(といいですね)

9
6
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
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?