我已使用AzureRM
命令行開關自動部署Azure。這些命令行需要登錄,所以我嘗試使用Save-AzureRMProfile
/Select-AzureRMProfile
來提供保存的配置文件。PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中過期
但是過了一段時間,配置文件似乎過期了,我需要重新登錄。我想按計劃自動運行腳本,因此手動重新登錄不是解決方案。
如何避免配置文件到期?
我已使用AzureRM
命令行開關自動部署Azure。這些命令行需要登錄,所以我嘗試使用Save-AzureRMProfile
/Select-AzureRMProfile
來提供保存的配置文件。PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中過期
但是過了一段時間,配置文件似乎過期了,我需要重新登錄。我想按計劃自動運行腳本,因此手動重新登錄不是解決方案。
如何避免配置文件到期?
簡單的答案是,你無法避免過期,你的令牌過期,需要重新認證。 (這可能會令人擔憂,如果這些憑證可能會持續) - 但
Add-AzureRmAccount
確實需要一個基本參數。因此,您可以將您的憑證保存到一個文件,而是每次都會自動使用實時憑證登錄。
你可以使用標準的pscredential保存機制,這個問題對你來說是一個pscredential不可移動的,爲了解決這個問題,你可以創建你自己的密鑰來傳遞給pscredential。
$key = New-Object byte[](32)
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::Create()
$rng.GetBytes($key)
然後,您可以使用此密鑰來創建可移動的安全字符串。顯然,這個關鍵是你的認證,所以它需要被安全地存儲。
$cred = Get-Credential
$SecureStringWithKey = $cred.Password | ConvertFrom-SecureString -Key $key
您可以編碼使用Base64的密鑰,並將其添加爲一個環境變量等
$base64key = [Convert]::ToBase64String($key)
在另一端,解碼串
$key = [System.Convert]::FromBase64String($base64key)
,並推回至SecureString的,並重建一個憑證對象。
$secureStringPassword = $AuthObject.SecureStringWithKey | ConvertTo-SecureString -Key $key
$cred = new-object -typename System.Management.Automation.PSCredential `
-argumentlist $Username, $secureStringPassword
然後,您可以用
Add-AzureRmAccount -Credential $cred
我個人的態度對待所有的這個登錄是創建一個psobject與所有保存的這些細節,(他們鍵,tenantid和PSCredential的)創建一個json字符串,然後使用證書對其進行加密。這樣我可以將加密的json文件存儲在blob上,然後下載,解密並登錄到我所坐的任何系統上。
謝謝!一些注意事項,以防人們有類似的問題:1.登錄使用-Credential由於某種原因從不報告失敗,除非你請求一個特定的TenantId(也許SubscriptionId?)。它成功返回,但其他命令不起作用。 2.這不適用於Microsoft帳戶,但您始終可以在Azure AD中創建用戶(僅在舊門戶中找到該用戶)並使用它。 –