2

我正在尝试在 Octopus Deploy 的自动化过程中部署 Azure Service Fabric 集群。部署新群集的过程的一部分涉及创建 Azure Key Vault 并使用特定于该群集的证书和其他机密填充它。

我有一个用于部署 Key Vault 的 ARM 模板和另一个用于部署集群的模板。我发现机密(通常)可以作为 ARM 模板的一部分部署到 Azure Key Vault,但没有找到任何有关如何在机密是证书时执行此操作的信息。理想情况下,我想创建集群特定的证书并将其部署到 Key Vault 作为该部署的一部分,以便在集群部署期间可以访问它们,但仅在配置 Key Vault 时能够部署证书就更好了足够的。

4

2 回答 2

1

SF 部署中使用的证书实际上是填充在 KeyVault 中的秘密中的 base64 编码证书。因此,如果您想将它们用于 SF 部署,您实际上会创建一个秘密资源,而不是证书资源。

因此,听起来您拥有所需的一切——只需在设置 keyvault 时将该 base64 编码的 blob 放入密钥值中即可。

这种帮助?

于 2016-10-24T17:19:20.180 回答
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 资源属性下的同一 ARM 模板中引用您要使用的特定证书。

"certificate": {
    "thumbprint": "[parameters('clusterCertificateThumbPrint')]",
    "x509StoreName": "My"
},
"clientCertificateCommonNames": [],
"clientCertificateThumbprints": [{
    "CertificateThumbprint": "[parameters('adminCertificateThumbPrint')]",
    "IsAdmin": true
}],

如果有帮助,这里是我在 github 上尝试的链接

于 2016-10-24T15:58:13.637 回答