Разрешение приложениям получать доступ к секретам из хранилища ключей Azure Stack Hub

В этой статье описывается, как запустить пример приложения HelloKeyVault, который извлекает ключи и секреты из хранилища ключей в Azure Stack Hub.

Предварительные требования

Вы можете установить следующие обязательные компоненты из Пакета средств разработки Azure Stack или из внешнего клиента Windows, если вы используете VPN-подключение:

Создание хранилища ключей и регистрация приложения

Чтобы подготовить пример приложения, выполните следующие действия:

  • Создайте хранилище ключей в Azure Stack Hub.
  • Зарегистрируйте приложение в Microsoft Entra идентификаторе.

С помощью портала Azure или PowerShell выполните действия для подготовки к установке примера приложения.

Примечание

По умолчанию скрипт PowerShell создает новое приложение в Active Directory. Но его можно использовать и для регистрации существующего приложения.

Прежде чем запускать приведенный ниже скрипт, не забудьте предоставить значения для переменных aadTenantName и applicationPassword. Если вы не укажете значение для переменной applicationPassword, скрипт создаст случайный пароль.

$vaultName           = 'myVault'
$resourceGroupName   = 'myResourceGroup'
$applicationName     = 'myApp'
$location            = 'local'

# Password for the application. If not specified, this script generates a random password during app creation.
$applicationPassword = ''

# Function to generate a random password for the application.
Function GenerateSymmetricKey()
{
    $key = New-Object byte[](32)
    $rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::Create()
    $rng.GetBytes($key)
    return [System.Convert]::ToBase64String($key)
}

Write-Host 'Please log into your Azure Stack Hub user environment' -foregroundcolor Green

$tenantARM = "https://management.local.azurestack.external"
$aadTenantName = "FILL THIS IN WITH YOUR AAD TENANT NAME. FOR EXAMPLE: myazurestack.onmicrosoft.com"

# Configure the Azure Stack Hub operator's PowerShell environment.
Add-AzEnvironment `
  -Name "AzureStackUser" `
  -ArmEndpoint $tenantARM

$TenantID = Get-AzsDirectoryTenantId `
  -AADTenantName $aadTenantName `
  -EnvironmentName AzureStackUser

# Sign in to the user portal.
Connect-AzAccount `
  -EnvironmentName "AzureStackUser" `
  -TenantId $TenantID `

$now = [System.DateTime]::Now
$oneYearFromNow = $now.AddYears(1)

$applicationPassword = GenerateSymmetricKey

# Create a new Azure AD application.
$identifierUri = [string]::Format("http://localhost:8080/{0}",[Guid]::NewGuid().ToString("N"))
$homePage = "https://contoso.com"

Write-Host "Creating a new AAD Application"
$ADApp = New-AzADApplication `
  -DisplayName $applicationName `
  -HomePage $homePage `
  -IdentifierUris $identifierUri `
  -StartDate $now `
  -EndDate $oneYearFromNow `
  -Password $applicationPassword

Write-Host "Creating a new AAD service principal"
$servicePrincipal = New-AzADServicePrincipal `
  -ApplicationId $ADApp.ApplicationId

# Create a new resource group and a key vault in that resource group.
New-AzResourceGroup `
  -Name $resourceGroupName `
  -Location $location

Write-Host "Creating vault $vaultName"
$vault = New-AzKeyVault -VaultName $vaultName `
  -ResourceGroupName $resourceGroupName `
  -Sku standard `
  -Location $location

# Specify full privileges to the vault for the application.
Write-Host "Setting access policy"
Set-AzKeyVaultAccessPolicy -VaultName $vaultName `
  -ObjectId $servicePrincipal.Id `
  -PermissionsToKeys all `
  -PermissionsToSecrets all

Write-Host "Paste the following settings into the app.config file for the HelloKeyVault project:"
'<add key="VaultUrl" value="' + $vault.VaultUri + '"/>'
'<add key="AuthClientId" value="' + $servicePrincipal.ApplicationId + '"/>'
'<add key="AuthClientSecret" value="' + $applicationPassword + '"/>'
Write-Host

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

Хранилище ключей с ключами доступа

Запишите значения VaultUrl, AuthClientId и AuthClientSecret, возвращенные предыдущим скриптом. Используйте их для запуска приложения HelloKeyVault.

Скачивание и настройка примера приложения

Скачайте пример хранилища ключей со страницы примеров клиентов хранилища ключей Azure. Извлеките содержимое ZIP-файла на рабочей станции разработки. Будет создана папка samples с двумя приложениями. В этой статье мы используем только HelloKeyVault.

Чтобы применить пример HelloKeyVault, выполните следующие действия.

  1. Перейдите к папке Microsoft.Azure.KeyVault.Samples>samples>HelloKeyVault.
  2. Откройте приложение HelloKeyVault в Visual Studio.

Настройка примера приложения

В Visual Studio:

  1. Откройте файл HelloKeyVault\App.config и найдите элемент <appSettings>.

  2. Обновите ключи VaultUrl, AuthClientId и AuthCertThumbprint с помощью значений, которые были возвращены при создании хранилища ключей. По умолчанию файл App.config содержит заполнитель для AuthCertThumbprint. Замените его на AuthClientSecret.

    <appSettings>
     <!-- Update these settings for your test environment -->
     <add key="VaultUrl" value="URL to your Vault" />
     <add key="AuthClientId" value="Client Id of your Service Principal" />
     <add key="AuthCertThumbprint" value="Thumbprint of the certificate used for authentication" />
     <add key="TracingEnabled" value="false" />
    </appSettings>
    
  3. Повторно создайте решение.

Запустите приложение

При запуске HelloKeyVault приложение входит в Microsoft Entra идентификатор, а затем использует AuthClientSecret маркер для проверки подлинности в хранилище ключей в Azure Stack Hub.

Пример HelloKeyVault позволяет выполнить следующие действия:

  • запустить основные операции, например создание, шифрование, заключение в оболочку или удаление ключей и секретных данных;
  • передать приложению HelloKeyVault параметры, например encrypt и decrypt, чтобы применить указанные изменения к хранилищу ключей.

Дальнейшие действия