🐈

Azモジュール×ユーザープリンシパルでは非対話的ログインはできない

2021/05/21に公開

はじめに

Azureの操作でよく使われるPowershellのAzモジュールでは、以前はユーザープリンシパルを使って非対話ログインができたようです。すなわち、Azureの操作をコード化するにあたって、ユーザープリンシパルを使って完全自動化できたということです。
しかし、Azモジュールのアップデートに伴い、非推奨→使用不可と推移してきたようなので、現在ではユーザープリンシパルを使ったログイン操作を自動化することはできません。
しかし、ググると昔の情報も残っていて混乱を生むので、2021年5月時点で確認できた情報を残します。

以前できたこと

以前は"-credential"オプションを使うことで、ユーザープリンシパルのパスワードをコマンドで投入して、非対話ログインができました。
※ログインユーザーとパスワードを変数に入れて、ConvertTo-SecureStringし、New-Object System.Management.Automation.PSCredentialしたものを、

Connect-AzAccount -Credential $credential

こんな感じで。

しかし、現在では下記のドキュメント通り、削除された…とありますので、完全にできなくなっています。
https://docs.microsoft.com/ja-jp/powershell/azure/authenticate-azureps?view=azps-4.8.0

今やれること

上記のドキュメントによれば、Powershell+Azモジュールでログインするにあたり、代替手段は2つあります。

対話操作でログインを行う

身も蓋もないですが、一度ブラウザを使って認証を通すことでユーザープリンシパルを使ってログインできます。

サービスプリンシパルを使う

サービスプリンシパルによる認証であれば、現時点でもログインの自動化が可能です。
認証方式としては、証明書による認証だけでなく、パスワード方式での認証も可能なようです。
どちらの認証方式を使うにしても、KeyVaultなどのセキュリティが担保されたストアにシークレットを保存した上で、何かあった場合に無効化やローテーションができるようにするところは変わりません。
パスワード方式で、わかりやすいパスワードを設定して人間が覚えて使うようなやり方をしてしまうと、ユーザープリンシパルでの自動ログインが禁止された意味が無くなってしまいますから…

おわりに

今回は何か目新しいことを確認したわけではないのですが、古い情報をリセットする意図で書きました。
なお、この情報が嘘になったときには、コメントに残してもらえれば幸いです。

Discussion