寻找用于在VM中推送AzureKeyvault证书的Azure Java库示例

时间:2019-06-06 02:13:33

标签: java azure azure-keyvault

我使用Java Azure API库创建VM。我希望能够从AzureKeyVault安装证书。

我看到了Add-AzureRmVMSecret Powershell,它用于设置具有证书URL的secret。我无法使用Java SDK找出确切的步骤。

我正在从Azure MarketPlace创建VM。 任何帮助/指针表示赞赏

1 个答案:

答案 0 :(得分:-1)

Here,您可以找到用于从Azure密钥库读取.pfx文件的代码示例,但是您也可以使用ARM和powershell完成整个过程。

这是执行操作的步骤

  • 您需要使用.PFX格式的证书(请参阅注释1)
  • 创建密钥保险库(使用模板或使用下面的简单脚本)
  • 确保已打开EnabledForDeployment开关
  • 作为秘密上载证书(请参见示例脚本)
  • 现在获取模板,提供所有参数值,然后部署模板

这是一个脚本,该脚本创建密钥库,然后将存储在.pfx文件中的证书存储在本地目录中,作为密钥存储到密钥库。

$vaultName = "contosovault"
$resourceGroup = "contosovaultrg"
$location = "eastus"
$secretName = "servicecert"
$certPassword = "abcd1234"
$fileName = "certforvm.pfx"
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$fileContentBytes = Get-Content $fileName -Encoding Byte
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)

$jsonObject = @"
{
  "data": "$fileContentEncoded",
  "dataType" :"pfx",
  "password": "$certPassword"
}
"@

$jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)

New-AzureRmResourceGroup -Name $resourceGroup -Location $location
New-AzureRmKeyVault -VaultName $vaultName -ResourceGroupName $resourceGroup -Location $location -sku standard -EnabledForDeployment

$secret = ConvertTo-SecureString -String $jsonEncoded -AsPlainText –Force
Set-AzureKeyVaultSecret -VaultName "contosovault" -Name "servicecert" -SecretValue $secret

脚本的第一部分读取.pfx文件,然后将其存储为JSON对象,并以base64编码文件内容。然后,JSON对象也经过base64编码。

接下来,它将创建一个新的资源组,然后创建一个密钥库。请注意New-AzureKeyVault命令的最后一个参数“ -EnabledForDeployment”,该命令授予对Azure(如果要非常具体的话,Microsoft.Compute资源提供程序)的访问权限,以从Key Vault中读取用于部署的机密。

最后一条命令只是将base64编码的JSON对象作为秘密存储在密钥库中。

但是这次,虚拟机已经在运行。因此,我们也需要将证书推送到现有的VM中。首先,您需要获取一个新证书,并将其存储在密钥库中(如上所示)。您会在下面的$ certUrl中注意到,它仍然使用相同的秘密名称,但是由于这是新版本,因此版本ID已更改。当我们更新现有的秘密Vault时,Key Vault会自动创建一个新版本。您需要获取此新的秘密版本。然后使用“ Add-AzureVMSecret” cmdlet将证书推送到现有VM中,最后运行Update-AzureVM命令,以使更改生效;请参见下面的代码段示例。如果以后还要创建需要此证书的新VM,则还需要使用此新的秘密URI更新模板。

$subId = (Get-AzureRmContext).Subscription.SubscriptionId
$vm = Get-AzureRmVM -ResourceGroupName contosovaultrg -Name contosovm
$SourceVaultId = (Get-AzureRmKeyVault -VaultName contosovault).ResourceId
$certStore = "My";
$certUrl = (Get-AzureKeyVaultSecret -VaultName contosovault -Name servicecert).Id;
$vm = Add-AzureRmVMSecret -VM $vm -SourceVaultId $SourceVaultId -CertificateStore $certStore -CertificateUrl $certUrl;
Update-AzureRmVM -ResourceGroupName contosovaultrg -VM $vm

为提高安全性,您可以将旧机密的属性更改为“已禁用”,以便即使旧模板尝试使用此旧版本的证书创建VM。这是设置禁用特定机密版本的方法:

Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0

此外,您还可以找到模板here

希望有帮助。