すてにゃん氏の技術ぶろぐ

技術っぽいこと書きます

Microsoft AzureにおけるActive Directory周りについて

最近仕事でAzureを触る機会があったので、Azure特有の概念などについてまとめておきたいと思います。

Active Directory

Active DirectoryはIDやディレクトリを管理するためのサービスであり、認証や権限周りの管理に便利です。
docs.microsoft.com

また Azure AD には、Multi-Factor Authentication、デバイスの登録、セルフサービスのパスワード管理、セルフサービスのグループ管理、特権を持つアカウントの管理、ロール ベースのアクセス制御、アプリケーション使用状況の監視、機能豊富な監査とセキュリティの監視、アラートなど、一連の ID 管理機能も用意されています

https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-whatis

企業で社員が利用しているサービスのアカウントの権限・認証周りを制御する際に便利そうです。

Application

Azure Active DirectoryではApplicationというものを作成することが可能です。
docs.microsoft.com

Active DirectoryにApplicationを追加すると、そのApplicationに対してどのようなアクセス権限が必要かなど設定することができる上、ユーザ側も認証が楽になります。

Service Principal

ユーザーの資格情報ではなく、Applicationの資格情報で必要な操作をしたほうがセキュリティ的にも安心です。

docs.microsoft.com

アプリケーションでリソースにアクセスしたり変更を加えたりするには、Azure Active Directory (AD) アプリケーションをセットアップして、そこに必要な権限を割り当てる必要があります。 この方法は、お客様自身の資格情報でアプリを実行するよりも推奨されます。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-create-service-principal-portal

上記で作成した特定のAzureリソースにアクセスする際利用するIDのことをService Principalと呼びます。Service Principalを利用してサインインしたりAzureのリソースにアクセスする際に以下の値を使用します。

  • Tenant ID
  • Client ID
  • Client Secret

Tenant ID (i.e. Directory ID) は対象のActive DirectoryのIDに対応します。

Client ID (i.e. Application ID) は対象のActive DirectoryのApplicationのIDに対応します。

Client Secret (i.e. Password) はパスワードであり、こちらは期限をつけたり変更したりできます。

AzureのService Principalの作成は現時点だとAzure CLI 2.0を利用して作成するのが一番楽だと個人的には感じました(Azure CLI 1.0 だともう少し手順は多くて紛らわしいので2.0をおすすめします。)
docs.microsoft.com

具体的にはこんな感じです:

$ az ad sp create-for-rbac --role Contributor --years <YEARS>

上のコマンドが何をやっているのかというと、 (azコマンドで対象のアカウントにログイン済みだと仮定して、)そのAzureのDirectoryに対してService Principalを作成し、Contributorというアクセス権限を指定し、Client Secretも自動生成しています。実行するとTenant IDとClient IDと生成されたClient Secretが返ってくるのでそのまま使うことができます(Client Secretについてはあとで再び確認することはできないのでなくしてしまったなどあれば再生成しましょう)。

--role を指定するとアクセス権限を明示的に設定できます(リードオンリーにしたい場合はReaderにするなど)。また、Client Secret (Password) に関しては何も指定せずに作るとデフォルトで有効期限が1年となるので、気になる場合は--yearsで指定してあげると良いかもしれません。

ちなみにAzureのPortal画面経由でアクセス権限を設定する際はSubscriptionのIAM Roleの設定から指定することができます。リードオンリー (Reader) なユーザーを作ることもできるし、Applicationに対しても同じ画面で設定できます。

アクセス権限について詳しく知りたい方は以下をご参照ください。デフォルトのContributorやReaderの他に、カスタムなものも作成可能のようです。
docs.microsoft.com

私は現在Mackerelというサービスの開発をしていますが、MackerelのAzureインテグレーションでも今回説明したActive DirectoryやService Principalの仕組みを利用してAzureのリソースにアクセスしメトリックの収集を行なっています。以下のドキュメントにて、Azure CLI 2.0もしくはAzure Portal経由でのMackerelとの連携方法について書いてあるので興味のある方はご確認ください。
mackerel.io