AzureのRBAC(ロールベースアクセスコントロール)を使いこなすための基礎知識を紹介

はじめに

ITシステムにかかわらず、世の中にある文書やデータには、大きく公に公開されているものとそうでないものの2種類が存在します。例えば、図書館や書店に並んでいる本は誰もが見ることができる公のものです。一方で、企業の機密文書や管理している顧客情報等は一般の人に公開できないデータであるのはもちろん、社内でも限られた人のみ閲覧が可能な状態で保管されるべきです。個人レベルで見ても、スマートフォンに登録されている連絡帳やメッセージ履歴を誰にでも公開できるという人はほぼいません。そのため、端末にパスワードや認証を設定して情報を守り、自ら見せることがあったとしても仲の良い友達に限る、この人にはここまでの公開に留めておく等と、自然に人や範囲を選んで公開していることでしょう。このように、日常の中においても文書やデータは人や範囲を選んで公開されています

私用のパソコンではそこまで意識することはないかもしれませんが、WindowsOSのファイルやフォルダにおいても閲覧、書き込みといった権限を設定することが可能になっています。また、Googleのスプレッドシート等でもファイルの閲覧対象や編集対象を設定したことがある人もいるのではないでしょうか。特に後者のスプレッドシートのようなサービスはクラウド型であるため、権限の設定を誤ることで想像もつかない程多数の人に閲覧されてしまう可能性があります。

今回は、Microsoft Azureでアクセス制御を行う際に便利な「Azure RBAC」の仕組みや使い方について紹介していきます。制御においては、不用意なアクセスが発生しないよう厳重に管理するだけではなく、必要な際にすぐアクセスできるような「可用性」も求められます。情報セキュリティを勉強したことがある人は「完全性」「機密性」「可用性」という3つの要素を学んだことがあるかと思いますが、もちろんクラウドサービスにおいてもこれら要素は非常に重要です。

今後Microsoft Azureでシステムを構築する予定という方、サーバーエンジニア・クラウドエンジニアを目指している方、Azure RBACを知っているものの詳しく理解できていないという方はぜひ今回の記事をご覧ください。

Azure RBAC(アールバック)の概要

複数の要素を組み合わせたり、ロール(役割)をカスタマイズしたりすることで細かなアクセス制御を可能とするサービスが「Azure RBAC」です。IT業界だけではなく、それ以外の業種でもパソコンを使って仕事をしている方であれば、権限を分ける場面として分かりやすいのが管理者と作業者です。例えば、システム管理者であれば各ユーザーへの管理設定、その他リソースへの全アクセス権限が必要になりますが、開発者にはユーザーの権限設定や開発に必要となるリソース以外へのアクセスを制限したい現場がほとんどでしょう。システム開発・運用においては、他にも役職や職種によって権限の範囲を分けたいという状況が発生します。もちろんAWS(Amazon Web Services)やGCP(Google Cloud Platform)といったクラウドサービスや、オンプレミスのサービスでも同じようなサービスは存在しますが、Microsoft Azureにおいては今回紹介するAzure RBACを利用することとなります。

「Azure Resource Manager」というデプロイ・管理サービスに含まれるRBACはロールベースのアクセス制御サービスと言われるだけあり、初期状態で70以上のロールの種類が用意されていますが、さらにカスタムでロールを追加することが可能です。もちろん70以上のロールを覚えるのは不可能に近いので、今回は代表的なロールに厳選して紹介していきます。なお、かつてMicrosoft Azureは「Windows Azure」というサービス名で存在していましたが、この時に使われていた「クラシック」の仮想マシン上でRBACは利用できないことには注意が必要です。この記事は2023年2月に執筆していますが、クラシックは2023年3月でサービス終了となるため、それ以降に新規でAzureを契約した場合は問題なく利用できるということになります。

体系的に学ぶAzure RBAC

Azure RBACは、セキュリティプリンシパル、ロール定義、スコープという3つの要素をそれぞれ設定することにより、制限が有効となります。この3つは似通った点があるためまだ使ったことがない状態であるとイメージしづらいところがありますが、5W1Hの形式を使って表現すると多少分かりやすくなります。セキュリティプリンシパルは「who」、ロール定義は「how(あるいはwhat)」、スコープは「where」として表すことが可能です。

「who」に当たるセキュリティプリンシパル

誰に対してアクセス権の設定をしたいかという部分にあたりますが、この「誰」の対象は、ユーザー、グループ、サービスプリンシパル、マネージドIDの4つです。ユーザーやグループは人をイメージしやすいので問題ないと思われますが、初めてAzure RBACに触れる方はサービスプリンシパルやマネージドIDの正体がわからないかもしれません。マネージドIDは名称にIDと付いているように、Azure ADで管理されているIDのことを指します。サービスプリンシパルも、アプリケーションやサービス等がAzureで動作する場合に使用されることとなる「セキュリティID」のことを指しています。Windowsのパソコンやサーバーでイベントビュアーを見ると、様々なログに対して一つ一つIDが付与されているのを見たことがある人もいるかもしれませんが、そちらに似たものをイメージしてもらえれば問題ありません。サービスプリンシパルには、アプリケーションIDとパスワードもしくは証明書が割り当てられています。なお、マネージドIDを発行するAzure ADとは、オンプレミスのActive Directoryとの連携も可能なユーザー管理サービスのことです。また、実はユーザーや各種デバイスにもIDが割り当てられています。

「how(あるいはwhat)」に当たるロール定義

前提として、ロールの割り当てを行う際はあらかじめ「Microsoft.Authorization/roleAssignments/write」へアクセスできる状態にしておく必要があります。Azure RBACの初期状態から提供されている「組み込みロール」として代表的なものは、所有者(Owner)、共同作成者(Contributor)、閲覧者(Reader)の3つです。所有者は全てのAzureリソースへのアクセス権があり、ユーザー権限の設定が可能なロールです。共同作成者は、Azureリソースの作成や削除、管理が可能なロールです。閲覧者は、操作や管理は行えないものの閲覧のみを許可されるロールです。Excelやスプレッドシート等でデータの閲覧はできるものの入力しようとしたらできなかったという経験をお持ちの人がいるかと思いますが、この読み取り専用の状態が「閲覧者」です。

なお、はじめにロールは70種類以上あると紹介しましたが、全てのAzureリソースに対してアクセス可能なロールは以上の3つのみです。その他のロールは全て特定のAzureリソースにのみアクセス可能なロールとなることを覚えておいてください。

ロールはそもそも複数のアクセス権を組み合わせたものであり、組み合わせを自由にカスタマイズして「カスタムロール」を作成することも可能です。基本的には組み込みロールを編集して必要な権限を追加していくことになりますが、データフォーマットの一つである「JSON」を利用して作成することも可能です。

ロールは定義しただけでは何もできないため、全ての定義が完了したら必要なロールをセキュリティプリンシパルに対して適用しましょう。また、ロールは複数割り当てることが可能ですがロールは引き算されることがないため、例えば所有者と閲覧者のロールを割り当てた場合は、結果的に所有者権限となることを覚えておきましょう。その他のロールを知りたい方は、Microsoft Azure公式サイトの「Azure 組み込みロール」というページを見ると全て詳細を確認できるようになっています。ネットワーク関連、Storage関連、Web関連とジャンルごとに分けられているので、特定の部分で込み入ったロールを割り当てたいという時は役立つことでしょう。

「where」に当たるスコープ

最後はスコープですが、スコープは複数のサブスクリプションを管理する「管理グループ」、複数のリソースグループを管理する「サブスクリプション」、複数のリソースを管理する「リソースグループ」、個々のAzureリソースを管理する「リソース」という4つが定義されています。以上のように見ると、「管理グループ」が一番範囲が広く、「リソース」が狭いということがわかっていただけることでしょう。そのため、管理グループに設定することでサブスクリプション、リソースグループ、リソースの全てが対象となります。

なお、ロールにおいてはカスタマイズしたカスタムロールの作成が可能なことを述べましたが、カスタムロールの場合はサブスクリプション、リソースグループの2種類のスコープしか選択できないことにご注意ください。

近年でこそ一般的になっている「サブスクリプション」という言葉ですが、念のためここで言うサブスクリプションが何を指しているかも解説します。Microsoft製品で言うサブスクリプションとはソフトウェアの提供形態であり、利用期間、ユーザー数によって使用料金が発生します。しかし、Microsoft AzureにおけるサブスクリプションはソフトウェアやAzure上のサービスを指しているというより、単純にリソースをまとめたリソースグループよりさらに大きな枠のことを表しています。今回詳細は省きますが、このサブスクリプションという概念があることによってAzure Resource Manager内のRBACにてアクセス制御が可能な状態となります。

サブスクリプションの概念について解説したついでに、「Azureリソース」「リソースグループ」についても解説を加えます。Azureリソースとは、仮想マシン、仮想ネットワーク、ストレージ アカウントといったエンティティ(あるいはオブジェクト)のことを指しており、Azure上の一機能、一プログラムと言い換えることができます。リソースグループは単純にAzureリソースのまとまりであり、Azureリソースは必ずいずれかのリソースグループに属する必要があります

RBACの設定方法を紹介

今回は、仮想マシンの停止・起動・再起動が行える権限を付与したユーザーの設定を想定します。設定する際は、統合コンソールのGUI「Azure portal 」にアクセスをします。前述したように最初にロールの定義を行いますが、今回はカスタムロールを作成することになるのでAzure portal の画面左側にある「アクセス制御 (IAM)」の 「+ 追加」をクリックし、その中から「カスタムロールの追加」をクリックしてください。

表示された画面の「基本」タブ内にある「カスタムロール名」や「説明」を任意の内容で入力したら、「アクセス許可」のタブに移ります。画面下部にある「アクセス許可の追加」をクリックすると、アクセス許可を検索する画面が表示されるます。今回は検索欄で「Microsoft.Compute/virtualMachines/read」「Microsoft.Compute/virtualMachines/start/action」「Microsoft.Compute/virtualMachines/deallocate/action」「Microsoft.Compute/virtualMachines/restart/action」の4つを順番に検索し、検索結果が出た際はそれぞれ対象のアクセス許可にチェックを入れ、追加をクリックするという操作を繰り返してください。4つ全ての追加が完了したら実際に追加されているかを最後に確認し、「作成」をクリックしたらカスタムロールの作成は完了です。作成後は反映まで数分時間がかかる場合もあるため少し待ちましょう。また、アクセス許可追加後は「JSON」のタブをクリックするとJSONのフォーマットが確認できるようになり、そこから編集も可能となります。

続いて、作成したカスタムロールをユーザーに割り当てます。再度「アクセス制御 (IAM)」をクリックし、今度は「+ 追加」から「ロールの割り当ての追加」をクリックします。「ロール」タブをクリックすると先ほど作成したカスタムロール含めた全てのロールが表示されるため、作成したカスタムロール名を選択してください。

「メンバー」タブに移り「+ メンバーを選択する」をクリックすると、画面右側に「メンバーを選択する」という欄と共にユーザーが表示されるため、作成したカスタムロールを割り当てたいユーザーまたはグループを選択します。次に「レビューと割り当て」タブをクリックし、左下の「レビューと割り当て」ボタンをクリックします。少し待つと「ロールの割り当てが追加されました」と表示され、操作完了となります。

以上の設定が完了したら、実際にAzure portal上で停止・起動・再起動の操作が行えるか試してみてください。なお、カスタムロールが正常に反映されておらずエラーが出る場合は、一度Azure portalからログアウトし、ログインし直してみることをおすすめします。

Azure RBACでのアクセス制御はそこまで難しい作業ではないことがわかっていただけたことでしょう。LinuxOSのようにコマンド操作を行うことなく画面を見ながらマウス操作で完結できるため、初心者の方でも操作しやすいです。ぜひ今回の手順を参照して実際に操作を試し、その他様々なロールの割り当てに挑戦してみてはいかがでしょうか。

まとめ

Microsoft Azureにおいて適切なアクセス制御は欠かせませんが、その場しのぎで後先考えずにセキュリティプリンシパル、ロール、スコープを設定してしまうと、管理者自身が把握できないほど複雑な状態になりかねません。そのためシステム開発における初期段階となる「要件定義」の段階で権限について方針を定めておいたうえで、さらに変更・追加を行う際のルール等もあらかじめ決めておくことをおすすめします。

また、それぞれの要素や設定方法を正しく理解していないと、思わぬ情報流出や誤操作が発生してしまう可能性もあります。Azure RBACについてはMicrosoftの公式サイト内にもまとまったドキュメントがあるので、この記事を読み終えた後はそちらのドキュメントも参考にして学習することをおすすめします。今回の記事をきっかけにAzure RBACを正しく理解し、クラウドエンジニア、サーバーエンジニアとしてのステップアップを目指してみてはいかがでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です