Azure DevOps Pipeline 更改服务结构应用程序的证书权限

Posted

技术标签:

【中文标题】Azure DevOps Pipeline 更改服务结构应用程序的证书权限【英文标题】:Azure DevOps Pipeline changing certificate permissions for service fabric application 【发布时间】:2021-01-01 10:31:19 【问题描述】:

我有一个 Azure DevOps Pipeline,它(通过 Powershell 脚本)将证书添加到 Azure Service Fabric 应用程序的虚拟机规模集对象。

证书已正确安装,但服务结构应用程序在尝试启动时出错,提示“Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException:密钥集不存在”。

我做了一些谷歌搜索,发现了这个页面:Service Fabric: Authenticating with Azure KeyVault via cert: "KeySet does not exist"

这让我可以通过对服务结构节点的渴望来手动解决问题,并使用 NETWORK SERVICE 用户帐户授予已安装的证书读取权限。

有没有办法通过 DevOps 管道向已安装的证书授予此权限?

【问题讨论】:

【参考方案1】:

您可以将以下内容添加到您的 powershell 脚本中

function Set-CertificateReadPermission

 param
 (
    [Parameter(Position=1, Mandatory=$true)]
    $cert ,

    [Parameter(Position=2, Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$serviceAccount
 )


 # Specify the user, the permissions and the permission type
 $permission = "$($serviceAccount)","Read","Allow"
 $accessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission;

 # Location of the machine related keys
 $keyPath = "$($env:ProgramData)\Microsoft\Crypto\RSA\MachineKeys\";
 $keyName = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName;
 $keyFullPath = $keyPath + $keyName;

 try
 
    # Get the current acl of the private key
    $acl = (Get-Acl $keyFullPath)

    # Add the new ace to the acl of the private key
    $acl.AddAccessRule($accessRule);

    # Write back the new acl
    Set-Acl -Path $keyFullPath -AclObject $acl;
 
 catch
 
    throw $_;
 


# Get the certificate, or use a previous variable:
$cert = Get-ChildItem -Path cert:\LocalMachine\My\EEDEF61D4FF6EDBAAD538BB08CCAADDC3EE28FF

#Call method to set permission on certificate
Set-CertificateReadPermission $cert "NT AUTHORITY\NETWORK SERVICE"

【讨论】:

此脚本似乎更改了运行 powershell 脚本的本地计算机的权限,但 powershell 脚本将由 Azure DevOps Pipeline 执行,它需要影响虚拟机规模集Azure Service Fabric 服务。有没有办法做到这一点? 有多种方法可以在规模集上执行 powershell。微软推荐的方式是Custom Script Extension。您还可以在服务结构应用程序启动中使用script。

以上是关于Azure DevOps Pipeline 更改服务结构应用程序的证书权限的主要内容,如果未能解决你的问题,请参考以下文章

是否有在本地验证 Azure DevOps Pipeline 的工具?

azure devops 中的 Pipeline 和 Release Pipeline 有啥区别?

markdown 20190601-分享DevOps以及Azure DevOps的Pipeline功能做到CI以及CD

从 Azure DevOps Pipeline 访问 SQL Server

如何从 Azure DevOps Pipeline 读取 Azure 文件共享文件

在 Azure DevOps Pipeline 模板中使用变量