2016-01-23 10 views
2

我已使用AzureRM命令行開關自動部署Azure。這些命令行需要登錄,所以我嘗試使用Save-AzureRMProfile/Select-AzureRMProfile來提供保存的配置文件。PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中過期

但是過了一段時間,配置文件似乎過期了,我需要重新登錄。我想按計劃自動運行腳本,因此手動重新登錄不是解決方案。

如何避免配置文件到期?

回答

4

簡單的答案是,你無法避免過期,你的令牌過期,需要重新認證。 (這可能會令人擔憂,如果這些憑證可能會持續) - 但

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上,然後下載,解密並登錄到我所坐的任何系統上。

+2

謝謝!一些注意事項,以防人們有類似的問題:1.登錄使用-Credential由於某種原因從不報告失敗,除非你請求一個特定的TenantId(也許SubscriptionId?)。它成功返回,但其他命令不起作用。 2.這不適用於Microsoft帳戶,但您始終可以在Azure AD中創建用戶(僅在舊門戶中找到該用戶)並使用它。 –