PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中过期

时间:2016-01-23 07:09:35

标签: powershell azure

我使用12.5命令行开关自动化Azure部署。这些命令行开关需要登录,因此我尝试使用AzureRM / Save-AzureRMProfile提供已保存的配置文件。

然而,经过一段时间后,个人资料似乎已过期,我需要再次登录。我想按计划自动运行我的脚本,因此手动重新登录不是解决方案。

如何避免个人资料到期?

1 个答案:

答案 0 :(得分:4)

简单的答案是,您无法避免到期,您的令牌过期并需要重新进行身份验证。 (如果这些凭证可以保留,那将会令人担忧) - 但是

Add-AzureRmAccount确实采用了pscredential参数。因此,您可以将凭据保存到文件中,而不是每次都使用实时凭据自动登录。

你可以使用标准的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上,然后下载,解密并登录我所在的任何系统。