如何检查某个证书是否已存在于密钥库中?

How to check if a certain certificate is already present in a keyvault?

在每晚的 Azure 管道构建中,我有 2 个任务:

我这样做的原因是为了确保在密钥库中始终有一个特定的证书。

这是我当前的代码:

# purge the self-signed cert from the Keyvault to avoid conflict; ignore failures
- task: AzureCLI@2
  inputs:
    azureSubscription: '${{ parameters.ArmConnection }}'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    continueOnError: true
    failOnStandardError: false
    powerShellErrorActionPreference: 'silentlyContinue'
    inlineScript: |
      az keyvault certificate delete --vault-name $(KeyVaultName) --id 'https://$(KeyVaultName).vault.azure.net/certificates/my-self-signed-cert'
      az keyvault certificate purge --vault-name $(KeyVaultName) --id 'https://$(KeyVaultName).vault.azure.net/deletedcertificates/my-self-signed-cert'

# import the self-signed certificate my-self-signed-cert into the Keyvault
- task: AzurePowerShell@5
  inputs:
    azureSubscription: '${{ parameters.ArmConnection }}'
    ScriptType: 'InlineScript'
    azurePowerShellVersion: '3.1.0'
    Inline: |
      $Pwd = ConvertTo-SecureString -String 'MyPassword' -Force -AsPlainText
      $Base64 = 'MIIKqQ____3000_CHARS_HERE______1ICAgfQ=='
      Import-AzKeyVaultCertificate -VaultName $(KeyVaultName) -Name my-self-signed-cert -CertificateString $Base64 -Password $Pwd

我的问题是:

请问我如何检查证书是否已经在密钥库中可用?

(因为我用的是ARM模板,资源保持运行ning不被删除,而流水线每天晚上都在运行)。

如果有证书,如何跳过上述 2 个任务(Azure-cli 和 PowerShell)?

我不太明白如何在管道 YAML 文件中使用条件。

YAML 不能包含条件,所以您需要做的是处理 powershell 脚本中的逻辑。

有一个命令可以检查给定的证书是否存在于保险库中,那么做这样的事情怎么样?

        $cert = Get-AzureKeyVaultCertificate -VaultName "ContosoKV01" -Name "TestCert01"

        if(!$cert) {
          $Pwd = ConvertTo-SecureString -String 'MyPassword' -Force -AsPlainText
          $Base64 = 'MIIKqQ____3000_CHARS_HERE______1ICAgfQ=='
          Import-AzKeyVaultCertificate -VaultName $(KeyVaultName) -Name my-self-signed-cert -CertificateString $Base64 -Password $Pwd
        }

如果您出于某种原因还想要删除和清除 og 证书,您也可以在 PowerShell 中执行此操作。不确定为什么在当前设置中同时使用 CLI 和纯 PowerShell?