我使用12.5
命令行开关自动化Azure部署。这些命令行开关需要登录,因此我尝试使用AzureRM
/ Save-AzureRMProfile
提供已保存的配置文件。
然而,经过一段时间后,个人资料似乎已过期,我需要再次登录。我想按计划自动运行我的脚本,因此手动重新登录不是解决方案。
如何避免个人资料到期?
答案 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上,然后下载,解密并登录我所在的任何系统。