🧻

【Azure】RBACのイメージを掴む!

2024/03/24に公開

初めに

Azureを扱う上で避けては通れないRBAC。しかし初めて扱う際には理解しづらいと感じたので、自分なりにまとめていこうと思います。

RBACとは

RBAC(Role-Based Access Control)とは、Azureにおいてロールを用いてリソースへのアクセス・操作権限を設定することで、対象のリソースにアクセスできる人・できない人をコントロールするための仕組みです。適切なロールを割り当てることで、操作させたい人にだけ対象のリソースを操作せることができます。

このRBACはユーザーがリソースにアクセスする権限を管理するだけではなく、リソースが他のリソースにアクセスしたい場合にも使用されます。例えば下図のようにAppServiceから他のリソースに対してアクセスしたり、データを読み取ったりするのにも適切なロールが割り当てられていないと上手くいきません。

なので、RBACは適切なユーザーに適切な権限を与えるというセキュリティの意味でも重要だし、Azureのリソース同士を連携させたい場合にも重要ということになります。Azureのリソース同士での疎通がうまくいかないという時は、大体ネットワークの設定かこのRBACが原因の場合が多いような気がしています。

Microsoft EntraロールとAzureロール

今回RBACで話すのはAzureロールについてです。しかし、ロールにはMicrosoft Entraロールというものもあり、混同しないように違いを簡単に説明していきます。

Microsoft Entraロールとは

Microsoft Entraロールとは、簡単に言うとEntraID周りの権限を管理するロールと捉えて良いでしょう。もう少し具体的なイメージとしてはユーザーやグループの作成・編集などの権限を扱うといったところでしょうか。前はAzureADロールと呼ばれていたようなので、その名前での記事も多くありますが、今はAzureADがEntraIDに改名された際にMicrosoft Entraロールという名前に変わったのではと推測しています。

Microsoft Entraロールの種類

代表的なロールを下の表に示します(なんとなくこんなのあるんだって感じで、特に覚える必要はないと思います)。

ロール 説明
グローバル管理者 EntraIDに関わる全ての操作が可能
グローバル閲覧者 グローバル管理者が読み取れる全ての情報の参照が可能
ユーザー管理者 ユーザーとグループに関わる操作やサポート利用に関する操作が可能
ライセンス管理者 ユーザーおよびグループに対するライセンスの割り当て、削除、更新が可能
レポート閲覧者 サインインおよび監査レポートを読み取ることが可能

さらに他にどんなMicrosoft Entraロールがあるかを知りたい方は以下リンクを確認いただければと思います。正直いろんなロールがありすぎてよくわからんといった感じですね、、
https://learn.microsoft.com/ja-jp/entra/identity/role-based-access-control/permissions-reference

Microsoft EntraロールとAzureロールの違い

先ほども少し記載しましたが、違いについてはMicrosoft EntraロールはEntraIDに関する権限設定、Azureロールはリソースへのアクセスの権限設定というざっくりした理解でとりあえずは良いと思っています。この違いについては公式ドキュメントでもう少し詳しく記述されているので、以下リンクをご確認いただければと思います。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/rbac-and-directory-admin-roles#differences-between-azure-roles-and-microsoft-entra-roles
英語なので少し見づらいですが、MSドキュメントの図を参照すると下図のような関係性になります。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/rbac-and-directory-admin-roles#differences-between-azure-roles-and-microsoft-entra-roles

EntraIDでのロールの割り当て方法

EntraIDでのロールの割り当て方法について、参考になりそうな記事を見つけたのでリンクを以下に記載します。こちらは特に解説はしないので、もし興味がある方いれば見てくださいといった感じです。
https://jpazureid.github.io/blog/azure-active-directory/roles-and-administrators/

Azureロール

Azureロールとその種類

Azureロールとは先ほども記載しましたが、Azureのリソースにアクセスする権限を管理するものです。Azureロールのうち代表的なものを以下の表に記載します。

ロール 説明
所有者 ほかのユーザーへアクセス権を付与(委任)する権限を含め、全てのリソースへのフルコントロールのアクセス権を持つ
共同作成者(Contributor) 全てのリソースへのフルコントロールのアクセス権を持つ。ただし、ほかのユーザーへのアクセス権の付与(委任)はできない。
閲覧者(Reader) 既存のリソースの表示だけができる。

表に記載したのはどのリソースに関しても使えるロールですが、仮想マシンの作成や管理が可能な「仮想マシン共同作成者」というロールが存在するように、リソースの種類を絞ったようなロールも多く存在します。実際は100を超えるAzureロールが存在するようなので、1つ1つ覚える必要はないですが、詳しく知りたい方は以下リンクをご確認ください。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles

Azureロールの定義

Azureロールには「組み込みロール」と「カスタムロール」が存在します。これまで紹介してきた「所有者」などのロールはAzureが最初から提供してくれているロールであり、そのようなロールを「組み込みロール」と呼びます。「組み込みロール」で要件を満たせない場合、自分でカスタマイズして作ったロールのことを「カスタムロール」と呼びます。ロールは組み込み・カスタムどちらであろうと、JSONファイルで名前やどのようなアクションを許可するかを定義したものになっています。イメージ図としては下図のような感じです。

Azureロールの定義について、詳しくは以下リンクをご確認ください。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-definitions
カスタムロールの作成手順について詳しく知りたい方は以下リンクをご確認ください。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/custom-roles

Azureロールの割り当て

Azureロールを割り当てることで、ユーザーやリソースが他のリソースにアクセスするための権限を付与することができます。ここではAzureロールの割り当てを理解するために必要な概念等の説明していきます。
ロールの割り当て手順について、詳しくは以下リンクも参照ください。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-steps

どのロールを割り当てるか

これは今まで説明してきたAzureの「組み込みロール」または「カスタムロール」のうち、どのロールを割り当てるかということです。

セキュリティプリンシパル(誰に割り当てるか)

まずロールを誰に割り当てるかを考えます。つまり、ここでは対象のリソースにアクセスさせたいユーザー等を選択します。この「誰」というのはユーザーだけでなく、ユーザー、グループ、サービスプリンシパル、マネージドIDに対して割り当てることができます。この4つを総称してセキュリティプリンシパルとも呼びます(覚えなくて大丈夫です)

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-steps
サービスプリンシパルとマネージドIDは聞き馴染みがない人もいるので、一旦そんなのもあるんだくらいに捉えていただいて大丈夫です。自分が知っている範囲でどのような場合に使用するのかの使い分けを以下表にしてみました。

セキュリティプリンシパル どのような場合に使うか
ユーザー そのユーザーにアクセス権を与えたい場合に使用。
グループ グループ内のユーザー全員に権限を与えられるので、一括でユーザーに権限付与したい場合に使用。
サービスプリンシパル Azure リソースにアクセスするためにアプリケーションまたはサービスによって使用されるセキュリティID。これを使えばPCのローカル環境からAzureのリソースにアクセスしたい場合のアクセス許可を簡単に設定できる。
マネージドID リソースから他のリソースにアクセスさせたい時に使用。

スコープ(アクセス許可の範囲)

次にスコープについて説明します。Azure では、4つのレベル (管理グループ、サブスクリプション、リソース グループ、リソース) でスコープを指定できます。上位レベルで指定したロールのアクセス許可は下位レベルにも継承されます。例えば、管理グループのスコープでユーザーに閲覧者ロールを割り当てた場合、そのユーザーは、その管理グループに存在する全サブスクリプションの内容をすべて閲覧できるということになります。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-steps

Azureポータルでのロールの割り当て

Azureポータルでのロールの割り当て方法は以下リンクの通り進めれば、問題なくできると思います。ただ慣れないうちはセキュリティプリンシパルやスコープなどがよくわからなくなる可能性があります。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-portal?tabs=delegate-condition

個人的に注意してほしいポイントはスコープに設定したい場所で「アクセス制御(IAM)」をクリックして、ロールを割り当てるということです。各リソース画面上で「アクセス制御(IAM)」というメニューがあって、上位レベルなどで設定すれば、適当に設定してもアクセスがうまくいくかもしれませんが、セキュリティ的観点からも自分がアクセスさせたい範囲はどこかをしっかり考えるように設定するようにしましょう。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-portal?tabs=delegate-condition

割り当てたロールの確認

対象のスコープに対して、どのようなロールが割り当てられているかは、スコープの画面上で「アクセス制御 (IAM)」>「ロールの割り当て」をクリックすることで確認できます。

https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-list-portal
ここで注意する点として、下位レベルで設定したロールは、上位レベルの「アクセス制御 (IAM)」から確認できないということです。例えばリソースのスコープでロールを割り当てたら、上位レベルであるサブスクリプションの「アクセス制御 (IAM)」画面にはそのロールは表示されません。逆にサブスクリプションでロールを割り当てていたら、下位レベルであるリソースの「アクセス制御 (IAM)」画面上ではそのロールが継承されるので、表示されるようになります。
https://learn.microsoft.com/ja-jp/azure/role-based-access-control/role-assignments-list-portal

最後に

RBACについてまとめてみましたが、分かりやすくまとめるというのは意外に難しいと感じました。ただ今回説明してきたスコープなどの概念を理解せずにロールの割り当てをやろうとすると訳がわからなくなると思うので、ある程度基礎知識を学んでおいて、ロールの割り当てを実際にやってみるとかなり理解が深まるのかなと思いました。私もまだまだ理解できてない部分も多いので、間違っている部分などあればご指摘いただけると助かります。

Discussion