2017-03-07 39 views
0

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

有可能使用PowerShell的DSC扩展VM scalesets安装证书并使用xCertificate

我使用此代码示例的DSC模块:

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脚本和公钥证书上载到Azure存储帐户,以便它可以用作ARM部署过程的一部分。

但我无法弄清楚如何解决该证书模板的本地路径,使用 .\Certificate\MyTrustedRoot.cer$PSScriptRoot\Certificate\MyTrustedRoot.cer时,我得到一个错误

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

更新:Publish-AzureRmVMDscConfiguration将DSC脚本和公钥证书上载并上传到一个azure存储帐户。 VMSS DSC扩展下载压缩文件,在vm上本地解压缩并运行DSC,因此证书以缩放集中的所有虚拟机本地存在。

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

回答

0

局部上的虚拟机天青,路径到DSC文件和证书是某处DSC扩展workfolder下,从由所述发布-AzureRmVMDscConfiguration cmdlet时,例如产生的压缩包中提取

C:\包\插件\ Microsoft.Powershell.DSC \ 2.23.0.0 \ DSCWork \ InstallRootCaCert.ps1.0 \证书\ MyTrustedRoot.cer

我能想出的最好的解决办法是使用证书的绝对路径并通过明确设置typeHandlerVersion2来锁定DSC版本号。23在ARM模板和设置autoUpgradeMinorVersion

0

那么证书本地不存在,它只在存储账户中。因此,您需要使用artifactsLocation和artifactsLocationSasToken值将路径传递到存储中的证书作为参数。

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

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

你是否在PowerShell中完成这一切?你可能想看看为此使用一个手臂模板。为例如:Azure Quickstart Templates

+0

它不存在于本地,因为我使用的发布,AzureRmVMDscConfiguration cmdlet中-AddtionalPath PARAM,所以一切都是很好的拉链,上传到Azure存储帐户并下载并通过VMSS DSC扩展解压缩到VM。所以我只需要在本地引用.cer文件。即使使用RDP登录并找到该文件,但路径并不确定。 – mikanyg

+0

我知道我可以使用自定义脚本扩展来代替,但我更喜欢DSC方法,如果我能弄清楚如何确定证书的位置,可以使用相对路径或一些可以传入的环境变量参数到DSC功能。 – mikanyg

+0

放在磁盘上的证书在哪里 - 我很确定Azure DSC扩展提取到一个已知路径... –