Управление Key Vault в Azure Stack Hub с использованием PowerShell
В этой статье объясняется, как создать и администрировать хранилище ключей в Azure Stack Hub с помощью PowerShell. Вы узнаете, как с помощью командлетов PowerShell для Key Vault выполнять следующие задачи:
- Создайте хранилище ключей.
- сохранение криптографических ключей и секретов, а также управление ими;
- авторизация пользователей и приложений для вызова операций в хранилище.
Примечание.
Командлеты PowerShell для Key Vault, описанные в этой статье, доступны в пакете SDK для Azure PowerShell.
Необходимые компоненты
- Необходимо подписаться на предложение, включающее службу Azure Key Vault.
- Установка PowerShell для Azure Stack Hub.
- Настройка среды PowerShell в Azure Stack Hub.
Включение операций с Key Vault для клиентской подписки
Чтобы выполнять любые операции с хранилищем ключей, они должны быть разрешены для подписки клиента. Чтобы убедиться, что функции хранилища ключей включены, выполните следующую команду.
Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | ft -Autosize
Если для подписки разрешены операции с хранилищем, в выходных данных в столбце RegistrationState для всех типов ресурсов хранилища ключей будет указано значение Registered.
Если операции с хранилищем не разрешены, выполните следующую команду, чтобы зарегистрировать службу Key Vault в своей подписке.
Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault
Если регистрация прошла успешно, возвращается следующий результат:
При вызове команд хранилища ключей может появиться сообщение об ошибке, например "Подписка не зарегистрирована для использования пространства имен Microsoft.KeyVault". Если вы получите ошибку, убедитесь, что вы включили поставщик ресурсов Key Vault, выполнив предыдущие инструкции.
Создание хранилища ключей
Чтобы создать хранилище ключей, сначала нужно создать группу ресурсов для размещения всех относящихся к хранилищу ключей ресурсов. Выполните следующую команду, чтобы создать новую группу ресурсов:
New-AzResourceGroup -Name "VaultRG" -Location local -verbose -Force
Теперь используйте следующий командлет, чтобы создать хранилище ключей в созданной ранее группе ресурсов. Эта команда принимает три обязательных параметра: имя группы ресурсов, имя хранилища ключей и географическое расположение.
Чтобы создать хранилище ключей, выполните следующую команду:
New-AzKeyVault -VaultName "Vault01" -ResourceGroupName "VaultRG" -Location local -verbose
В выходных данных команды будут указаны свойства хранилища ключей, которое вы создали. Когда приложение обращается к этому хранилищу, нужно использовать свойство Vault URI. В этом примере оно имеет значение https://vault01.vault.local.azurestack.external
.
Развертывание на основе служб федерации Active Directory (AD FS)
При развертывании AD FS может появиться предупреждение: Пользователь или приложение не имеют разрешения на доступ к этому хранилищу". Чтобы устранить эту проблему, задайте политику доступа для хранилища с помощью команды Set-AzKeyVaultAccessPolicy:
# Obtain the security identifier(SID) of the active directory user
$adUser = Get-ADUser -Filter "Name -eq '{Active directory user name}'"
$objectSID = $adUser.SID.Value
# Set the key vault access policy
Set-AzKeyVaultAccessPolicy -VaultName "{key vault name}" -ResourceGroupName "{resource group name}" -ObjectId "{object SID}" -PermissionsToKeys {permissionsToKeys} -PermissionsToSecrets {permissionsToSecrets} -BypassObjectIdValidation
Управление ключами и секретами
После создания хранилища выполните инструкции ниже, чтобы создать в хранилище ключи и секреты и управлять ими.
Создание ключа
Используйте командлет Add-AzureKeyVaultKey, чтобы создать или импортировать ключ с программной защитой в хранилище ключей.
Add-AzureKeyVaultKey -VaultName "Vault01" -Name "Key01" -verbose -Destination Software
Параметр -Destination
позволяет указать, что ключ имеет программную защиту. После создания ключа команда выводит сведения об успешном выполнении операции.
Теперь вы можете использовать созданный ключ, указывая его URI. Если вы создаете или импортируете ключ, имя которого совпадает с именем существующего ключа, все указанные для нового ключа параметры сохраняются в исходном ключе. Информацию о предыдущей версии ключа можно получить с помощью URI для конкретной версии. Например:
https://vault10.vault.local.azurestack.external:443/keys/key01
всегда предоставляет текущую версию.https://vault010.vault.local.azurestack.external:443/keys/key01/d0b36ee2e3d14e9f967b8b6b1d38938a
позволяет получить конкретную версию.
Получение ключа
Используйте командлет Get-AzureKeyVaultKey, чтобы получить ключ и сведения о нем.
Get-AzureKeyVaultKey -VaultName "Vault01" -Name "Key01"
Создание секрета
Используйте командлет Set-AzureKeyVaultSecret, чтобы создать или обновить секрет в хранилище. Если секрет еще не существует, создается новый. Если секрет уже существует, создается новая версия этого секрета.
$secretvalue = ConvertTo-SecureString "User@123" -AsPlainText -Force
Set-AzureKeyVaultSecret -VaultName "Vault01" -Name "Secret01" -SecretValue $secretvalue
Получение секрета
Используйте командлет Get-AzureKeyVaultSecret, чтобы считать секрет из хранилища ключей. Эта команда может возвращать все версии секрета или только конкретные версии.
Get-AzureKeyVaultSecret -VaultName "Vault01" -Name "Secret01"
Создав ключи и секреты, вы можете разрешить внешним приложениям использовать их.
Авторизация приложения для использования ключа или секрета
Используйте следующий командлет, чтобы авторизовать приложение для доступа к ключу или секрету в хранилище ключей.
В следующем примере имя хранилища — ContosoKeyVault, а приложение, которое требуется авторизовать, имеет идентификатор клиента 00001111-aaaa-2222-bb-333cccc44444. Для этого выполните следующую команду. Кроме того, вы можете предоставить разрешения пользователю, приложению или группе безопасности с помощью параметра PermissionsToKeys.
При использовании командлета для настроенной среды Azure Stack Hub для AD FS необходимо указать параметр BypassObjectIdIdation.
Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -ServicePrincipalName 00001111-aaaa-2222-bbbb-3333cccc4444 -PermissionsToKeys decrypt,sign -BypassObjectIdValidation
Чтобы разрешить этому же приложению считывать секреты из хранилища, выполните следующий командлет:
Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -ServicePrincipalName 8f8c4bbd-485b-45fd-98f7-ec6300 -PermissionsToKeys Get -BypassObjectIdValidation