目的
仕事柄、 Azure xx への操作をするアプリケーション・サービスを触る機会があります。
最近は、構成管理ツールを使って、デモ環境をかんたんに作って、使用しないときには、クリーンにしたいと思い、以前利用していた Terraform で構築しようと思いつきました。
先駆者の情報を参考にアプリ登録をしていましたが、Azure CLI 2.0 (Preview) での情報がなかったので、自分メモ代わりにまとめることにしました。
環境
- Mac
 - Microsoft Azure (以降、Azure)
 
準備
Azure CLI 2.0 をインストール ガイドを参考にインストールします。ここでは、割愛します。
サービス プリンシパル登録
ログイン
ターミナルを起動し、以下のコマンドを実行して Azure へログインします。
$ az login
To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code XXXXXXXXX to authenticate.
そうすると、https://aka.ms/devicelogin にアクセスして、コードXXXXXXXXX を入力するよう、メッセージが出力されますので、指定された URL にアクセスします。
上図のような画面が表示されますので、ターミナルで表示されているコード `XXXXXXXXX` を入力します。入力コードが正しいと、自動で画面遷移します。
コードが正しければ`続行`ボタンをクリックします。 (上図のコードは、既に処理済みなので、無効です。。。)
Azure へのログイン画面が表示されたら、ご自身が利用されている ID とパスワードを入力してログインしましょう。

ログイン完了したら、画面を閉じても大丈夫です。ターミナルでは、しばらくすると、サブスクリプション一覧が JSON で返ってきているはずです。
サービス プリンシパル登録
az ad sp create-for-rbac コマンドを実行します。
$ az ad sp create-for-rbac -n "TEST1" --role Contributor
{
  "appId": "0d2a0c30-e8fe-47fd-80d7-xxxxxxxxxxxx",
  "displayName": "TEST1",
  "name": "http://TEST1",
  "password": "ac52783a-488c-45e6-8504-xxxxxxxxxxxx",
  "tenant": "1686c04e-9f16-487f-bf89-xxxxxxxxxxxx"
}
Azure 管理ポータルで確認すると、アプリの登録も完了していました。

サービス プリンシパルでログインできるか、ターミナルで確認してみます。
$ az login --service-principal -u "http://TEST1" -p <password> --tenant <tenant>
[
  {
    "cloudName": "AzureCloud",
    "id": "140b7311-XXXXXXX-43d7-a119-XXXXXXX",
    "isDefault": true,
    "name": "Microsoft Azure",
    "state": "Enabled",
    "tenantId": "1686c04e-XXXX-487f-bf89-XXXXXXXX",
    "user": {
      "name": "http://TEST1",
      "type": "servicePrincipal"
    }
  }
]
という具合にログインできました。
参考
この記事を書くにあたり、参考にしたページをまとめました。