Office365の管理をPowerShellから行う際に、クレデンシャルを上手に使う
Office365を使うときは大抵以下のようなステップを踏む。
1. ブラウザを起動して https://portal.office.com/ へアクセスする。
2. サインイン画面が出てくるのでメールアドレスを入力する。
3. パスワードを入力する。
4. ログインする。
対して、管理者として使う場合はPowerShellから使う機会が多い。ブラウザと同様の手順を踏襲すると以下のようになる。
a-1. powershellを立ち上げる。
a-2. クレデンシャル取得コマンドを入力する。
$credential = Get-Credential
a-3. クレデンシャルを入力する。
クレデンシャルとは:ID/パスワードの組み合わせなど、サービスにログインするために必要な情報。
a-4. ログインしてモジュールを読み込む。
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection
Import-PSSession $session
a-5. 管理者コマンドを実行する。(例:メールボックスの情報を取得)
Get-Mailbox -identity funinemo@hotmail.com
管理者アカウントでの作業は同じことの繰り返しが多い。a-1~a-5の手順を行う場合、邪魔になるのがa-3のクレデンシャル情報の入力。問題点は2つ。
・手入力が手順に入ることにより自動化が出来ない。
・ログイン情報を記録しておかねばならず、セキュリティリスクに繋がる。
こういった要件を満たすために、PowerShellでは、パスワードをセキュアに保存する事が可能となっている。生成したパスワードは他人から読み取る事が出来ず、また、システムが安全かつ問題なく情報を利用出来るようになっている。次のようにすればよい。
b-1. 新しいpowershellを立ち上げる。
b-2. クレデンシャル取得コマンドを入力する。
$credential = Get-Credential
b-3. クレデンシャルを入力する。
b-4. パスワードをセキュアに保存する。ファイルを開くと暗号化されている事がわかる。
$credential.Password | ConvertFrom-SecureString | Set-Content "password.txt"
ここまでが事前準備として必要な作業。これ以降は実際の管理において実行するコマンド。
b-5. ファイルからパスワードを安全に取得する。
$password = Get-Content "./password.txt" | ConvertTo-SecureString
b-6. クレデンシャルを生成する。
$credential = New-Object System.Management.Automation.PsCredential "funinemo@hotmail.com", $password
b-7. ログインしてモジュールを読み込む。
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection
Import-PSSession $session
b-8. 管理者コマンドを実行する。(例:メールボックスの情報を取得)
Get-Mailbox -identity funinemo@hotmail.com
先のa-3の手入力で得られる情報と、b-5~b-6のコマンドは同等。これにより、手順の自動化による効率化とリスクの軽減を両立させる事が可能となる。
※参考ドキュメント
SecureStringは使えないモジュールもあるので万能ではない。
Windows7の頃はPowerShellのバージョン違い等、環境の差異でマニュアル通りに出来ない事もあったが、Windows10以降はその心配も不要と思われる。
上記に2020年10月13日に基本認証の無効化とある。どれくらい影響あるんだろうか。それに関連して、調べ方、認証フローなど、いろいろ情報あり。
この記事が気に入ったらサポートをしてみませんか?