Поделиться через


Автоматизировать смену секрета для ресурсов с двумя наборами аутентификационных данных.

Лучший способ аутентификации к службам Azure — использовать управляемую идентичность, но существуют некоторые сценарии, в которых это невозможно. В таких случаях используются ключи доступа или пароли. Часто следует повернуть ключи доступа и пароли.

В этом руководстве показано, как автоматизировать периодическую смену секретов для баз данных и служб, использующих два набора учетных данных проверки подлинности. Подробные сведения о концепциях и преимуществах авторотации в разных типах ресурсов см. в статье "Общие сведения об авторотации" в Azure Key Vault.

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

Замечание

Для служб учетной записи хранения рекомендуется использовать идентификатор Microsoft Entra для авторизации запросов. Дополнительные сведения см. в разделе "Авторизация доступа к BLOB-объектам с помощью Microsoft Entra ID". Существуют службы, требующие строк подключения учетной записи хранения с ключами доступа. Для этого сценария рекомендуется использовать это решение.

Вот решение для вращения, описанное в этом руководстве:

Схема, показывющая решение поворота.

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

  1. За тридцать дней до истечения срока действия секрета Key Vault публикует событие о скором истечении в Event Grid.
  2. Сетка событий проверяет подписки на события и использует HTTP POST для вызова конечной точки приложения-функции, которая подписана на событие.
  3. Приложение-функция определяет альтернативный ключ (не последний) и обращается к учетной записи хранения, чтобы восстановить его.
  4. Приложение-функция добавляет новый повторно созданный ключ в Azure Key Vault в качестве новой версии секрета.

Предпосылки

  • Подписка Azure. Создайте ее бесплатно.
  • Azure Cloud Shell. В этом руководстве используется портал Cloud Shell с помощью PowerShell env
  • Azure Key Vault.
  • Две учетные записи хранения Azure.

Замечание

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

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

Ссылка, помеченная как Deploy to Azure.

  1. Для параметра Группа ресурсов выберите Создать. Назовите группу vault rotation и нажмите OK.

  2. Выберите Review + create.

  3. Выберите Создать.

    Снимок экрана: создание группы ресурсов.

Теперь у вас будет хранилище ключей и две учетные записи хранения. Эту настройку можно проверить в Azure CLI или Azure PowerShell, выполнив следующую команду:

az resource list -o table -g vaultrotation

Результат будет выглядеть примерно так:

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
vaultrotation-kv         vaultrotation      westus      Microsoft.KeyVault/vaults
vaultrotationstorage     vaultrotation      westus      Microsoft.Storage/storageAccounts
vaultrotationstorage2    vaultrotation      westus      Microsoft.Storage/storageAccounts

Создание и развертывание функции смены ключей

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

Для функции ротации приложений требуются следующие компоненты и конфигурация:

  • План службы приложений Azure
  • Учетная запись хранения для управления триггерами функционального приложения
  • Политика доступа для доступа к секретам в Key Vault
  • Роль службы оператора ключа учетной записи хранения, назначенная функциональному приложению с целью получить доступ к ключам доступа к учетной записи хранения.
  • Функция поворота ключей с триггером события и триггером HTTP (поворот по запросу)
  • Подписка на событие Event Grid для события SecretNearExpiry
  1. Выберите ссылку для развертывания шаблона Azure:

    Ссылка на развертывание шаблона Azure.

  2. В списке групп ресурсов выберите vaultrotation.

  3. В поле группа ресурсов учетной записи хранения введите имя группы ресурсов, в которой находится ваша учетная запись хранения. Сохраните значение по умолчанию [resourceGroup().name] , если учетная запись хранения уже находится в той же группе ресурсов, где будет развернута функция смены ключей.

  4. В поле Имя учетной записи хранения введите имя учетной записи хранения, содержащей ключи доступа для ротации. Сохраните значение по умолчанию [concat(resourceGroup().name, storage)] , если используется учетная запись хранения, созданная в предварительных требованиях.

  5. В поле RG Key Vault введите имя группы ресурсов, в которой находится хранилище ключей. Сохраните значение по умолчанию [resourceGroup().name] , если хранилище ключей уже существует в той же группе ресурсов, где будет развернута функция смены ключей.

  6. В поле Имя хранилища ключей введите имя хранилища ключей. Сохраните значение по умолчанию [concat(resourceGroup().name, '-kv')], если используется хранилище ключей, созданное в предварительных требованиях.

  7. В поле "Тип плана службы приложений " выберите план размещения. План уровня "Премиум" необходим только в том случае, если хранилище ключей находится за брандмауэром.

  8. В поле "Имя приложения-функции " введите имя приложения-функции.

  9. В поле "Имя секрета" введите имя секрета, в котором будут храниться ключи доступа.

  10. В поле URL-адреса репозитория введите расположение кода функции GitHub. В этом руководстве вы можете использовать https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .

  11. Выберите Review + create.

  12. Выберите Создать.

    Снимок экрана: создание и развертывание функции.

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

Снимок экрана, на котором показана страница «Развертывание завершено».

Замечание

Если возникает сбой, можно выбрать повторное развертывание , чтобы завершить развертывание компонентов.

Шаблоны развертывания и код для функции смены можно найти в Azure Samples.

Добавьте ключи доступа учетной записи хранения в секреты Key Vault

Сначала установите политику доступа, чтобы предоставить разрешения на управление секретами вашему пользователю:

az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list

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

Определите идентификатор ресурса учетной записи хранения. Это значение можно найти в свойстве id .

az storage account show -n vaultrotationstorage

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

az storage account keys list -n vaultrotationstorage

Добавьте секрет в хранилище ключей с сроком действия 60 дней, идентификатор ресурса учетной записи для хранения и чтобы сразу активировать смену в демонстрационных целях, установите дату окончания срока действия на завтра. Выполните следующую команду, используя полученные значения для key1Value и storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Этот секрет активирует SecretNearExpiry событие в течение нескольких минут. Это событие, в свою очередь, вызовет функцию для ротации секрета с установленным сроком действия 60 дней. В этой конфигурации событие SecretNearExpiry будет запускаться каждые 30 дней (30 дней до истечения срока действия), а функция обновления будет поочередно чередовать ключ 1 и ключ 2.

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

Используйте эту команду, чтобы получить секретную информацию:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey

Обратите внимание, что CredentialId обновляется до альтернативного keyName и value повторно создается:

Снимок экрана, показывающий вывод команды az keyvault secret show для первого аккаунта хранения.

Получение ключей доступа для сравнения значений:

az storage account keys list -n vaultrotationstorage 

Обратите внимание, что свойство value ключа совпадает с секретом в хранилище ключей:

Снимок экрана: выходные данные команды списка ключей учетной записи хранения A Z для первой учетной записи хранения.

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

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

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

  • Роль службы оператора ключа учетной записи хранения, назначенная приложению-функции, чтобы получить доступ к ключам доступа к учетной записи хранения.
  • Подписка на событие Event Grid для события SecretNearExpiry.
  1. Выберите ссылку для развертывания шаблона Azure:

    Ссылка на развертывание шаблона Azure.

  2. В списке групп ресурсов выберите vaultrotation.

  3. В поле группа ресурсов учетной записи хранения введите имя группы ресурсов, в которой находится ваша учетная запись хранения. Сохраните значение по умолчанию [resourceGroup().name] , если учетная запись хранения уже находится в той же группе ресурсов, где будет развернута функция смены ключей.

  4. В поле Имя учетной записи хранения введите имя учетной записи хранения, содержащей ключи доступа для ротации.

  5. В поле RG Key Vault введите имя группы ресурсов, в которой находится хранилище ключей. Сохраните значение по умолчанию [resourceGroup().name] , если хранилище ключей уже существует в той же группе ресурсов, где будет развернута функция смены ключей.

  6. В поле Имя хранилища ключей введите имя хранилища ключей.

  7. В поле "Имя приложения-функции " введите имя приложения-функции.

  8. В поле "Имя секрета" введите имя секрета, в котором будут храниться ключи доступа.

  9. Выберите Review + create.

  10. Выберите Создать.

    Снимок экрана: создание дополнительной учетной записи хранения.

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

Определите идентификатор ресурса учетной записи хранения. Это значение можно найти в свойстве id .

az storage account show -n vaultrotationstorage2

Выведите список ключей доступа к учетной записи хранения, чтобы получить значение key2:

az storage account keys list -n vaultrotationstorage2

Добавьте секрет в хранилище ключей с сроком действия 60 дней, идентификатор ресурса учетной записи для хранения и чтобы сразу активировать смену в демонстрационных целях, установите дату окончания срока действия на завтра. Выполните следующую команду, используя полученные значения для key2Value и storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Используйте эту команду, чтобы получить секретную информацию:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey2

Обратите внимание, что CredentialId обновляется до альтернативного keyName и value повторно создается:

Снимок экрана, показывающий результат выполнения команды A Z keyvault secret show для второй учетной записи хранения.

Получение ключей доступа для сравнения значений:

az storage account keys list -n vaultrotationstorage 

Обратите внимание, что свойство value ключа совпадает с секретом в хранилище ключей:

Снимок экрана: выходные данные команды списка ключей учетной записи хранения A Z для второй учетной записи хранения.

Отключить поворот для секрета

Вы можете отключить обновление секрета, просто удалив подписку Event Grid для этого секрета. Используйте командлет Azure PowerShell Remove-AzEventGridSubscription или команду Azure CLI az eventgrid event-subscription delete.

Функции ротации в Key Vault для двух наборов учетных данных

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

Замечание

Эти функции поворота создаются членом сообщества, а не корпорацией Майкрософт. Функции сообщества не поддерживаются в рамках любой программы поддержки майкрософт или службы, и предоставляются КАК IS без каких-либо гарантий.

Дальнейшие шаги