PowerShell スクリプトで Azure Automation を使用して学んだ教訓

PowerShell スクリプトで Azure Automation を使用して学んだ教訓

Debugging, Cost, and Tracking for Azure Automation PowerShell

お気づきかもしれませんが、私は最近、Microsoft 365 PowerShell モジュールで Azure オートメーションを活用する方法を調査し、 Microsoft Graph PowerShell SDK with Run As アカウント 宛先 Exchange Online によるマネージド ID.

私はまだ Azure Automation PowerShell の初心者であることを喜んで認めていますが、マネージド ID などのトピックの内外を調査し、Azure インフラストラクチャでジョブを実行するために物事がどのように組み合わさっているかを理解することを楽しんできました。Azure Automation での作業は、対話型で使用するために PowerShell スクリプトをまとめるのとは確かに異なりますが、リソースを大量に消費するスクリプトをスケジュールに基づいて実行する優れた (そして安全な) 方法であるため、Microsoft 365 テナント管理者が習得する必要がある手法です。あるいは、設定を調整するために定期的に実行する必要があるスクリプト (チーム メンバーが通常のチャネルを作成できないように新しいチームを更新するスクリプトなど) もあります。いずれにせよ、この1年ほどで私が学んだ教訓を3つご紹介します。

Azure Automation PowerShell のデバッグは異なります

Azure 運用手順書でのコードのデバッグは、より興味深い課題の 1 つです。運用手順書 (PowerShell スクリプト) を実行すると、基本的にヘッドレス サーバー上で実行されます。コードは実行されるか実行されないかのいずれかであり、対話的にスクリプト内のコマンドをステップ実行する方法はありません。コードが期待どおりに実行されない場合は、コードをセグメントに分割して問題が発生した場所を特定し、古い時間の出力ステートメントを挿入して何が問題になっているかについての手がかりを得る必要があります。

マイクロソフトのドキュメント 出力ストリームを使用して、進行状況と処理に関する情報をログに記録することをお勧めします。それはあなたが挿入すると言う洗練された方法です 書き込み出力 変数の詳細を出力するコード内のコマンド。私は1980年代にCOBOLプログラマーだったときにPRINTステートメントでこれをやりましたが、今日でもそれをやっています。テクノロジは変更されますが、一部のデバッグ手法はそのままです。これは、スケジュールされたジョブの出力と、テスト ウィンドウで運用手順書を実行するときの両方で機能します。

図 1 は、 Microsoft 365 グループの有効期限レポート.スクリプトの背後にある原則を説明する元の記事は、こちらから入手できます。

Azure オートメーションのスケジュールされた運用手順書からの出力

Azure Automation PowerShell
図 1: Azure オートメーションのスケジュールされた運用手順書からの出力

Azure Automation PowerShell のコストは最小限に抑えられます

Azure Automation を使用するには、有料の Azure サブスクリプションが必要です。サブスクリプションは、運用手順書の格納に使用される少量のストレージや、コードを実行するためのコンピューティング コストなどのコストを支払います。もともと、私は、特にスケジュールされたジョブを実行するときに、かなりのコストを積み上げるのではないかと心配していました。しかし、実際のコストは非常に控えめで、ほとんどの月は合計2、3ドルで終わります。

要するに、Azure オートメーションで PowerShell スクリプトを実行しても、リソースを大量に消費するスクリプトを非常に頻繁に実行しない限り、銀行が壊れる可能性は低いということです。しかし、それを言う際には、コストプロファイルを理解して満足するまで、コストに目を光らせておくことは常に良い考えです。Azure オートメーションへの支出については、少なくとも私がやっている仕事については、もはや心配していないと言えば十分です。

Tracking Access for Azure Automation PowerShell

テナント管理者は、何が起こっているのかを知りたがる傾向があります。Azure オートメーション アカウントの使用状況を把握するために、これらのアカウントのサービス プリンシパルの Azure AD サインイン ログを分析できます。たとえば、このコードでは、Microsoft Graph PowerShell SDK を使用して、サービス プリンシパル イベントの監査レコードを接続して取得します。次に、レコードをグループ化して、各サービス プリンシパルのイベント数を表示します。

Connect-MgGraph -Scopes "AuditLog.Read.All","Directory.Read.All"
Select-MgProfile Beta
[array]$AuditRecords = Get-MgAuditLogSignIn -Filter "(signInEventTypes/any(t:t eq 'servicePrincipal'))" -Top 2000 -Sort "createdDateTime DESC"
$AuditRecords | Group-Object ServicePrincipalName | Sort-Object count -Descending | Format-Table Name, Count

Name                                                              Count
----                                                              -----
ExoAutomationAccount_Y6LgjDYIfPnxmFzrqdbaClsnTD/gN4BNnVMywiju5hk=   119
Graph Microsoft 365 Groups Membership Report                         84
Clean up Exo Mailboxes                                                6
PS-Graph                                                              6
ServiceCommunications                                                 5
PopulateOrgContacts                                                   2

リソースへの各アクセス (グラフへのサインインなど) によって、監査レコードが生成されます。

$AuditRecords | ? {$_.ServicePrincipalName -eq "Clean up Exo Mailboxes"} | Format-Table ServicePrincipalName, CreatedDateTime, ResourceDisplayName, ipaddress

ServicePrincipalName   CreatedDateTime     ResourceDisplayName IPAddress
--------------------   ---------------     ------------------- ---------
Clean up Exo Mailboxes 12/08/2022 05:33:12 Microsoft Graph     51.171.212.123
Clean up Exo Mailboxes 07/08/2022 15:32:34 Microsoft Graph     51.171.212.123
Clean up Exo Mailboxes 03/08/2022 16:24:01 Microsoft Graph     78.17.104.68
Clean up Exo Mailboxes 02/08/2022 23:23:50 Microsoft Graph     78.17.104.68
Clean up Exo Mailboxes 02/08/2022 17:08:26 Microsoft Graph     51.171.212.123
Clean up Exo Mailboxes 01/08/2022 20:41:35 Microsoft Graph     51.171.212.123

渡される際に、グラフベースの Microsoft 365 グループメンバーシップレポートで使用されるアプリのサービスプリンシパルのサインインの数が多いのは、公開時に行った間違いが原因です。 GitHub のレポートスクリプト.不幸なことに、テナントのテナント識別子とアプリ識別子(現在は修正済み)を含めましたが、人々はそれらの値を使用してスクリプトを実行しようとします。先週、私は失敗ステータスのサインインログを見て発見したように、多くの場所からサインインの失敗を見てきました。

ForEach ($R in $AuditRecords) {
 $Status = $R.Status.ErrorCode
 $City = $R.Location.City
 If ($Status -ne 0) {
 Write-Host ("{0} Status {1} City {2}" -f $R.CreatedDateTime, $Status, $City, $R.IPAddress) }
}
26/08/2022 20:20:49 Status 7000215 City Sanger
26/08/2022 18:16:44 Status 7000215 City Edmonton
25/08/2022 19:34:10 Status 7000215 City Montreal
25/08/2022 19:33:47 Status 7000215 City New Berlin
25/08/2022 19:24:09 Status 7000215 City Montreal
25/08/2022 11:16:23 Status 7000215 City Leigh
25/08/2022 11:11:15 Status 7000215 City Amsterdam
25/08/2022 10:42:51 Status 7000215 City London
25/08/2022 07:54:12 Status 7000215 City Frederiksvaerk
24/08/2022 19:44:03 Status 7000215 City Montreal
23/08/2022 20:57:05 Status 7000215 City Wellington
23/08/2022 13:43:48 Status 7000215 City Kobenhavn

スクリプトの続きテナントに登録されているアプリと一致するように値を変更するように人々に指示するメモがありますが、無視されているようです。この物語の教訓は、一般に公開されているスクリプトで承認の詳細を常に不明瞭にすることです。

マネージド ID の Azure AD サインイン レコードは、次のように取得されます。

[array]$AuditRecords = Get-MgAuditLogSignIn -Filter "(signInEventTypes/any(t:t eq 'servicePrincipal'))" -Top 2000 -Sort "createdDateTime DESC"

これらのレコードは、マネージド ID によって実行されるスクリプトが使用するリソース (サービス) を示します。たとえば、これらのレコードは、Teams への接続 (管理アプリとして)、グラフ要求の実行、Azure Key Vault からのシークレットの取得、Azure 管理 API を使用したアクセス トークンの取得を行った呼び出しによって生成されます。

$AuditRecords | Format-Table CreatedDateTime, ResourceDisplayName

CreatedDateTime     ResourceDisplayName
---------------     -------------------
30/08/2022 15:35:02 Skype and Teams Tenant Admin API
30/08/2022 15:35:01 Microsoft Graph
30/08/2022 15:35:00 Azure Key Vault
30/08/2022 15:35:00 Azure Key Vault
30/08/2022 15:35:00 Azure Key Vault
30/08/2022 15:34:49 Windows Azure Service Management API

Azure Automation PowerShell の詳細

管理者が取得および分析して、テナントでの Azure オートメーションの使用状況を理解するのに役立つ大量の情報を利用できます。私はまだ私の調査を終えていません。Azure オートメーションの他の興味深い側面を調査することを期待しています。そして、私がそうするとき、私は私の発見を共有します。


このような洞察は簡単には得られません。テクノロジーを知り、舞台裏の見方を理解する必要があります。の知識と経験から利益を得る Office 365 for IT プロフェッショナル Office 365とより広いMicrosoft 365エコシステムをカバーする最高の電子書籍を購読することでチーム。

未分類

Posted by admin