我为某些同事实现流程自动化。在一个用例中,将执行一个ps1脚本,该脚本将从azure kezvault中获取所需的机密。
如果在PC上安装了powershell az模块或az cli,这将非常有效,因为仅在最初需要用户登录。我的机器上就是这种情况。
但是在我同事的机器上,可能无法选择安装az cli或az powershell模块。
我如何最好地对它们进行身份验证(以获取密钥库访问令牌),而不必每次运行时都手动输入凭据?
欢呼
答案 0 :(得分:0)
获取密钥库机密的最简单方法是通过服务主体身份验证使用rest api。
以下是实现相同目的的步骤:
创建Azure AD,然后将该应用添加到密钥库的访问策略中。
向Azure AD发送请求以获取令牌:
https://login.microsoftonline.com/ {{directoryId}} / oauth2 / v2.0 / token https://vault.azure.net/.default
使用类似于以下URL的URL创建一个新的GET请求“ Get Secret”: https://yourkeyvaultname.vault.azure.net/secrets/Secret1?api-version=2016-10-01
这是实现此目的的详细文章,您可以在这里找到:
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
希望有帮助。