Azure サービス プリンシパルの作成方法

Service Principal (SP) は、主にプログラムからの Azure リソース使用 (Azure PowerShell、Azure REST API など) や、Auzre DevOps との連携などで使用する(通常のアカウントも使えるけど)。

用途としては、アクセス制限を行った、プログラム専用のアカウントみたいな感じ。 通常の Azure アカウントで認証した方が手軽だったりするが、セキュリティ的にあまりよろしくなかったり、会社の場合は当該アカウントが削除された場合に、使用しているプログラムも同時に動かなくなる可能性があると言うこともあり、プログラムからのアクセスは SP による認証が推奨されているらしい。

なお、Azure AD で認証用のアカウントを作るということもあり、SP アカウントを作成するには管理者レベルの権限が必要になるはずなので、その点は注意。

作成手順

  1. Azure ポータルで [Azure Active Directory] - [アプリの登録] - [+新規登録] の順にクリック。いきなり分かりづらいが、ここでの「アプリの登録」が「サービス プリンシパルの登録」を意味していると思って OK

    f:id:poke_dev:20191124201815p:plain

  2. 名前にサービスプリンシパル名(アカウント名みたいなもの)を入力し、他は既定の設定で [登録] をクリック

    f:id:poke_dev:20191124202107p:plain

  3. 作成成功したら、概要画面で「アプリケーション (クライアント) ID」と「ディレクトリ (テナント) ID」をメモしておく

    f:id:poke_dev:20191124211908p:plain

  4. [証明書とシークレット] - [+新しいクライアント シークレット] の順にクリック

    f:id:poke_dev:20191124202805p:plain

  5. クライアント シークレットの追加ダイアログが表示されたら、「有効期限」で「なし」を選択し、[追加] をクリック。なお、ここでは無期限で登録しているが、定期的にパスワード変更をしたい場合は、適宜その期限を選択する

    f:id:poke_dev:20191124202937p:plain

  6. クライアント シークレット(パスワードみたいなもの)の値は、この時点でメモしておく(この後、参照不可になるため)

    f:id:poke_dev:20191124203444p:plain

  7. [サブスクリプション] で、サブスクリプション名とサブスクリプション ID をメモする

    f:id:poke_dev:20191124204044p:plain

  8. この SP を使用してアクセスしたいリソースを選択し(ここではサブスクリプションを選択)、[アクセス制御 (IAM)] - [+追加] - [ロールの割り当ての追加] の順にクリック

    f:id:poke_dev:20191124204553p:plain

  9. 「役割」は、必要最小限の権限を選択するのが望ましいが、よく分からない場合は取り敢えず「共同作成者 (= Contributor)」を選んでおけばたぶん大丈夫(操作、閲覧など、権限付与以外の全ての権限がある)。
    「選択」テキストボックスに先程作成した SP 名を入れて(ここで手入力しないと結果一覧に出てこないみたい)、そのすぐ下に検索結果が出てくるので先程作成した SP を選択し、[保存] をクリック

    f:id:poke_dev:20191124205301p:plain

以上で SP の作成と設定が完了。プログラムからはこの SP (とメモした情報) を使用して認証を行うことで、役割を設定した特定リソースへのアクセスのみが可能となる。

なお、ドキュメントによって各項目の呼び方が微妙に違っていたりして少し分かりづらいが、基本的には、「アプリケーション (クライアント) ID」がユーザー名みたいな扱いで、「クライアント シークレット」がパスワードみたいな扱いと考えれば問題ない。

注意点としては、追加した役割のみ使用可能だということ。SP 作成しただけではこの SP を使っても何も操作できないので、そこは注意。

後、メモした情報のうち、「クライアント シークレット (= パスワード)」についてはこの後はもう表示することできなくなるので、ちゃんとどこかに保存しておくこと。 もし忘れた場合は、クライアント シークレットを作り直す。

作成したサービスプリンシパルを使用して、Az モジュールでログインする場合は、以下も参照。