如何使用 DSC 在 Azure VM 中安装 public 密钥证书

How to install public key certificate in Azure VM using DSC

我想使用 ARM 将 public 密钥证书安装到 Azure VM 规模集中,但在正确获取证书的本地路径时遇到问题。

可以使用适用于 VM 规模集的 PowerShell DSC 扩展安装证书并使用 DSC 模块 xCertificate

我正在使用此代码示例:

Configuration Example
{
    param
    (
        [Parameter()]
        [string[]]
        $NodeName = 'localhost'
    )

    Import-DscResource -ModuleName xCertificate

    Node $AllNodes.NodeName
    {
        xCertificateImport MyTrustedRoot
        {
            Thumbprint = 'c81b94933420221a7ac004a90242d8b1d3e5070d'
            Location   = 'LocalMachine'
            Store      = 'Root'
            Path       = '.\Certificate\MyTrustedRoot.cer'
        }
    }
}

我正在使用 Publish-AzureRmVMDscConfiguration cmdlet 将 DSC 脚本与 public 密钥证书一起打包并上传到 Azure 存储帐户,以便它可以用作 ARM 部署过程的一部分。

但我不知道如何解析证书的本地路径,使用时出现错误 .\Certificate\MyTrustedRoot.cer$PSScriptRoot\Certificate\MyTrustedRoot.cer

我认为可以在 DSC 中解析文件或使用相对路径,以保持 DSC 配置简单并与证书打包在一起。

更新:Publish-AzureRmVMDscConfiguration 将 DSC 脚本和 public 密钥证书压缩并上传到 Azure 存储帐户。 VMSS DSC 扩展下载 zip,在 vm 上本地解压缩并运行 DSC,因此证书在规模集中的所有 vm 上本地存在。

但是由于所使用的 DSC 模块的版本号,证书的路径是不确定的。

好吧,证书在本地不存在,它只存在于存储帐户中。因此,您需要将存储中证书的路径作为参数传递,使用 artifactsLocation 和 artifactsLocationSasToken 值来制作 uri。

但这些是您将从 arm 模板部署中获得的值。由于您只是使用 powershell 来发布您的 DSC 和资源,您应该能够确定您的证书的 uri 是什么。您将存储帐户指定为发布 cmdlet 的参数,因此您应该能够使用该信息构建 uri。仔细检查存储帐户中证书的 uri。

或者,在 VM 上使用自定义脚本扩展将证书从存储下载到 VM,然后该证书将存在于本地。

你是在 powershell 中做这一切吗?您可能想为此使用 arm 模板。例如:Azure Quickstart Templates

在 Azure VM 本地,DSC 文件的路径和证书位于 DSC 扩展工作文件夹下的某个位置,从 Publish-AzureRmVMDscConfiguration cmdlet 创建的 zip 包中提取,例如

C:\Packages\Plugins\Microsoft.Powershell.DSC.23.0.0\DSCWork\InstallRootCaCert.ps1.0\Certificate\MyTrustedRoot.cer

我能想到的最佳解决方案是使用证书的绝对路径并通过将 typeHandlerVersion 显式设置为 来锁定 DSC 版本号ARM 模板中的 2.23 并将 autoUpgradeMinorVersion 设置为 false