如何在没有 az cli 或 pwsh az 模块的情况下以交互方式从 powershell 脚本获取用户的密钥保管库访问令牌



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

如果在电脑上安装了powershell az模块或az-cli,这会非常有效,因为最初只需要用户登录。我的机器就是这样。

但在我同事的机器上,安装az-cli或az powershell模块可能不可用。

如果不让他们每次在运行时手动输入凭据,我将如何最好地对他们进行身份验证(以获得密钥保管库访问令牌(?

干杯

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

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

  • 创建Azure AD,然后将该应用程序添加到密钥保管库的访问策略中。

  • 向Azure AD发送获取令牌的请求:

    https://login.microsoftonline.com/{{directoryId}}/oauth2/v2.0/tokenhttps://vault.azure.net/.default

  • 创建一个新的GET请求"GET-Secret",其URL类似于下面的URL:https://yourkeyvaultname.vault.azure.net/secrets/Secret1?api-版本=2016-10-01

以下是实现这一目标的详细文章,您可以在此处找到:

https://medium.com/@anoopt/accessing-azure-key-vault-securt-through-azure-key-vaurt-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

希望能有所帮助。

相关内容

最新更新