Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Лучший способ аутентификации к службам Azure — использовать управляемую идентичность, но существуют некоторые сценарии, в которых это невозможно. В таких случаях используются ключи доступа или пароли. Часто следует повернуть ключи доступа и пароли.
В этом руководстве показано, как автоматизировать периодическую смену секретов для баз данных и служб, использующих два набора учетных данных проверки подлинности. Подробные сведения о концепциях и преимуществах авторотации в разных типах ресурсов см. в статье "Общие сведения об авторотации" в Azure Key Vault.
В частности, в этом руководстве показано, как повернуть ключи учетной записи хранения Azure, хранящиеся в Azure Key Vault в качестве секретов. Вы будете использовать функцию, активируемую уведомлением Службы "Сетка событий Azure".
Замечание
Для служб учетной записи хранения рекомендуется использовать идентификатор Microsoft Entra для авторизации запросов. Дополнительные сведения см. в разделе "Авторизация доступа к BLOB-объектам с помощью Microsoft Entra ID". Существуют службы, требующие строк подключения учетной записи хранения с ключами доступа. Для этого сценария рекомендуется использовать это решение.
Вот решение для вращения, описанное в этом руководстве:
В этом решении Azure Key Vault сохраняет ключи доступа для отдельных учетных записей как версии одного и того же секрета, поочередно используя первичный и вторичный ключи в последующих версиях. Если один ключ доступа хранится в последней версии секрета, альтернативный ключ создается и добавляется в Key Vault в качестве новой последней версии секрета. Решение предоставляет весь цикл ротации приложения для обновления до новейшего повторно сгенерированного ключа.
- За тридцать дней до истечения срока действия секрета Key Vault публикует событие о скором истечении в Event Grid.
- Сетка событий проверяет подписки на события и использует HTTP POST для вызова конечной точки приложения-функции, которая подписана на событие.
- Приложение-функция определяет альтернативный ключ (не последний) и обращается к учетной записи хранения, чтобы восстановить его.
- Приложение-функция добавляет новый повторно созданный ключ в Azure Key Vault в качестве новой версии секрета.
Предпосылки
- Подписка Azure. Создайте ее бесплатно.
- Azure Cloud Shell. В этом руководстве используется портал Cloud Shell с помощью PowerShell env
- Azure Key Vault.
- Две учетные записи хранения Azure.
Замечание
Смена ключа общей учетной записи хранения отменяет подписанный URL-адрес (SAS), созданный на основе этого ключа. После смены ключа учетной записи хранения необходимо повторно создать токены SAS на уровне учетной записи, чтобы избежать сбоев в приложениях.
Эту ссылку развертывания можно использовать, если у вас нет существующего хранилища ключей и существующих учетных записей хранения:
Для параметра Группа ресурсов выберите Создать. Назовите группу vault rotation и нажмите OK.
Выберите 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 (поворот по запросу)
- Подписка на событие Event Grid для события SecretNearExpiry
Выберите ссылку для развертывания шаблона Azure:
В списке групп ресурсов выберите vaultrotation.
В поле группа ресурсов учетной записи хранения введите имя группы ресурсов, в которой находится ваша учетная запись хранения. Сохраните значение по умолчанию [resourceGroup().name] , если учетная запись хранения уже находится в той же группе ресурсов, где будет развернута функция смены ключей.
В поле Имя учетной записи хранения введите имя учетной записи хранения, содержащей ключи доступа для ротации. Сохраните значение по умолчанию [concat(resourceGroup().name, storage)] , если используется учетная запись хранения, созданная в предварительных требованиях.
В поле RG Key Vault введите имя группы ресурсов, в которой находится хранилище ключей. Сохраните значение по умолчанию [resourceGroup().name] , если хранилище ключей уже существует в той же группе ресурсов, где будет развернута функция смены ключей.
В поле Имя хранилища ключей введите имя хранилища ключей. Сохраните значение по умолчанию [concat(resourceGroup().name, '-kv')], если используется хранилище ключей, созданное в предварительных требованиях.
В поле "Тип плана службы приложений " выберите план размещения. План уровня "Премиум" необходим только в том случае, если хранилище ключей находится за брандмауэром.
В поле "Имя приложения-функции " введите имя приложения-функции.
В поле "Имя секрета" введите имя секрета, в котором будут храниться ключи доступа.
В поле 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 и ключ 2.
Вы можете проверить, что ключи доступа были регенерированы, извлекая ключ учетной записи хранения и секрет Key Vault, и сравнивая их.
Используйте эту команду, чтобы получить секретную информацию:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Обратите внимание, что CredentialId обновляется до альтернативного keyName и value повторно создается:
Получение ключей доступа для сравнения значений:
az storage account keys list -n vaultrotationstorage
Обратите внимание, что свойство value ключа совпадает с секретом в хранилище ключей:
Использование существующей функции поворота для нескольких учетных записей хранения
Вы можете повторно использовать одно и то же функциональное приложение для смены ключей в нескольких учетных записях хранения.
Чтобы добавить ключи учетной записи хранения в существующую функцию для смены, вам потребуется:
- Роль службы оператора ключа учетной записи хранения, назначенная приложению-функции, чтобы получить доступ к ключам доступа к учетной записи хранения.
- Подписка на событие Event Grid для события SecretNearExpiry.
Выберите ссылку для развертывания шаблона Azure:
В списке групп ресурсов выберите vaultrotation.
В поле группа ресурсов учетной записи хранения введите имя группы ресурсов, в которой находится ваша учетная запись хранения. Сохраните значение по умолчанию [resourceGroup().name] , если учетная запись хранения уже находится в той же группе ресурсов, где будет развернута функция смены ключей.
В поле Имя учетной записи хранения введите имя учетной записи хранения, содержащей ключи доступа для ротации.
В поле RG Key Vault введите имя группы ресурсов, в которой находится хранилище ключей. Сохраните значение по умолчанию [resourceGroup().name] , если хранилище ключей уже существует в той же группе ресурсов, где будет развернута функция смены ключей.
В поле Имя хранилища ключей введите имя хранилища ключей.
В поле "Имя приложения-функции " введите имя приложения-функции.
В поле "Имя секрета" введите имя секрета, в котором будут храниться ключи доступа.
Выберите Review + create.
Выберите Создать.
Добавление ключа доступа к учетной записи хранения в секреты 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 повторно создается:
Получение ключей доступа для сравнения значений:
az storage account keys list -n vaultrotationstorage
Обратите внимание, что свойство value ключа совпадает с секретом в хранилище ключей:
Отключить поворот для секрета
Вы можете отключить обновление секрета, просто удалив подписку Event Grid для этого секрета. Используйте командлет Azure PowerShell Remove-AzEventGridSubscription или команду Azure CLI az eventgrid event-subscription delete.
Функции ротации в Key Vault для двух наборов учетных данных
Шаблон функций ротации для двух наборов учетных данных и нескольких функций, готовых к использованию.
Замечание
Эти функции поворота создаются членом сообщества, а не корпорацией Майкрософт. Функции сообщества не поддерживаются в рамках любой программы поддержки майкрософт или службы, и предоставляются КАК IS без каких-либо гарантий.
Дальнейшие шаги
- Смена секретов для одного набора учетных данных
- Общие сведения об автоматической ротации в Azure Key Vault
- мониторинг Хранилища ключей с помощью сетки событий Azure
- Создание первой функции на портале Azure
- Получение электронной почты при изменении секрета Key Vault
- Схема событий Сетки событий Azure для Azure Key Vault