Как проверить, присутствует ли уже определенный сертификат в хранилище ключей? - PullRequest
0 голосов
/ 26 мая 2020

В ночной сборке 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 шаблоны и ресурсы продолжают работать и не удаляются, пока конвейер запускается каждый вечер).

И если сертификат есть, как пропустить указанные выше 2 задачи (Azure -cli и PowerShell )?

Я не совсем понимаю, как использовать условные выражения в YAML-файле конвейеров.

1 Ответ

1 голос
/ 26 мая 2020

YAML не может содержать условные выражения, поэтому вам нужно обработать logi c внутри ваших сценариев 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
        }

Если вам по какой-то причине также нужны сертификаты удаления и очистки, вы также можете сделать это в PowerShell. Не знаете, почему вы используете и интерфейс командной строки, и простой PowerShell в своей текущей настройке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...