Как скопировать все секреты из одного набора ключей Azure в другой с помощью Powershell - PullRequest
1 голос
/ 10 апреля 2019

Недавно нам потребовалось скопировать каждый секрет (имя и значение) из одного Azure KeyVault во вновь созданный. Я нашел способы восстановить секреты из резервной копии, но у нас не было резервной копии. Существует ли сценарий Powershell, который может просто проходить через каждую комбинацию имя / значение в исходном хранилище и копировать ее в целевое хранилище?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

это слишком срабатывает (без обид), вот более "мощная" версия:

Param(
    [Parameter(Mandatory)]
    [string]$sourceVaultName,
    [Parameter(Mandatory)]
    [string]$destVaultName
)

Connect-AzAccount

$secretNames = (Get-AzKeyVaultSecret -VaultName $sourceVaultName).Name
$secretNames.foreach{
    Set-AzKeyVaultSecret -VaultName $destVaultName -Name $_ `
        -SecretValue (Get-AzKeyVaultSecret -VaultName $sourceVaultName -Name $_).SecretValue
}

Просто подведу итог:

Параметры являются обязательными с этим изменением, и вы можете завершить их табуляцией, поэтому вам не нужно помнить, какой из них является первым.
Использование foreach немного чище, чем использование do\while (конечно, меньше когнитивных усилий).
Вам не нужно преобразовывать значения в текст и шифровать их обратно, вы можете просто использовать зашифрованное значение, чтобы присвоить его новому секрету

1 голос
/ 10 апреля 2019

Есть сейчас!

import-module AzureRM.keyvault

$sourceVaultName = $args[0]
$destVaultName = $args[1]

Connect-AzureRmAccount

#unfortunately you can only access secret values one at a time, by name. so this gets the names first
$names = (Get-AzureKeyVaultSecret -VaultName $sourceVaultName | select Name)

$i=0
do {
   $rawSecret = (Get-AzureKeyVaultSecret -VaultName $sourceVaultName -Name $names[$i].Name).SecretValueText
   $AKVsecret = ConvertTo-SecureString $rawSecret -AsPlainText -Force
   Set-AzureKeyVaultSecret -VaultName $destVaultName -Name $names[$i].Name -SecretValue $AKVsecret
   $i++
} while($i -lt $names.length)

Вы можете позвонить, используя

script.ps1 source-keyvault-name dest-keyvault-name

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