无法使用Keyvault Secrets进行域加入

时间:2018-05-20 17:35:22

标签: powershell azure azure-keyvault

我正在尝试使用脚本化进程加入域,其中隐藏了用户名和密码。

我认为在Azure中使用Keyvault是最好的方法,但是当我使用下面的脚本时,它会给我一些错误。这是可能的,还是我以错误的方式解决这个问题。

这些是Azure VM

$AdminUser = 'https://<Keyvault>.vault.azure.net:443/secrets/AdminUser/de7d74df74ff4099b0bd7422c171a4fe'
$AdminPassName = 'https://<Keyvault>.vault.azure.net:443/secrets/SQLPassword/f394ded0cc16482096bc181f5ab650bd'

$mycred = New-Object System.Management.Automation.PSCredential ("$($AdminUser.SecretValueText)", $AdminPass.SecretValue)

$domain = 'hmr.loc'

Add-Computer -DomainName $domain -Credential $mycred

我得到的错误是

New-Object : Exception calling ".ctor" with "2" argument(s): "Cannot process argument because the value of argument "userName" is not valid. Change the value of the 
"userName" argument and run the operation again."
At line:1 char:11
+ $mycred = New-Object System.Management.Automation.PSCredential ("$($A ...
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

我认为这与这条线有关...

$mycred = New-Object System.Management.Automation.PSCredential ("$($AdminUser.SecretValueText)", $AdminPass.SecretValue)

提前致谢..

1 个答案:

答案 0 :(得分:1)

你的方法没有意义(想法确实如此)。您需要对秘密URI执行休息调用,而不仅仅是声明uri并将其用作变量。所以你通常有两种方法:

  1. 自己进行休息(在这种情况下你必须自己处理身份验证)
  2. 使用powershell cmdlet检索密钥保管库密钥,但您需要首先使用足够的权限对​​Azure进行身份验证才能执行此调用
  3. 无论哪种方式,您都必须传入一些用于进行身份验证的数据,因此您可能需要退后一步并使用更高级别的脚本\实体为您处理并安全地将用户\密码传递给您的脚本