Azure Automation の RunBook で Add-AzureAccount を使用する場合の注意
寒くなってまいりました。PowerShell 使ってますか?暖かくなりますよ。たぶん。
Ch9 に PowerShell 日本語専門チャネルを作りましたMastering Windows PowerShell for Japanese 以下の記事は、動画でも解説していますので、デモンストレーションとともにご覧ください。 #01 Azure Automation 概要と Add-AzureAccount 使用時の注意点 |
PowerShell から Azure サブスクリプションに接続するには Add-AzureAccount コマンドレットを使用します。
Add-AzureAccount をそのまま実行すると、以下のようなサインイン画面が表示されます。
しかし、Azure Automation 上からスクリプトを実行する場合、資格情報の入力を省きたいものです。自動化ですから当然です。その場合は、-Credential パラメタを使用するのが定石です。
Azure Automation には「アセット」として「資格情報」を保存しておくことができます。
例えば、Azure サブスクリプションの管理者アカウントを「資格情報」アセットとして登録しておけば、Azure Automation の Runbook からアセット名を指定するだけで呼び出すことができて便利です。
ただ、1点注意があります。
-Credential に指定できるアカウントは「組織アカウント」だけなのです。
しかし、Azuer サブスクリプションの管理者は、規定ではマイクロソフトアカウントです。hotmail.com とか outlook.jp とかのアレです。これを –Credential の引数として使用すると、以下のようにエラーになります。
同じエラーは 手元のPowerShell のコンソールからも確認することができます。
ためしに、PowerShell コンソールを起動して以下のコマンドレットを実行してみてください。
$cred = Get-Credential
以下のようにダイアログが表示されるので、Azure サブスクリプションの管理者であるマイクロソフトアカウントを指定してください。
さらに、以下のように Add-AzureAccount で、上で保存して資格情報を使用してみます。
Add-AzureAccount -Cred $cred
すると、以下のようなエラーが出力されるはずです。
Add-AzureAccount : -Credential parameter can only be used with Organization ID credentials. For more information, please refer to https://go.microsoft.com/fwlink/?linkid=331007&clcid=0x409 for more information about the difference between an organizational account and a Microsoft account.
このエラーを回避するにはエラーメッセージに書かれているとおり、Organizatin ID(組織アカウント)を使用する必要があります。
組織アカウントとは、Azure Active Directory に登録されているアカウントです。
Azure Active Directory を初めて使う方のために、手順を以下に示します。
※ 読むのが面倒な方は、ビデオで詳細に解説しているので確認してみてください。
https://manage.windowsazure.com/ にログオンします
テナントを作成
一時パスワードが発行されるので、https://myapps.microsoft.com/ にアクセスして、パスワードを変更
Azure ポータルに戻る
これで完了だと思ったら大間違いです。試しに、先ほどのように Get-Credential で資格情報を設定して、Add-AzureAccount でサインインしてみてください。以下のようなエラーが表示されます。
Add-AzureAccount : 指定されたキーはディレクトリ内に存在しませんでした。
これは、登録した全体管理者(admin)がサブスクリプションの管理者権限を持たないことを意味しています。そこで、さらなる設定を行います。ここからが難しいところです。
Azure ポータルにもどって、「設定」を開きましょう。
以下のように、ディレクトリがマイクロソフトアカウントに設定されていることがわかります。
これを、先ほど作成した Azure AD テナントに書き換えます。画面の下にある「ディレクトリの編集」をクリックします。
ディレクトリとして、先ほど作成したテナントを選択します
再度「設定」をクリックして、テナントが選択されていることを確認してください
ここまできたら、あとひときです。ここまでの設定により、「サブスクリプションを管理者」として「テナントの管理者(admin)」を設定することができるようになりました。「設定」の画面で「管理者」をクリックしてください。
まだ、hotmail アカウントだけが登録されていることがわかります。ここに、admin を追加しましょう。画面の下にある「追加」をクリックしてください。
作成したテナントの admin を指定してサブスクリプションをチェックしましょう
これで、サブスクリプションの共同管理者として、テナントの全体管理者 admin を設定できました。
この状態で、PowerShell のコンソールから 再度 Get-Credential につづいて、Add-AzureAccount を実行してみてください。今度は成功するはずです。
ここまできたら、テナントに登録した Admin を Azure Automation のアセットとして登録しましょう。
そして、スクリプト内の資格情報を、登録した Admin に変更します。
これで Azure Automation 上でも正常に実行できるはずです。
Azure AD を知らないとちょっと難しいですね。