簡體   English   中英

Powershell - 無需硬編碼密碼即可自動連接到 Power BI 服務

[英]Powershell - automated connection to Power BI service without hardcoding password

我們有一個 PowerShell 腳本來提取 Power BI 活動數據(使用 Get-PowerBIActivityEvent),我一直在嘗試自動化它,以便它可以每天使用無人值守的帳戶提取這些數據。 問題是腳本必須使用 Connect-PowerBIServiceAccount cmdlet,這需要憑據。 我不想在任何地方(顯然)對密碼進行硬編碼,理想情況下不想將其作為純文本參數傳遞到腳本中,以防 memory 泄漏。

我嘗試使用 SSIS 作為調度機制,因為它允許在腳本任務中使用加密參數,但由於 System.Management.Automation 命名空間不在 GAC 中,因此無法使用 SecureString 參數調用 PS 腳本(命令行調用不可能)。 我不相信任務調度程序會提供所需的功能。

有誰知道使用加密憑據連接到 Power BI 服務的任何優雅方法?

Connect-PowerBIServiceAccount的文檔中,有 2 個無人值守登錄選項:

  1. 使用-Credential ,您將 AAD 客戶端 ID 作為用戶名和應用程序密鑰作為密碼傳遞

  2. 使用-CertificateThumbprint-ApplicationId

對於這兩個選項,您需要配置服務主體並添加適當的權限。 我不會詳細介紹如何配置它,但很可能您需要(至少)以下應用程序權限:

Power BI 應用程序權限

我不太確定腳本中需要哪些功能,但根據我的經驗,計划任務可以涵蓋大多數情況,因此下面的說明將適用於該解決方案。

如何保護憑據?

根據您的喜好,有多種可能的解決方案。 我認為基於證書的身份驗證更安全(證書僅適用於當前用戶/機器的所有用戶)。

在基於證書的身份驗證中重要的是 - 確保證書可用於運行腳本的帳戶(在許多情況下,它是服務帳戶,而不是您的用戶帳戶)。

我怎樣才能獲得更多保障?

如果需要,您可以將應用程序 ID 存儲為安全字符串(我沒有要測試的 SSIS,所以我不確定是否有任何解決方法可以讓它在那里工作)或使用Export-CliXml 他們使用 Windows 數據保護 API (DPAPI),因此文件只能由用於加密的帳戶解密。

為了增加一個安全級別(我什至沒有提到對文件設置正確的訪問權限,因為這很明顯)你可以將文件放在加密的文件夾中(你可能已經有了磁盤加密的解決方案,所以如果你使用它希望)。


可能有一些解決方案可以更好地保護密鑰,但這些解決方案應該可以完成這項工作。 我正在使用具有類似方法的其他 Microsoft 365 模塊(Outlook、SharePoint PnP)並且效果很好。

注意:如果您需要使用用戶帳戶而不是服務主體,請確保在該帳戶上為該特定應用程序禁用了 MultiFactor Authentication。

與此相關的文檔( https://docs.microsoft.com/en-us/power-bi/developer/embedded/embed-service-principal )指出管理 API(即通過 Get-PowerBiActivityEvent 提供的 API)目前不支持服務負責人。 這意味着目前無法使用已注冊的應用程序在無人參與的情況下運行這些 cmdlet。

目前有一個功能請求可供提供: https://ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/39641572-need-service-principle-support-api

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM