Автоматизация смены секретов для ресурсов с двумя наборами учетных данных для аутентификации
Лучшим способом проверки подлинности в службах Azure является использование управляемого удостоверения, но иногда его использование невозможно. В этих случаях используются ключи доступа или пароли. Ключи доступа и пароли следует часто сменять.
В этом учебнике описано, как автоматизировать периодическую смену секретов для баз данных и служб, которые используют два набора учетных данных для аутентификации. В частности, в этом учебнике показано, как выполнять смену ключей учетной записи службы хранилища Azure, сохраненных в Azure Key Vault в виде секретов. Вы будете использовать функцию, активируемую уведомлением Сетки событий Azure.
Примечание.
Для служб учетной записи хранения рекомендуется использовать идентификатор Microsoft Entra для авторизации запросов. Дополнительные сведения см. в разделе "Авторизация доступа к BLOB-объектам" с помощью идентификатора Microsoft Entra. Существуют службы, которым требуются строки подключения учетной записи хранения с ключами доступа. Для такого сценария рекомендуется использовать именно это решение.
На следующей схеме показано решение для смены, описанное в этом учебнике:
В этом решении Azure Key Vault хранит отдельные ключи доступа учетной записи хранения как версии одного секрета, меняя местами первичный и вторичный ключи в каждой следующей версии. Когда один из ключей доступа сохраняется в последней версии секрета, другой ключ создается повторно и добавляется в Key Vault как новая последняя версия секрета. Такое решение обеспечивает полный цикл смены в приложении для обновления последнего созданного ключа.
- За 30 дней до истечения срока действия секрета Key Vault публикует в Сетке событий соответствующее событие.
- Сетка событий проверяет подписки на события и с помощью HTTP-запроса методом POST вызывает конечную точку приложения-функции, подписанную на это событие.
- Приложение-функция идентифицирует другой ключ (не назначенный последней версией) и вызывает учетную запись хранения для его повторного создания.
- Приложение-функция добавляет повторно созданный ключ в Azure Key Vault в качестве новой версии этого секрета.
Необходимые компоненты
- Подписка Azure. Создайте ее бесплатно.
- Azure Cloud Shell. В этом учебнике используется портал Cloud Shell и оболочка PowerShell
- Azure Key Vault.
- Две учетные записи хранения Azure.
Примечание.
Смена ключа общей учетной записи хранения отменяет подписанный URL-адрес (SAS), созданный на основе этого ключа. После смены ключа учетной записи хранения необходимо повторно создать маркеры SAS на уровне учетной записи, чтобы избежать сбоев в работе приложений.
Если у вас нет хранилища ключей и учетных записей хранения, можно использовать следующую ссылку на развертывание:
Для параметра Группа ресурсов выберите Создать. Назовите смену хранилища групп и нажмите кнопку "ОК".
Выберите Review + create (Просмотреть и создать).
Нажмите кнопку создания.
Теперь у вас есть хранилище ключей и две учетные записи хранения. Вы можете проверить эти ресурсы в 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-триггеру (смена по запросу);
- подписка на событие Сетки событий для события SecretNearExpiry.
Щелкните ссылку для развертывания шаблона в Azure:
В списке Группа ресурсов выберите vaultrotation.
В поле Группа ресурсов учетной записи хранения введите имя группы ресурсов, в которой расположена ваша учетная запись хранения. Оставьте значение по умолчанию [resourceGroup().name], если ваша учетная запись хранения уже расположена в группе ресурсов, в которой будет развернута функция смены ключа.
В поле Имя учетной записи хранения введите имя учетной записи хранения, которая содержит сменяемые ключи. Сохраните значение по умолчанию [concat(resourceGroup().name, 'storage')], если вы используете учетную запись хранения, созданную в разделе Предварительные требования.
В поле Группа ресурсов Key Vault введите имя группы ресурсов, в которой расположено ваше хранилище ключей. Оставьте значение по умолчанию [resourceGroup().name], если ваше хранилище ключей уже существует в группе ресурсов, в которой будет развернута функция смены ключа.
В поле Имя Key Vault введите имя хранилища ключей. Сохраните значение по умолчанию [concat(resourceGroup().name, '-kv')], если вы используете хранилище ключей, созданное в разделе Предварительные требования.
В поле App Service Plan Type (Тип плана службы приложений) выберите план размещения. План Premium требуется только в том случае, если хранилище ключей находится за брандмауэром.
В поле Имя приложения-функции введите соответствующее имя.
В поле Имя секрета введите имя секрета, в котором будут храниться ключи доступа.
В поле URL-адрес репозитория введите расположение кода функции в GitHub. В этом руководстве вы можете использовать https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
Выберите Review + create (Просмотреть и создать).
Нажмите кнопку создания.
Выполнив описанные выше действия, вы создадите учетную запись хранения, ферму серверов, приложение-функцию и экземпляр 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 и key2.
Чтобы убедиться, что ключи доступа созданы повторно, вы можете получить ключ учетной записи хранения и секрет Key Vault и сравнить их.
Используйте следующую команду, чтобы получить данные о секрете:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Обратите внимание, что CredentialId
получает значение другого keyName
, а value
создается повторно:
Получите ключи доступа для сравнения значений:
az storage account keys list -n vaultrotationstorage
Обратите внимание, что value
ключа совпадает с секретом в хранилище ключей.
Использование существующей функции смены учетных данных для нескольких учетных записей хранения
Вы можете повторно использовать одно и то же приложение-функцию для смены ключей для нескольких учетных записей хранения.
Чтобы добавить ключи учетной записи хранения в существующую функцию для смены, вам потребуется:
- роль службы оператора ключа учетной записи хранения, назначенная приложению-функции, чтобы оно могло обращаться к ключам доступа учетной записи хранения;
- подписка на событие Сетки событий для события SecretNearExpiry.
Щелкните ссылку для развертывания шаблона в Azure:
В списке Группа ресурсов выберите vaultrotation.
В поле Группа ресурсов учетной записи хранения введите имя группы ресурсов, в которой расположена ваша учетная запись хранения. Оставьте значение по умолчанию [resourceGroup().name], если ваша учетная запись хранения уже расположена в группе ресурсов, в которой будет развернута функция смены ключа.
В поле Имя учетной записи хранения введите имя учетной записи хранения, которая содержит сменяемые ключи.
В поле Группа ресурсов Key Vault введите имя группы ресурсов, в которой расположено ваше хранилище ключей. Оставьте значение по умолчанию [resourceGroup().name], если ваше хранилище ключей уже существует в группе ресурсов, в которой будет развернута функция смены ключа.
В поле Имя Key Vault введите имя хранилища ключей.
В поле Имя приложения-функции введите соответствующее имя.
В поле Имя секрета введите имя секрета, в котором будут храниться ключи доступа.
Выберите Review + create (Просмотреть и создать).
Нажмите кнопку создания.
Добавление ключа доступа к учетной записи хранения к секретам Key Vault
Определите идентификатор ресурса учетной записи хранения. Это значение можно найти в свойстве id
.
az storage account show -n vaultrotationstorage2
Получите список ключей доступа к учетной записи хранения, чтобы получить значения второго ключа:
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
создается повторно:
Получите ключи доступа для сравнения значений:
az storage account keys list -n vaultrotationstorage
Обратите внимание, что value
ключа совпадает с секретом в хранилище ключей.
Отключение смены секрета
Вы можете отключить смену секрета, просто удалив подписку сетки событий для этого секрета. Используйте командлет Azure PowerShell Remove-AzEventGridSubscription или команду Azure CLI az event grid event--subscription delete.
Функции ротации хранилища ключей для двух наборов учетных данных
Шаблон функций ротации для двух наборов учетных данных и нескольких готовых к использованию функций:
Примечание.
Эти функции поворота создаются членом сообщества, а не корпорацией Майкрософт. Функции сообщества не поддерживаются в рамках любой программы поддержки майкрософт или службы, и предоставляются КАК IS без каких-либо гарантий.
Следующие шаги
- Учебник. Автоматизация смены секретов для ресурсов с одним набором учетных данных для аутентификации
- Общие сведения: Мониторинг Key Vault с помощью Сетки событий Azure
- Практическое руководство. Создание первой функции на портале Azure
- Практическое руководство. Настройка отправки сообщений об изменении состояния секретов в хранилище ключей с помощью Logic Apps
- Справочник. Azure Key Vault как источник Сетки событий