Управление ключами учетной записи хранения с помощью Key Vault и Azure PowerShell (устаревшая версия)

Важно!

Управляемые Key Vault ключи учетной записи служба хранилища (прежняя версия) поддерживаются без дополнительных обновлений. Только SAS учетной записи поддерживаются с подписанными определениями SAS службы хранилища не позднее 28 марта 2018 г.

Важно!

Мы рекомендуем использовать служба хранилища Azure интеграцию с идентификатором Microsoft Entra ID, облачной службой управления удостоверениями и доступом Майкрософт. Интеграция Microsoft Entra доступна для больших двоичных объектов Azure и очередей, а также предоставляет доступ на основе маркеров OAuth2 к служба хранилища Azure (так же, как Azure Key Vault). Идентификатор Microsoft Entra позволяет выполнять проверку подлинности клиентского приложения с помощью приложения или удостоверения пользователя, а не учетных данных учетной записи хранения. Управляемое удостоверение Microsoft Entra можно использовать при запуске в Azure. Управляемые удостоверения устраняют необходимость проверки подлинности клиента и хранения учетных данных в приложении или вместе с ним. Используйте это решение только в том случае, если проверка подлинности Microsoft Entra невозможна.

Учетная запись хранения Azure использует учетные данные, состоящие из имени учетной записи и ключа. Ключ генерируется автоматически и служит скорее паролем, чем криптографическим ключом. Key Vault управляет ключами учетной записи хранения, периодически создавая их заново в учетной записи хранения, и предоставляет маркеры подписанного URL-адреса в случае делегированного доступа к ресурсам в учетной записи хранения.

С помощью функции ключа управляемой учетной записи хранения Key Vault можно перечислять (синхронизировать) ключи с учетными записями хранения Azure и периодически повторно создавать (заменять) ключи. Вы можете управлять ключами как для учетных записей хранения, так и для классических учетных записей хранения.

При использовании функции ключей для управляемой учетной записи хранения следует учитывать следующие моменты:

  • Значения ключей никогда не возвращаются в ответе вызывающему объекту.
  • Управлять ключами учетной записи хранения должно только решение Key Vault. Не управляйте ключами самостоятельно и избегайте конфликтов с процессами Key Vault.
  • Управлять ключами учетной записи хранения должен только один объект Key Vault. Не разрешайте управление ключами из нескольких объектов.
  • Создавайте ключи повторно только с помощью Key Vault. Не создавайте повторно ключи своей учетной записи хранения вручную.

Важно!

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

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Идентификатор приложения субъекта-службы

Клиент Microsoft Entra предоставляет каждое зарегистрированное приложение с субъектом-службой. Субъект-служба выступает в качестве идентификатора приложения, который используется во время настройки авторизации для доступа к другим ресурсам Azure с использованием Azure RBAC.

Key Vault — это приложение Майкрософт, которое предварительно зарегистрировано во всех клиентах Microsoft Entra. Key Vault регистрируется с одним и тем же идентификатором приложения в каждом облаке Azure.

Клиенты Облако Application ID
ИД Microsoft Entra Azure для государственных организаций 7e7c393b-45d0-48b1-a35e-2905ddf8183c
ИД Microsoft Entra Общедоступное облако Azure cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Другой Любое cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Необходимые компоненты

Для работы с этим руководством сначала вам следует выполнить перечисленные ниже действия.

Управление ключами учетной записи хранения

Подключитесь к своей учетной записи Azure

Проверьте подлинность сеанса PowerShell с помощью командлета Connect-AzAccount.

Connect-AzAccount

Если у вас несколько подписок Azure, можно перечислить их с помощью командлета Get-AzSubscription и указать подписку, которую необходимо использовать, с помощью командлета Set-AzContext.

Set-AzContext -SubscriptionId <subscriptionId>

Задание переменных

Сначала задайте переменные, которые будут использоваться командлетами PowerShell на последующих этапах. Обязательно обновите заполнители "YourResourceGroupName", "Your служба хранилища AccountName" и "YourKeyVaultName" и задайте для параметра $keyVaultSpAppId cfa8b339-82a2-471a-a3c9-0fc0be7a4093 значение (как указано в идентификаторе приложения субъекта-службы).

Мы также будем использовать командлеты Get-AzContext и Get-Az служба хранилища Account Azure для получения идентификатора пользователя и контекста учетной записи хранения Azure.

$resourceGroupName = <YourResourceGroupName>
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
$storageAccountKey = "key1" #(key1 or key2 are allowed)

# Get your User Id
$userId = (Get-AzContext).Account.Id

# Get a reference to your Azure storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Примечание.

Для классической учетной записи служба хранилища используется "primary" и "secondary" для $storageAccountKey
Вместо "Get-AzStorageAccount" для классической учетной записи хранения используйте "Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName".

Предоставление доступа Key Vault к учетной записи хранения

Прежде чем приложение Key Vault сможет получить доступ к ключам учетной записи хранения и возможность управления ими, вы должны авторизовать его доступ к вашей учетной записи хранения. Приложению Key Vault нужны разрешения для перечисления и повторного создания ключей для учетной записи хранения. Эти разрешения включаются с помощью встроенной роли Azure Роль службы оператора ключей учетных записей хранения.

Назначьте эту роль субъекту-службе Key Vault, ограничив область учетной записью хранения с помощью командлета Azure PowerShell New-AzRoleAssignment.

# Assign Azure role "Storage Account Key Operator Service Role" to Key Vault, limiting the access scope to your storage account. For a classic storage account, use "Classic Storage Account Key Operator Service Role."
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

После успешного назначения ролей должен отобразиться результат, аналогичный приведенному ниже.

RoleAssignmentId   : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/189cblll-12fb-406e-8699-4eef8b2b9ecz
Scope              : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
DisplayName        : Azure Key Vault
SignInName         :
RoleDefinitionName : storage account Key Operator Service Role
RoleDefinitionId   : 81a9662b-bebf-436f-a333-f67b29880f12
ObjectId           : 93c27d83-f79b-4cb2-8dd4-4aa716542e74
ObjectType         : ServicePrincipal
CanDelegate        : False

Если приложение Key Vault уже было добавлено к роли в вашей учетной записи хранения, вы получите сообщение об ошибке Назначение роли уже существует. Можно также проверить назначение роли, используя страницу учетной записи хранения "Управление доступом (IAM)" для портала Azure.

Предоставление разрешения учетной записи пользователя для управляемых учетных записей хранения

Используйте командлет Azure PowerShell Set-AzKeyVaultAccessPolicy, чтобы обновить политику доступа Key Vault и предоставить разрешения учетной записи хранения учетной записи пользователя.

# Give your user principal access to all storage account permissions, on your Key Vault instance

Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge

Разрешения для учетных записей хранения недоступны на странице "Политики доступа" учетной записи хранения в портал Azure.

Добавление управляемой учетной записи хранения к экземпляру Key Vault

Используйте командлет Azure PowerShell Add-AzKeyVaultManagedStorageAccount, чтобы создать управляемую учетную запись хранения в экземпляре Key Vault. Переключатель -DisableAutoRegenerateKey НЕ указывает на повторное создание ключей учетной записи хранения.

# Add your storage account to your Key Vault's managed storage accounts

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey

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

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : False
Regeneration Period : 90.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Включение повторного создания ключа

Чтобы хранилище Key Vault периодически повторно создавало ключи учетной записи хранения, можно использовать командлет Azure PowerShell Add-AzKeyVaultManagedStorageAccount, задающий период повторного создания. В этом примере мы задали период восстановления 30 дней. Когда пришло время повернуть, Key Vault повторно создает неактивный ключ, а затем задает только что созданный ключ как активный. Ключ, используемый для выдачи маркеров SAS, является активным ключом.

$regenPeriod = [System.Timespan]::FromDays(30)

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod

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

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 30.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Маркер подписанного URL-адреса

Key Vault также может создавать маркеры подписанного URL-адреса. Подпись общего доступа обеспечивает делегированный доступ к ресурсам в вашей учетной записи хранения. Вы можете предоставить клиентам доступ к ресурсам в учетной записи хранения, не предоставляя общий доступ к ключам учетной записи. Подписанный URL-адрес обеспечивает возможность безопасно предоставлять общий доступ к ресурсам хранилища, не раскрывая ключи учетной записи.

С помощью команд в этом разделе можно выполнить следующие действия:

  • Задать определение подписанного URL-адреса учетной записи.
  • Задать в хранилище определение подписанного URL-адреса управляемого хранилища Key Vault. Определение содержит шаблон универсального кода ресурса (URI) созданного маркера подписанного URL-адреса. Этот подписанный URL-адрес относится к типу account и действителен в течение N дней.
  • Убедиться, что подписанный URL-адрес сохранен в хранилище ключей в качестве секрета.

Задание переменных

Сначала задайте переменные, которые будут использоваться командлетами PowerShell на последующих этапах. Обязательно измените заполнители <YourStorageAccountName> и <YourKeyVaultName>.

$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>

Определение шаблона подписанного URL-адреса

Key Vault использует шаблон определения SAS для создания маркеров для клиентских приложений.

Пример шаблона определения SAS:

$sasTemplate="sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

Параметры SAS учетной записи, необходимые в шаблоне определения SAS для Key Vault

Параметр запроса SAS Description
SignedVersion (sv) Обязательное. Указывает подписанную версию службы хранилища, используемую для авторизации запросов, выполненных с помощью SAS этой учетной записи. Должна быть установлена версия 05-04-2015 или более поздняя версия. Key Vault поддерживает версии не позднее 28 марта 2018 г.
SignedServices (ss) Обязательно. Указывает подписанные службы, доступные с помощью SAS учетной записи. Возможные значения включают:

- BLOB-объект (b)
- Очередь (q)
- Таблица (t)
- Файл (f)

Вы можете объединить значения для предоставления доступа к нескольким службам. Например, ss=bf указывает доступ к конечным точкам BLOB-объектов и файлов.
SignedResourceTypes (srt) Обязательно. Указывает подписанные типы ресурсов, доступные с помощью SAS учетной записи.

— Служба (s): доступ к API уровня обслуживания (например, Получить/Настроить свойства службы, Получить статистику службы, Список контейнеров/Очередей/Таблиц/Общих папок)
— Контейнер (c): доступ к API уровня контейнера (например, Создать/Удалить контейнер, Создать/Удалить очередь, Создать/Удалить таблицу, Создать/Удалить общую папку, Список BLOB-объектов/файлов и каталогов)
— Объект (o): доступ к API уровня объекта для больших двоичных объектов, сообщений очереди, сущностей таблицы и файлов (например, Put Blob, Query Entity, Get Messages, Create File и т. д.)

Вы можете объединить значения для предоставления доступа к нескольким типам ресурсов. Например, srt=sc указывает доступ к ресурсам службы и контейнера.
SignedPermission (sp) Обязательно. Указывает подписанные разрешения для SAS учетной записи. Разрешения действительны только в том случае, если они соответствуют указанному типу подписанного ресурса; в противном случае они игнорируются.

— Чтение (r): допустимо для всех подписанных типов ресурсов (служба, контейнер и объект). Дает разрешения на чтение для указанного типа ресурса.
— Запись (w): допустимо для всех подписанных типов ресурсов (служба, контейнер и объект). Дает разрешение на запись для указанного типа ресурса.
— Удаление (d): допустимо для типов ресурсов контейнера и объектов, за исключением сообщений очереди.
— Постоянное удаление (y): допустимо только для типа ресурса "BLOB-объект.
— Список (l): допустимо только для типа ресурсов "Служба" и "Контейнер".
- Добавление (a): допустимо только для следующих типов ресурсов объектов: сообщения очереди, сущности таблицы и добавочные BLOB-объекты.
— Создание (c): допустимо только для следующих типов ресурсов объектов: BLOB-объекты и файлы. Пользователи могут создавать новые BLOB-объекты или файлы, но не могут перезаписывать существующие BLOB-объекты или файлы.
— Обновление (u): допустимы только для следующих типов ресурсов объектов: сообщения очереди и сущности таблицы.
— Процесс (p): допустимый только для следующего типа ресурса объекта: сообщения очереди.
— Тег (t): допустимо только для следующего типа ресурса объекта: BLOB-объекты. Разрешает операции с тегами BLOB-объектов.
- Фильтр (f): допустимо только для следующего типа ресурса объекта: большой двоичный объект. Разрешает фильтрацию по тегу BLOB-объекта.
- Настройка политики неизменяемости (i): допустимо только для следующего типа ресурса объекта: BLOB-объект. Разрешает настройку и удаление политики неизменяемости и юридическое удержание BLOB-объекта.
SignedProtocol (spr) Необязательно. Указывает протоколы, разрешенные для запроса, сделанного с помощью SAS учетной записи. Параметр может иметь значение HTTPS и HTTP (https,http) или только HTTPS (https). Значение по умолчанию — https,http.

Только HTTP не является допустимым значением.

Дополнительные сведения о создании SAS для учетной записи см. в статье Создание SAS для учетной записи.

Примечание.

Key Vault игнорирует параметры времени существования, такие как "Срок действия подписи", "Подписанный запуск" и параметры, представленные после версии 28 марта 2018 г.

Настройка определения подписанного URL-адреса в Key Vault

Используйте командлет Azure PowerShell Set-AzKeyVaultManaged служба хранилища SasDefinition для создания определения подписанного URL-адреса. С помощью параметра -Name можно задать выбранное имя.

Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasTemplate -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

Проверка определения подписанного URL-адреса

Убедиться в том, что определение подписанного URL-адреса сохранено в хранилище ключей, можно с помощью командлета Azure PowerShell Get-AzKeyVaultSecret.

Сначала найдите определение подписанного URL-адреса в хранилище ключей.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Секрет, соответствующий определению SAS, будет иметь следующие свойства:

Vault Name   : <YourKeyVaultName>
Name         : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags         :

Теперь можно воспользоваться командлетом Get-AzKeyVaultSecret с параметром VaultName и Name для просмотра содержимого этого секрета.

$secretValueText = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName> -AsPlainText
Write-Output $secretValueText

В выходных данных этой команды будет отображаться строка определения SAS.

Следующие шаги