Как использовать из PowerShell * .pfx сертификат, используемый в конвейере сборки с задачей скачать безопасный файл - PullRequest
0 голосов
/ 02 января 2019

У меня есть эта проблема: Мне нужно подключиться к подпрограмме Azure из сценария powershell, используемого в конвейере сборки, но из-за требований безопасности я не могу написать имя пользователя и пароль в коде, поэтому у меня есть сертификат pfx с учетными данными. Прямо сейчас я использую задачу dowload secure file, чтобы поместить сертификат в сборку. Затем я пытаюсь получить доступ к сертификату из кода powershell.

Я уже тестировал код на своей машине, но когда я пытаюсь использовать его на конвейере сборки, я не могу получить доступ к сертификату с этим

и я получил такую ​​ошибку

Вход в систему ... D: \ a \ 1 \ s \ Scripts \ fileName.ps1: скрипт не работает: термин 'cert.secureFilePath' не распознан как имя командлета, функции, файла сценария или работающей программы. Проверьте правильность написания имени, или если путь был включите, проверьте правильность пути и повторите попытку.

$tenantId  = "xxxxxxxxxxx"
$appId = "zzzzz"
$cert = %DOWNLOADSECUREFILE_SECUREFILEPATH% 
$certThumbprint = $cert.Thumbprint

Write-Host "Logging in...";

Login-AzureRmAccount `
-ServicePrincipal `
-TenantId $tenantId `
-ApplicationId $appId `
-CertificateThumbprint $certThumbprint

Задачи, используемые в конвейере сборки

1 Ответ

0 голосов
/ 03 января 2019

Полный путь к загруженному защищенному файлу сохраняется в переменной среды $ env: DOWNLOADSECUREFILE_SECUREFILEPATH . Для получения дополнительной информации о задаче «Загрузить защищенный файл» см. Этот документ .

Мы могли бы получить certThumbprint со следующим кодом

$CertificatePath = "$env:DOWNLOADSECUREFILE_SECUREFILEPATH"
$sSecStrPassword = "xxxxx"
$certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$certificateObject.Import($CertificatePath, $sSecStrPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)
$thumbprint = $certificateObject.Thumbprint 

Если мы не хотим использовать имя пользователя и пароль в коде напрямую. Мы могли бы использовать Azure Pipeline library . И мы могли бы сослаться на это в коде.

Если вы хотите зашифровать и надежно сохранить значение, выберите значок «замок» в конце строки. Когда вы закончите добавление переменных, выберите Сохранить

enter image description here

Вы получаете доступ к значению переменных в связанной группе переменных точно так же, как переменные, которые вы определяете в самом конвейере. Например, чтобы получить доступ к значению переменной с именем customer в группе переменных, связанной с конвейером, используйте $ (customer) в параметре задачи или в скрипте. Однако секретные переменные (зашифрованные переменные и переменные хранилища ключей) не могут быть доступны непосредственно в сценариях - вместо этого они должны быть переданы как аргументы в задачу

Если я добавлю переменную с именем sSecStrPassword в библиотеку. Тогда код можно изменить следующим образом:

function GetThumbprintPFX {
 param([string] $CertificatePath, [string]$Password)
 $certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
 $certificateObject.Import($CertificatePath, $Password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)
 $thumbprint = $certificateObject.Thumbprint
 return $thumbprint  
}


$thumbprint = GetThumbprintPFX -CertificatePath $env:DOWNLOADSECUREFILE_SECUREFILEPATH -Password '$(sSecStrPassword)'
Write-Host "$thumbprint"

Результат теста:

enter image description here

Для получения дополнительной информации о группах переменных, пожалуйста, перейдите по этой ссылке . А Azure Key Vault - это еще один выбор для требований безопасности .

Обновление:

Ниже приведены подробные инструкции по использованию файла pfx в конвейере Azure Devops.

  1. подготовить файл .pfx.
  2. Добавьте задачу загрузки безопасного файла и загрузите файл pfx.

enter image description here

  1. создать группу переменных и добавить переменную с именем sSecStrPassword

enter image description here

  1. связать переменную со сборкой

enter image description here

  1. Добавьте задачу скрипта powershell и добавьте в нее следующий скрипт.

enter image description here

# Write your powershell commands here.

Write-Host $env:DOWNLOADSECUREFILE_SECUREFILEPATH

function GetThumbprintPFX {
 param([string] $CertificatePath, [string]$Password)
 $certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
 $certificateObject.Import($CertificatePath, $Password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet)
 $thumbprint = $certificateObject.Thumbprint
 return $thumbprint  
}

$thumbprint = GetThumbprintPFX -CertificatePath $env:DOWNLOADSECUREFILE_SECUREFILEPATH -Password '$(sSecStrPassword)'
Write-Host "$thumbprint"
  1. поставить в очередь сборку и проверить результат.

enter image description here

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