如何从Powershell脚本以交互方式获取用户的Keyvault访问令牌,而无需使用AZ CLI或PWSH AZ模块

时间:2019-11-11 09:23:33

标签: powershell azure-active-directory access-token azure-keyvault azure-cli

我为某些同事实现流程自动化。在一个用例中,将执行一个ps1脚本,该脚本将从azure kezvault中获取所需的机密。

如果在PC上安装了powershell az模块或az cli,这将非常有效,因为仅在最初需要用户登录。我的机器上就是这种情况。

但是在我同事的机器上,可能无法选择安装az cli或az powershell模块。

我如何最好地对它们进行身份验证(以获取密钥库访问令牌),而不必每次运行时都手动输入凭据?

欢呼

1 个答案:

答案 0 :(得分:0)

获取密钥库机密的最简单方法是通过服务主体身份验证使用rest api。

以下是实现相同目的的步骤:

这是实现此目的的详细文章,您可以在这里找到:

https://medium.com/@anoopt/accessing-azure-key-vault-secret-through-azure-key-vault-rest-api-using-an-azure-ad-app-4d837fed747

https://github.com/anoopt/GetKeyVaultData

要使用powershell获取Azure AD令牌,只需引用以下代码即可:

$tenantId = "XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX" 
$clientId = "XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX" 
$clientSecret = "MYCLENTSECRETHERE"

$TokenEndpoint = {https://login.windows.net/{0}/oauth2/token} -f $tenantId 
$resourceURL = "https://management.core.windows.net/";

$Body = @{
        'resource'= $resourceURL
        'client_id' = $clientId
        'grant_type' = 'client_credentials'
        'client_secret' = $clientSecret
}

$params = @{
    ContentType = 'application/x-www-form-urlencoded'
    Headers = @{'accept'='application/json'}
    Body = $Body
    Method = 'Post'
    URI = $TokenEndpoint
}

$token = Invoke-RestMethod @params

Write-Output $token.access_token

https://social.msdn.microsoft.com/Forums/en-US/f98e029a-8c3e-417b-830b-9157bcbecc1e/getting-access-tokenjwt-token-for-azure-ad-using-powershell?forum=WindowsAzureAD

希望有帮助。