Добавление / получение секрета для Azure Keyvault с помощью задачи PowerShell Azure в приложениях Azure - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь установить секреты внутри своего Azure Keyvault с помощью задачи Azure Powershell в DevOps Azure. Я использую следующий код:

Set-AzureKeyVaultSecret -VaultName $KeyvaultName -Name $SecretName -SecretValue $secretvalue

С именами и значением все настройки внутри переменных и пытался использовать это без переменных. Это значение сохраняется в виде безопасной строки со следующим кодом. ConvertTo-SecureString

Но когда я запускаю этот код powershell в своем конвейере выпуска DevOps Azure, я получаю следующее сообщение об ошибке:

Cannot retrieve access token for resource 'AzureKeyVaultServiceEndpointResourceId'.  Please ensure that you have provided the appropriate access tokens when using access token login.

Итак, я убедился, что у участника службы и сервера сборки есть правильный доступ к keyvault, добавив их в политики доступа с разрешением get, list, set secrets.

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

########################################################################################
$azureRmProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azureRmProfile)
$context = Get-AzureRmContext
$AzureToken = $profileClient.AcquireAccessToken($context.Tenant.Id)
Add-AzureRmAccount -AccessToken $AzureToken.AccessToken -AccountId $AzureToken.UserId
########################################################################################

Добавив этот код в начало встроенного скрипта и используя профиль с commando в качестве переменной для -DefaultProfile.

Я также включил опцию включения скрипта для доступа к токену Oauth. enter image description here

Кто-то также пытался установить секрет из задачи powershell в DevOps Azure. Или знаете, почему скрипт powershell не может получить доступ к keyvault. Командная команда azurermContext предоставила мне правильный вывод, даже попробовала команду Get-AzureRmKeyvault, чтобы выяснить, правильно ли уже настроено подключение к среде. И это тоже не доставило проблем.

Ответы [ 3 ]

2 голосов
/ 05 октября 2019

ниже работает наверняка (используя это регулярно)

Set-AzContext -SubscriptionId $SubscriptionId
## $SubscriptionId is a subscription ID where is the target KV

$Secretvalue = ConvertTo-SecureString $SecretValuePlainText -AsPlainText -Force
## $SecretValuePlainText is the secret to store

Set-AzKeyVaultSecret -VaultName $KeyVaultName -Name $SecretName -SecretValue $Secretvalue -ErrorVariable setSecretError -Expires $ExpirationDate -NotBefore $ActivationDate
## $SecretName, $ExpirationDate, $ActivationDate - obvious :)

конечно, если вы ссылаетесь на переменную не из скрипта или встроенного, а из выпуска используйте $ (variable_name)

СервисПринципал / Сервисное соединение, которое мы используем для этого, является временным владельцем целевой подписки (или хранилища ключей, до вас).

1 голос
/ 10 октября 2019

У меня была точно такая же проблема. Обнаружено, что проблема в отсутствующем маркере доступа.

А именно -KeyVaultAccessToken при звонке Add-AzureRmAccount.

Нашел решение здесь: https://github.com/Azure/azure-powershell/issues/4818#issuecomment-376155173

0 голосов
/ 16 октября 2019

Я исправил свой вопрос следующим образом.

Я использовал служебное соединение, основанное на управляемой идентификации. И это потребовало некоторого обходного пути для доступа к хранилищу ключей, как упомянуто @john. Но это было ненужным. путем создания нового подключения службы на основе принципала службы. Этот обходной путь не был необходим и исправил проблему.

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