首页 > 解决方案 > Azure DevOps Connect-AzAccount 在证书存储中找不到证书

问题描述

我正在尝试通过 Azure DevOps Pipeline 连接到多个租户,这是为了将所有租户的信息检索到中央存储以进行分析所必需的。为了实现这一点,一个 Azure PowerShell 任务,为了避免使用密码,我想用证书指纹进行身份验证。在我的机器上我可以毫无问题地做到这一点,因为我已经在我的个人证书存储中安装了证书,但是在 Azure DevOps 我不能这样做,当我尝试 Connect-AzAccount 时,会显示以下错误

Connect-AzAccount -ServicePrincipal -Tenant "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -ApplicationId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -CertificateThumbprint xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Connect-AzAccount : No certificate was found in the certificate store with thumbprint xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
At line:1 char:1
+ Connect-AzAccount -ServicePrincipal -Tenant "xxxxxxxx-xxxx-xxxx-xxxx- ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Connect-AzAccount], ArgumentException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand

我也在使用 Connect-AzureAd,因为需要其他使用此连接的 cmdlet,我得到了同样的错误。你知道是否有办法实现我正在寻找的东西?

标签: azure-devopsazure-powershell

解决方案


在带有指纹的证书存储中找不到证书

根据您的描述,您似乎正在使用 Microsoft 托管的代理。

所以默认情况下没有安装证书Personal Store

要解决此问题,您可以尝试以下步骤:

  1. 导出本地计算机上的证书。

  2. 将证书上传到Azure Devops -> Pipelines -> Library ->Secure files.

在此处输入图像描述

  1. 在 Pipeline 中,您需要下载安全文件并将证书安装到Personal Store.

这是一个例子:

steps:
- task: DownloadSecureFile@1
  displayName: 'Download secure file'
  inputs:
    secureFile: 'filename'

- script: 'CERTUTIL -addstore -user -f "My" "$(Agent.TempDirectory)\test.cer"'
  displayName: 'Command Line Script'

- task: AzurePowerShell@5
   xxxx

注意:该DownloadSecureFile任务会将 cer 文件下载到代理临时文件夹。


推荐阅读