透過 Azure 自動化和 Microsoft Graph 自動化 Microsoft Entra ID 控管工作
Azure 自動化是一項 Azure 雲端服務,可讓您將一般或重複性的系統管理和程序自動化。 Microsoft Graph 是 Microsoft Entra 功能的 Microsoft 統一 API 端點,可用來管理使用者、群組、存取套件、存取權檢閱和目錄中的其他資源。 您可以使用 Microsoft Graph PowerShell SDK,從 PowerShell 命令列大規模管理 Microsoft Entra ID。 您也可以包含 Azure 自動化中以 PowerShell 為基礎 Runbook 的 Microsoft Graph PowerShell Cmdlet,讓您可以從簡單的指令碼自動化 Microsoft Entra 工作。
Azure 自動化和 PowerShell Graph SDK 支援憑證式驗證和應用程式權限,因此您不需要使用者內容即可讓 Azure 自動化 Runbook 向 Microsoft Entra ID 進行驗證。
本文說明如何透過 Microsoft Graph PowerShell 建立查詢權利管理的簡單 Runbook,開始使用 Azure 自動化進行 Microsoft Entra ID 控管。
建立 Azure 自動化帳戶
提示
根據您開始的入口網站不同,適用本文中的步驟可能略有不同。
Azure 自動化為 Runbook 執行提供雲端託管的環境。 這些 Runbook 可以根據排程自動啟動,或是由 Webhook 或 Logic Apps 觸發。
使用 Azure 自動化會要求您擁有 Azure 訂用帳戶。
先決條件角色:Azure 訂用帳戶或資源群組擁有者
登入 Azure 入口網站。 請確定您可以存取 Azure 自動化帳戶所在的訂用帳戶或資源群組。
選取訂用帳戶或資源群組,然後選取 [建立]。 輸入 [自動化],選取 Microsoft 的 [自動化] Azure 服務,然後選取 [建立]。
建立 Azure 自動化帳戶之後,請選取 [存取控制 (IAM)]。 然後選取 [檢視此資源的存取權] 中的 [檢視]。 這些使用者和服務主體將能夠透過要在該 Azure 自動化帳戶中建立的指令碼,與 Microsoft 服務進行後續互動。
檢閱該處列出的使用者和服務主體,並確定其已獲授權。 移除任何未經授權的使用者。
在您的電腦上建立自我簽署金鑰組和憑證
為了使其可在不需要您個人認證的情況下運作,您所建立的 Azure 自動化帳戶將需要使用憑證自行向 Microsoft Entra ID 進行驗證。
如果您已經有金鑰組可將您的服務向 Microsoft Entra ID 進行驗證,以及您從憑證授權單位收到的憑證,請跳到下一節。
若要產生自我簽署憑證,
遵循如何建立自我簽署憑證 (選項 2) 中的指示,以使用其私密金鑰來建立及匯出憑證。
顯示憑證的指紋。
$cert | ft Thumbprint
匯出檔案之後,您可以從本機使用者憑證存放區移除憑證和金鑰組。 在後續步驟中,當憑證和私密金鑰上傳至 Azure 自動化和 Microsoft Entra 服務之後,您也會移除
.pfx
和.crt
檔案。
將金鑰組上傳至 Azure 自動化
您在 Azure 自動化中的 Runbook 會從 .pfx
檔案擷取私密金鑰,並將其用來驗證 Microsoft Graph。
在 Azure 自動化帳戶的 Azure 入口網站中,依序選取 [憑證] 和 [新增憑證]。
上傳稍早建立的
.pfx
檔案,並輸入您在建立檔案時所提供的密碼。上傳私密金鑰之後,請記錄憑證到期日。
您現在可以從本機電腦刪除
.pfx
檔案。 不過,請先不要刪除.crt
檔案,因為在後續步驟中會用到此檔案。
將 Microsoft Graph 的模組新增至您的 Azure 自動化帳戶
根據預設,Azure 自動化沒有任何針對 Microsoft Graph 預先載入的 PowerShell 模組。 您需要從資源庫新增 Microsoft.Graph.Authentication,然後新增其他模組到您的自動化帳戶。
在 Azure 自動化帳戶的 Azure 入口網站中,選取 [模組],然後 [瀏覽資源庫]。
在搜尋列中,輸入 Microsoft.Graph.Authentication。 依序選取模組、[匯入] 和 [確定],讓 Microsoft Entra ID 開始匯入模組。 選取 [確定] 之後,匯入模組可能需要幾分鐘的時間。 在 Microsoft.Graph.Authentication 模組匯入完成之前,請勿嘗試新增更多 Microsoft Graph 模組,因為其他模組會以 Microsoft.Graph.Authentication 做為必要條件。
返回 [模組] 清單,然後選取 [重新整理]。 一旦 Microsoft.Graph.Authentication 模組的狀態變更為 [可用] 之後,您即可匯入下一個模組。
如果您將 Cmdlet 用於 Microsoft Entra ID 控管功能 (例如權利管理),則請重複 Microsoft.Graph.Identity.Governance 模組的匯入程序。
匯入指令碼可能需要的其他模組,例如 Microsoft.Graph.Users。 例如,如果您是使用 Microsoft Entra ID Protection,您可能需要匯入 Microsoft.Graph.Identity.SignIns 模組。
建立應用程式註冊並指派權限
接下來,您會在 Microsoft Entra ID 中建立應用程式註冊,讓 Microsoft Entra ID 能夠辨識您 Azure 自動化 Runbook 的憑證以進行驗證。
- 以至少應用程式系統管理員的身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別] > [應用程式] > [應用程式註冊]。
- 選取新增註冊。
- 輸入應用程式的名稱,並選取 [註冊]。
- 建立應用程式註冊之後,請記下 [應用程式 (用戶端) 識別碼] 和 [目錄 (租用戶) 識別碼],因為您稍後會用到這些項目。
- 請選取 [憑證和密碼] > [憑證] > [上傳憑證]。
- 上傳稍早建立的
.crt
檔案。
- 上傳稍早建立的
- 選取 API 權限>新增權限。
- 選取 [Microsoft Graph]>[應用程式權限]。
選取您 Azure 自動化帳戶需要的每個權限,然後選取 [新增權限]。
- 如果您的 Runbook 只在單一目錄內執行查詢或更新,則您不需要指派全租用戶應用程式權限,可改為將服務主體指派給目錄的目錄擁有者或目錄讀取者角色。
- 如果您的 Runbook 僅執行權利管理的查詢,則可以使用 EntitlementManagement.Read.All 權限。
- 如果您的 Runbook 變更權利管理,例如建立跨多個目錄的指派,請使用 EntitlementManagement.ReadWrite.All 權限。
- 針對其他 API,請確定已新增必要的權限。 例如,對於 Microsoft Entra ID Protection,可能需要 IdentityRiskyUser.Read.All 權限。
授與管理員同意
在上一節中建立的應用程式具有權限,需要至少具有特殊權限角色管理員角色的人員核准,才能如預期般運作。
- 以至少特殊權限角色管理員身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別] > [應用程式] > [應用程式註冊] > [所有應用程式]。
- 請選取您在上一節中建立的應用程式。
- 請選取 API 權限並檢閱必要的權限。
- 如適用,請選取適用於「您租用戶名稱」的「授與管理員同意」,向應用程式授予這些權限。
建立 Azure 自動化變數
在此步驟中,您會在 Azure 自動化帳戶中建立三個變數,Runbook 會使用這些變數來判斷如何向 Microsoft Entra ID 進行驗證。
在 Azure 入口網站中,返回 Azure 自動化帳戶。
依序選取 [變數] 和 [新增變數]。
建立名為 Thumbprint 的變數。 輸入稍早產生的憑證指紋做為變數的值。
建立名為 ClientId 的變數。 輸入在 Microsoft Entra ID 中所註冊應用程式的用戶端識別碼作為為變數的值。
建立名為 TenantId 的變數。 輸入註冊應用程式的目錄租用戶識別碼做為變數的值。
建立可使用 Graph 的 Azure 自動化 PowerShell Runbook
在此步驟中,您會建立初始 Runbook。 您可以使用稍早建立的憑證來觸發此 Runbook,以確認驗證是否成功。
依序選取 [Runbook] 和 [建立 Runbook]。
輸入 Runbook 的名稱、選取 [PowerShell] 做為要建立的 Runbook 類型,然後選取 [建立]。
建立 Runbook 之後,會出現文字編輯窗格,供您輸入 Runbook 的 PowerShell 原始程式碼。
在文字編輯器中輸入下列 PowerShell。
Import-Module Microsoft.Graph.Authentication
$ClientId = Get-AutomationVariable -Name 'ClientId'
$TenantId = Get-AutomationVariable -Name 'TenantId'
$Thumbprint = Get-AutomationVariable -Name 'Thumbprint'
Connect-MgGraph -clientId $ClientId -tenantId $TenantId -certificatethumbprint $Thumbprint
選取 [測試窗格],然後選取 [啟動]。 等候數秒,讓 Runbook 指令碼的 Azure 自動化處理完成。
如果 Runbook 執行成功,隨即出現 [歡迎使用 Microsoft Graph!] 訊息。
現在您已確認您的 Runbook 可以驗證 Microsoft Graph,請新增 Cmdlet 以與 Microsoft Entra 功能互動,從而擴充您的 Runbook。
擴充 Runbook 以使用權利管理
如果 Runbook 的應用程式註冊具有 EntitlementManagement.Read.All 或 EntitlementManagement.ReadWrite.All 權限,則可以使用權利管理 API。
- 例如,若要取得 Microsoft Entra 權利管理存取套件的清單,您可以更新上方建立的 Runbook,並將文字取代為下列 PowerShell。
Import-Module Microsoft.Graph.Authentication
$ClientId = Get-AutomationVariable -Name 'ClientId'
$TenantId = Get-AutomationVariable -Name 'TenantId'
$Thumbprint = Get-AutomationVariable -Name 'Thumbprint'
$auth = Connect-MgGraph -clientId $ClientId -tenantid $TenantId -certificatethumbprint $Thumbprint
Import-Module Microsoft.Graph.Identity.Governance
$ap = @(Get-MgEntitlementManagementAccessPackage -All -ErrorAction Stop)
if ($null -eq $ap -or $ap.Count -eq 0) {
ConvertTo-Json @()
} else {
$ap | Select-Object -Property Id,DisplayName | ConvertTo-Json -AsArray
}
選取 [測試窗格],然後選取 [啟動]。 等候數秒,讓 Runbook 指令碼的 Azure 自動化處理完成。
如果執行成功,則輸出 (而不是歡迎訊息) 將會是 JSON 陣列。 JSON 陣列包含查詢所傳回每個存取套件的識別碼和顯示名稱。
將參數提供給 Runbook (選用)
您也可以藉由將 Param
區段新增至 PowerShell 指令碼頂端,把輸入參數新增至 Runbook。 舉例來說:
Param
(
[String] $AccessPackageAssignmentId
)
允許的參數格式取決於呼叫服務。 如果您的 Runbook 確實從呼叫者取得參數,則必須將驗證邏輯新增至 Runbook,以確保所提供的參數值適用於 Runbook 的啟動方式。 例如,如果您的 Runbook 是由 Webhook 啟動,Azure 自動化只要對正確的 URL 進行驗證,就不會在 Webhook 要求上執行任何驗證,因此您需要驗證要求的替代方法。
在您設定 Runbook 輸入參數後,當您測試 Runbook 時,您可以透過 [測試] 頁面提供值。 稍後,在發佈 Runbook 時,您可以在從 PowerShell、REST API 或邏輯應用程式於啟動 Runbook 時,提供參數。
在 Logic Apps 中剖析 Azure 自動化帳戶的輸出 (選擇性)
發佈您的 Runbook 之後,您可以在 Azure 自動化中建立排程,並將您的 Runbook 連結至該排程以自動執行。 排程 Azure 自動化的 Runbook 適用於不需要與其他 Azure 或 Office 365 服務 (沒有 PowerShell 介面) 互動的 Runbook。
如果您要將 Runbook 的輸出傳送至另一項服務,您可能需要考慮使用 Azure Logic Apps 來啟動 Azure 自動化 Runbook,因為 Logic Apps 也可以剖析結果。
在 Azure Logic Apps 中,從 [定期] 開始,在 Logic Apps 設計工具中建立邏輯應用程式。
從 [Azure 自動化] 新增 [建立作業] 作業。 向 Microsoft Entra ID 進行驗證,然後選取先前建立的 [訂用帳戶]、[資源群組]、[自動化帳戶]。 選取 [等候作業]。
新增 [Runbook 名稱] 參數,並輸入所要啟動 Runbook 的名稱。 若是 Runbook 有輸入參數,則您可以向其提供值。
選取 [新增步驟],然後新增 [取得作業輸出] 作業。 選取與上一個步驟相同的 [訂用帳戶]、[資源群組]、[自動化帳戶],然後選取上一個步驟中的 [作業識別碼] 動態值。
然後,您可以將更多作業新增至邏輯應用程式,例如 剖析 JSON 動作,該動作會使用 Runbook 完成時所傳回的內容。 (如果您要從範例承載自動產生剖析 JSON 架構,請務必考慮 PowerShell 指令碼可能會傳回 null;您可能需要在結構描述中將某些
"type": "string"
變更為"type": ["string", "null"]
。)
在 Azure 自動化中,如果 PowerShell Runbook 嘗試一次將大量資料寫入輸出資料流,則可能無法完成。 您通常可以讓 Runbook 只輸出邏輯應用程式所需的資訊 (例如使用 Select-Object -Property
Cmdlet 排除不必要的屬性) 來解決此問題。
規劃將憑證保持在最新狀態
如果您依照上述步驟來建立自我簽署憑證以進行驗證,請記住,憑證會在到期前保持有限的存留期。 您必須在憑證到期日之前重新產生憑證,並上傳新的憑證。
您可以在 Azure 入口網站中的兩個地方看見到期日。
- 在 Azure 自動化中,[憑證] 畫面會顯示憑證的到期日。
- 在 Microsoft Entra ID 的 [應用程式註冊] 上,[憑證及祕密] 畫面會顯示用於 Azure 自動化帳戶憑證的到期日。