Powershell 如何使用DSC在Azure VM中安装公钥证书
我想使用ARM将公钥证书安装到Azure VM规模集中,但在获取证书的本地路径时遇到问题 可以使用PowerShell DSC扩展为VM ScaleSet安装证书并使用DSC模块 我正在使用此代码示例:Powershell 如何使用DSC在Azure VM中安装公钥证书,powershell,azure-resource-manager,Powershell,Azure Resource Manager,我想使用ARM将公钥证书安装到Azure VM规模集中,但在获取证书的本地路径时遇到问题 可以使用PowerShell DSC扩展为VM ScaleSet安装证书并使用DSC模块 我正在使用此代码示例: Configuration Example { param ( [Parameter()] [string[]] $NodeName = 'localhost' ) Import-DscResource -Modu
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'
}
}
}
我正在使用cmdlet将DSC脚本和公钥证书打包并上载到Azure存储帐户,以便将其用作ARM部署过程的一部分
但是我不知道如何解析证书的本地路径,我在使用
\Certificate\MyTrustedRoot.cer
或$PSScriptRoot\Certificate\MyTrustedRoot.cer
我认为可以在DSC中解析文件或使用相对路径,以保持DSC配置的简单性,并将其与证书打包在一起
更新:Publish AzureRMVMDSCCConfiguration将DSC脚本和公钥证书压缩并上载到azure存储帐户。VMS DSC扩展下载zip,在vm上本地解压并运行DSC,因此证书在scaleset中的所有vm上本地存在
但是由于所使用的DSC模块的版本号,证书的路径是不确定的。证书不是本地存在的,它只存在于存储帐户中。因此,需要使用artifactsLocation和artifactsLocationSasToken值将存储中证书的路径作为参数传递给uri 但这些是您可以从arm模板部署中获得的值。由于您只是使用powershell发布您的DSC plus资源,因此您应该能够确定证书的uri是什么。将存储帐户指定为publish cmdlet的参数,因此应该能够使用该信息构建uri。再次检查存储帐户中证书的uri 或者,在VM上使用自定义脚本扩展将证书从存储器下载到VM,然后证书将在本地存在
你是在powershell里这么做的吗?您可能想看看如何使用arm模板来实现这一点。例如:在Azure虚拟机上本地,DSC文件和证书的路径位于DSC扩展工作文件夹下的某个位置,该文件夹从发布AzureRMVMDSCCConfigurationcmdlet创建的zip包中提取,例如 C:\Packages\Plugins\Microsoft.Powershell.DSC\2.23.0.0\DSCWork\InstallRootCaCert.ps1.0\Certificate\MyTrustedRoot.cer
我能想到的最佳解决方案是使用证书的绝对路径,通过在ARM模板中将typeHandlerVersion显式设置为2.23,并将autoUpgradeMinorVersion设置为false锁定DSC版本号,它确实存在于本地,由于我在Publish-AzureRmVMDscConfiguration cmdlet中使用了-addationalPath参数,因此所有内容都被很好地压缩,上载到azure存储帐户,并通过VMS DSC扩展下载和解压缩到VM。所以我只需要在本地引用.cer文件。甚至使用RDP登录并找到文件,但路径不确定。我知道我可以使用自定义脚本扩展名,但我更喜欢DSC方法,如果我能够确定证书的位置,这应该是可能的,使用相对路径或某些可以作为参数传递到DSC函数的环境变量。证书放在磁盘上的位置-我非常确定Azure DSC扩展提取到已知路径。。。