我正在尝试从Octopus Deploy自动化流程中部署Azure Service Fabric Cluster。部署新群集的部分过程涉及创建Azure密钥保管库并使用特定于该群集的证书和其他机密填充它。
我有一个ARM模板来部署密钥保管库,另一个用于部署群集。我发现秘密(通常)可以作为ARM模板的一部分部署到Azure Key Vault,但是当秘密是证书时,没有找到有关如何执行此操作的任何信息。理想情况下,我希望创建特定于群集的证书并将其部署到密钥保管库,作为该部署的一部分,因此可以在群集部署期间访问它们,但只需在配置密钥保管库时部署证书就可以了够了。
答案 0 :(得分:1)
SF部署中使用的证书实际上是在KeyVault中秘密填充的base64编码证书。因此,如果要将它们用于SF部署,您实际上会创建 secret 资源,而不是证书资源。
所以听起来你拥有所需的一切 - 只需在设置keyvault时将base64编码的blob放入秘密值。
那有帮助吗?
答案 1 :(得分:0)
将密钥存储区中的证书部署到VM上需要存储为特定的json文档,我还没有在ARM模板中完成它,但在Powershell中我使用了以下内容:
$cert = Get-Content $certLocation -Encoding Byte;
$cert = [System.Convert]::ToBase64String($cert);
$json = @"
{
"data" : "$cert",
"dataType": "pfx",
"password": "$password"
}
"@
$package = [System.Text.Encoding]::UTF8.GetBytes($json);
$package = [System.Convert]::ToBase64String($package);
$secret = ConvertTo-SecureString -String $package -AsPlainText -Force;
理论上,如果您可以接受这个,然后将$ secret值注入您的ARM模板,那么您应该能够实现您想要做的事情。
请记住,此时的$ password是计划文本,而不是安全字符串,因此Azure Compute可以使用它来安装证书。
然后在您的群集ARM模板中,您可以引用VMSS操作系统配置文件中的证书和密钥保管库:
"osProfile": {
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"computernamePrefix": "[parameters('vmNodeType0Name')]",
"secrets": [
{
"sourceVault": {
"id": "[parameters('sourceVault')]"
},
"vaultCertificates": [
{
"certificateStore": "My",
"certificateUrl": "[parameters('clusterCertificateUrl')]"
},
{
"certificateStore": "My",
"certificateUrl": "[parameters('adminCertificateUrl')]"
}
]
}
]
}
然后在Service Fabric Resource属性下的同一ARM模板中引用您要使用的特定证书。
"certificate": {
"thumbprint": "[parameters('clusterCertificateThumbPrint')]",
"x509StoreName": "My"
},
"clientCertificateCommonNames": [],
"clientCertificateThumbprints": [{
"CertificateThumbprint": "[parameters('adminCertificateThumbPrint')]",
"IsAdmin": true
}],
如果有帮助,这是我在github上尝试的link