如何使用 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
我想使用 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