Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Лучший способ проверки подлинности в службах Azure — использовать управляемое удостоверение
В этом руководстве показано, как автоматизировать периодическое смену секретов для баз данных и служб, использующих один набор учетных данных проверки подлинности. Полный обзор концепций и преимуществ авторотации для различных типов активов см. в разделе Понимание авторотации в Azure Key Vault.
В данном руководстве показано, как обновлять пароли SQL Server, хранящиеся в Azure Key Vault, с использованием функции, активированной уведомлением Сетка событий Azure.
- Тридцать дней до истечения срока действия секрета, Key Vault публикует событие "почти истекает" в Сетке событий.
- Сетка событий проверяет подписки на события и использует HTTP POST для вызова конечной точки приложения-функции, подписанной на событие.
- Приложение-функция получает секретную информацию, создает новый случайный пароль и создает новую версию секрета с новым паролем в Key Vault.
- Приложение-функция обновляет SQL Server с новым паролем.
Примечание.
Между шагами 3 и 4 может возникнуть задержка. В течение этого времени секрет в Key Vault не сможет пройти проверку подлинности в SQL Server. В случае сбоя на любом из шагов Event Grid будет попытаться повторить процесс в течение двух часов.
Предпосылки
- Подписка Azure — создайте бесплатно.
- Azure Key Vault
- SQL Server
Если у вас нет Key Vault и SQL Server, можно использовать эту ссылку развертывания:
Изображение с кнопкой с надписью "Развернуть в Azure".
- Для параметра Группа ресурсов выберите Создать. Присвойте группе имя, используйте akvrotation в этом руководстве.
- В разделе "Имя входа администратора SQL" введите имя входа администратора SQL.
- Выберите Review + create.
- Нажмите кнопку Создать
Теперь у вас будет Key Vault и экземпляр SQL Server. Эту настройку можно проверить в Azure CLI, выполнив следующую команду:
az resource list -o table -g akvrotation
Результат будет выглядеть примерно так:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
akvrotation-kv akvrotation eastus Microsoft.KeyVault/vaults
akvrotation-sql akvrotation eastus Microsoft.Sql/servers
akvrotation-sql/master akvrotation eastus Microsoft.Sql/servers/databases
akvrotation-sql2 akvrotation eastus Microsoft.Sql/servers
akvrotation-sql2/master akvrotation eastus Microsoft.Sql/servers/databases
Создание и развертывание функции смены паролей SQL Server
Это важно
Этот шаблон требует, чтобы хранилище ключей, SQL Server и функция Azure были в одной группе ресурсов.
Затем создайте приложение функции с управляемым системой удостоверением, а также другие необходимые компоненты, и разверните функции ротации паролей для SQL Server.
Приложению-функции требуются следующие компоненты:
- План службы приложений Azure
- Приложение-функция с функциями смены паролей SQL с триггером событий и триггером HTTP
- Учетная запись хранения, необходимая для управления триггерами приложения-функции
- Назначение роли RBAC Azure для идентификации функционального приложения для доступа к секретам в хранилище ключей Key Vault
- Подписка на события Event Grid для события SecretNearExpiry
Выберите ссылку развертывания шаблона Azure:
В списке групп ресурсов выберите akvrotation.
Введите в поле SQL Server Name имя сервера SQL и пароль для выполнения ротации.
В поле Key Vault Name введите имя key vault
В поле "Имя приложения-функции" введите имя приложения-функции
В имени секрета введите имя секрета, под которым пароль будет сохранён.
В Repo Url введите код функции расположения на GitHub (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git)
Выберите Review + create.
Выберите Создать.
После выполнения описанных выше действий у вас будет учетная запись хранения, ферма серверов и приложение-функция. Эту настройку можно проверить в Azure CLI, выполнив следующую команду:
az resource list -o table -g akvrotation
Результат будет выглядеть примерно так:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
akvrotation-kv akvrotation eastus Microsoft.KeyVault/vaults
akvrotation-sql akvrotation eastus Microsoft.Sql/servers
akvrotation-sql/master akvrotation eastus Microsoft.Sql/servers/databases
cfogyydrufs5wazfunctions akvrotation eastus Microsoft.Storage/storageAccounts
akvrotation-fnapp akvrotation eastus Microsoft.Web/serverFarms
akvrotation-fnapp akvrotation eastus Microsoft.Web/sites
akvrotation-fnapp akvrotation eastus Microsoft.insights/components
Сведения о создании функционального приложения и использовании управляемого удостоверения для доступа к Key Vault см. разделы Создайте функциональное приложение на портале Azure, Как использовать управляемое удостоверение для службы приложений и Функции Azure и Обеспечьте доступ к Key Vault с Azure RBAC.
Функция поворота
Развернутая на предыдущем шаге функция использует событие для активации смены секрета, обновляя Key Vault и базу данных SQL.
Событие триггера функции
Эта функция считывает данные события и выполняет логику поворота:
public static class SimpleRotationEventHandler
{
[FunctionName("AKVSQLRotation")]
public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{
log.LogInformation("C# Event trigger function processed a request.");
var secretName = eventGridEvent.Subject;
var secretVersion = Regex.Match(eventGridEvent.Data.ToString(), "Version\":\"([a-z0-9]*)").Groups[1].ToString();
var keyVaultName = Regex.Match(eventGridEvent.Topic, ".vaults.(.*)").Groups[1].ToString();
log.LogInformation($"Key Vault Name: {keyVaultName}");
log.LogInformation($"Secret Name: {secretName}");
log.LogInformation($"Secret Version: {secretVersion}");
SecretRotator.RotateSecret(log, secretName, keyVaultName);
}
}
Логика поворота секретов
Этот метод поворота считывает данные базы данных из секрета, создает новую версию секрета и обновляет базу данных с новым секретом:
public class SecretRotator
{
private const string CredentialIdTag = "CredentialId";
private const string ProviderAddressTag = "ProviderAddress";
private const string ValidityPeriodDaysTag = "ValidityPeriodDays";
public static void RotateSecret(ILogger log, string secretName, string keyVaultName)
{
//Retrieve Current Secret
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
KeyVaultSecret secret = client.GetSecret(secretName);
log.LogInformation("Secret Info Retrieved");
//Retrieve Secret Info
var credentialId = secret.Properties.Tags.ContainsKey(CredentialIdTag) ? secret.Properties.Tags[CredentialIdTag] : "";
var providerAddress = secret.Properties.Tags.ContainsKey(ProviderAddressTag) ? secret.Properties.Tags[ProviderAddressTag] : "";
var validityPeriodDays = secret.Properties.Tags.ContainsKey(ValidityPeriodDaysTag) ? secret.Properties.Tags[ValidityPeriodDaysTag] : "";
log.LogInformation($"Provider Address: {providerAddress}");
log.LogInformation($"Credential Id: {credentialId}");
//Check Service Provider connection
CheckServiceConnection(secret);
log.LogInformation("Service Connection Validated");
//Create new password
var randomPassword = CreateRandomPassword();
log.LogInformation("New Password Generated");
//Add secret version with new password to Key Vault
CreateNewSecretVersion(client, secret, randomPassword);
log.LogInformation("New Secret Version Generated");
//Update Service Provider with new password
UpdateServicePassword(secret, randomPassword);
log.LogInformation("Password Changed");
log.LogInformation($"Secret Rotated Successfully");
}
}
Полный код можно найти на GitHub.
Добавление секрета в Key Vault
Задайте политику доступа, чтобы предоставить пользователям разрешения на управление секретами :
az role assignment create --role "Key Vault Secrets Officer" --assignee <email-address-of-user> --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/akvrotation-kv
Создайте новый секрет с тегами, содержащими идентификатор ресурса SQL Server, имя входа SQL Server и срок действия секрета в днях. Укажите имя секрета, исходный пароль из базы данных SQL (в нашем примере "Simple123") и добавьте дату окончания срока действия, установленную завтра.
$tomorrowDate = (get-date).AddDays(+1).ToString("yyyy-MM-ddThh:mm:ssZ")
az keyvault secret set --name sqlPassword --vault-name akvrotation-kv --value "Simple123" --tags "CredentialId=sqlAdmin" "ProviderAddress=<sql-database-resource-id>" "ValidityPeriodDays=90" --expires $tomorrowDate
Создание секрета с короткой датой окончания срока действия опубликует SecretNearExpiry событие через 15 минут, которое, в свою очередь, активирует функцию для смены ключа.
Тестирование и проверка
Чтобы убедиться, что секрет обновился, перейдите к Key Vault>Secrets:
Откройте секрет sqlPassword и просмотрите исходные и сменные версии:
Создание веб-приложения
Чтобы проверить учетные данные SQL, создайте веб-приложение. Это веб-приложение получит секрет из Key Vault, извлечет сведения о базе данных SQL и учетные данные из этого секрета, а затем проверит подключение к SQL Server.
Для веб-приложения требуются следующие компоненты:
- Веб-приложение с управляемым системой удостоверением
- Политика доступа к секретам в Key Vault через управляемую учетную запись веб-приложения
Выберите ссылку развертывания шаблона Azure:
Выберите группу ресурсов akvrotation .
В поле SQL Server Name введите имя SQL Server и пароль для выполнения ротации.
В поле Key Vault Name введите имя key vault
В имени секрета введите имя секрета, где хранится пароль.
В поле Repo Url введите расположение кода веб-приложения на GitHub (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git)
Выберите Review + create.
Выберите Создать.
Открытие веб-приложения
Перейдите по URL-адресу развернутого приложения:
https://akvrotation-app.azurewebsites.net/
Когда приложение откроется в браузере, вы увидите созданное значение секрета и подключенное к базе данных значение true.
Использование ИИ для настройки функции поворота для базы данных
В этом руководстве демонстрируется ротация секретов для SQL Server, но вы можете адаптировать функцию ротации для других типов баз данных. GitHub Copilot в VS Code может помочь вам изменить код функции вращения, чтобы он работал с вашей конкретной базой данных или типом учетных данных.
I'm using the Azure Key Vault secret rotation tutorial for SQL Server. Help me modify the rotation function to work with PostgreSQL instead. The function should:
1. Generate a new secure password
2. Update the PostgreSQL database user password
3. Store the new password in Key Vault
Show me the changes needed to the C# function code, including the correct PostgreSQL connection library and password update command.
Copilot также помогает адаптировать этот шаблон для других типов учетных данных, таких как ключи API, строки подключения или пароли учетной записи службы.
GitHub Copilot работает на ИИ, поэтому возможны как неожиданные результаты, так и ошибки. Дополнительные сведения см. в разделе Copilot часто задаваемые вопросы.