首页 > 解决方案 > 使用自定义脚本扩展从 Azure Key Vault 下载证书

问题描述

我正在使用 python 创建一个 VM,并使用自定义脚本扩展来下载 VM 内的证书,然后将其保存在本地计算机证书受信任的根证书中。

我唯一的查询是在网络上,可用于从 Azure Key Vault 下载证书的资源非常有限。大家建议先登录再使用cmdlet下载,对于自定义脚本扩展是不合适的。

以下是要求登录然后下载证书的示例 powershell cmdlet。但是当我们运行自定义脚本扩展时,我们将无法进行身份验证。

$vaultName = "YOUR-KEYVAULT-NAME"
$certificateName = "YOUR-CERTIFICATE-NAME"
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\$certificateName.pfx"
$password = "YOUR-CERTIFICATE-PASSWORD"
$pfxSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName
$pfxUnprotectedBytes = [Convert]::FromBase64String($pfxSecret.SecretValueText)
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import($pfxUnprotectedBytes, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pfxProtectedBytes = $pfx.Export([Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password)
[IO.File]::WriteAllBytes($pfxPath, $pfxProtectedBytes)

标签: azureazure-keyvault

解决方案


您可以在 azure ad 中创建一个 AD 应用程序,并使用服务主体以非交互方式登录。

请按照以下步骤操作:

1.创建一个Azure Active Directory应用并为该应用创建一个secret ,自己保存secret并获取登录值

2.在门户中导航到您的keyvault -> Access policies-> Add new-> Select principal(只需搜索您的AD App的名称,如果您创建AD App,它将自动在您的租户中创建一个服务主体)->选择正确的Secret/Key/Certificate permissions(这取决于您将要执行的操作,在这种情况下,您需要在 中选择GetSecret permissions也可以轻松选择全部) -> 单击OK-> Save

3.这时服务主体就有了运行的权限Get-AzureKeyVaultSecret,你只需要使用它非交互方式登录即可。

$azureAplicationId ="Azure AD Application Id"
$azureTenantId= "Your Tenant Id"
$azurePassword = ConvertTo-SecureString "your AD App secret" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Add-AzureRmAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal 

Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certificateName

推荐阅读