Azure Automation の RunBook で Add-AzureAccount を使用する場合の注意

寒くなってまいりました。PowerShell 使ってますか?暖かくなりますよ。たぶん。

Ch9 に PowerShell 日本語専門チャネルを作りましたMastering Windows PowerShell for Japanese

以下の記事は、動画でも解説していますので、デモンストレーションとともにご覧ください。

#01 Azure Automation 概要と Add-AzureAccount 使用時の注意点

PowerShell から Azure サブスクリプションに接続するには Add-AzureAccount コマンドレットを使用します。

Add-AzureAccount をそのまま実行すると、以下のようなサインイン画面が表示されます。

image

しかし、Azure Automation 上からスクリプトを実行する場合、資格情報の入力を省きたいものです。自動化ですから当然です。その場合は、-Credential パラメタを使用するのが定石です。

Azure Automation には「アセット」として「資格情報」を保存しておくことができます。

image

例えば、Azure サブスクリプションの管理者アカウントを「資格情報」アセットとして登録しておけば、Azure Automation の Runbook からアセット名を指定するだけで呼び出すことができて便利です。

image

ただ、1点注意があります。

-Credential に指定できるアカウントは「組織アカウント」だけなのです。

しかし、Azuer サブスクリプションの管理者は、規定ではマイクロソフトアカウントです。hotmail.com とか outlook.jp とかのアレです。これを –Credential の引数として使用すると、以下のようにエラーになります。

image

同じエラーは 手元のPowerShell のコンソールからも確認することができます。

ためしに、PowerShell コンソールを起動して以下のコマンドレットを実行してみてください。

$cred = Get-Credential

以下のようにダイアログが表示されるので、Azure サブスクリプションの管理者であるマイクロソフトアカウントを指定してください。

image

さらに、以下のように 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 を初めて使う方のために、手順を以下に示します。

※ 読むのが面倒な方は、ビデオで詳細に解説しているので確認してみてください。

  1. https://manage.windowsazure.com/ にログオンします

  2. Active Directory をクリック
    image

  3. テナントを作成

  4. 「ユーザー」タブをクリックして、「全体管理者」を作成
    image

  5. 一時パスワードが発行されるので、https://myapps.microsoft.com/ にアクセスして、パスワードを変更

  6. Azure ポータルに戻る

    これで完了だと思ったら大間違いです。試しに、先ほどのように Get-Credential で資格情報を設定して、Add-AzureAccount でサインインしてみてください。以下のようなエラーが表示されます。

    Add-AzureAccount : 指定されたキーはディレクトリ内に存在しませんでした。

    これは、登録した全体管理者(admin)がサブスクリプションの管理者権限を持たないことを意味しています。そこで、さらなる設定を行います。ここからが難しいところです。

  7. Azure ポータルにもどって、「設定」を開きましょう。

    image

  8. 以下のように、ディレクトリがマイクロソフトアカウントに設定されていることがわかります。

    image

  9. これを、先ほど作成した Azure AD テナントに書き換えます。画面の下にある「ディレクトリの編集」をクリックします。

    image

  10. ディレクトリとして、先ほど作成したテナントを選択します

    image

  11. 再度「設定」をクリックして、テナントが選択されていることを確認してください

    image

  12. ここまできたら、あとひときです。ここまでの設定により、「サブスクリプションを管理者」として「テナントの管理者(admin)」を設定することができるようになりました。「設定」の画面で「管理者」をクリックしてください。

    image

  13. まだ、hotmail アカウントだけが登録されていることがわかります。ここに、admin を追加しましょう。画面の下にある「追加」をクリックしてください。

    image

  14. 作成したテナントの admin を指定してサブスクリプションをチェックしましょう

    image

  15. これで、サブスクリプションの共同管理者として、テナントの全体管理者 admin を設定できました。

    image

  16. この状態で、PowerShell のコンソールから 再度 Get-Credential につづいて、Add-AzureAccount を実行してみてください。今度は成功するはずです。

    image

ここまできたら、テナントに登録した Admin を Azure Automation のアセットとして登録しましょう。

image

そして、スクリプト内の資格情報を、登録した Admin に変更します。

image

これで Azure Automation 上でも正常に実行できるはずです。

image

Azure AD を知らないとちょっと難しいですね。