Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nejlepším způsobem, jak se ověřit ve službách Azure, je spravovaná identita, ale některé scénáře vyžadují přístupový klíč, heslo nebo jiný tajný klíč. Obměňujte tyto tajné kódy pravidelně, abyste snížili dopad úniku přihlašovacích údajů.
V tomto kurzu se dozvíte, jak automatizovat pravidelnou obměnu tajných kódů pro databáze a služby, které používají jednu sadu přihlašovacích údajů pro ověřování. Přehled automatickéhorotování napříč různými typy prostředků najdete v tématu Principy automatickéhorotování v Azure Key Vault.
Konkrétně tento kurz obnovuje heslo pro SQL Server uložené v Azure Key Vault pomocí funkce, která je aktivována oznámením Azure Event Grid:
Tip
U Azure SQL Database a Azure SQL Managed Instance upřednostněte ověřování pouze Microsoft Entra před přihlášeními SQL. Vzor obměně hesel v tomto kurzu použijte jenom v případě, že úloha vyžaduje ověřování SQL.
- Třicet dní před datem vypršení platnosti tajného kódu Key Vault publikuje událost "blízké vypršení platnosti" do Event Gridu.
- Event Grid zkontroluje odběry událostí a používá HTTP POST k volání koncového bodu aplikace funkcí, který se k události přihlásil.
- Aplikace funkcí obdrží tajné informace, vygeneruje nové náhodné heslo a vytvoří novou verzi tajného kódu s novým heslem v Key Vault.
- Aplikace funkcí aktualizuje SQL Server novým heslem.
Poznámka:
Mezi kroky 3 a 4 může být prodleva. Během této doby nelze tajný klíč v Key Vault použít k ověření vůči serveru SQL Server. Pokud některý krok selže, Event Grid provádí opakované pokusy po dobu dvou hodin.
Požadavky
- Předplatné Azure – vytvořte si ho zdarma.
- Azure Key Vault.
- SQL Server.
Pokud ještě nemáte trezor klíčů a SQL Server instanci, použijte tento odkaz pro nasazení:
- V části Skupina prostředků vyberte Vytvořit nový a pojmenujte skupinu. Tento návod používá akvrotation.
- V části Přihlášení správce SQL zadejte přihlašovací jméno správce SQL.
- Vyberte možnost Zkontrolovat a vytvořit.
- Vyberte Vytvořit.
Teď máte trezor klíčů a instanci SQL Server. Ověřte toto nastavení v Azure CLI:
az resource list -o table -g akvrotation
Výsledek vypadá podobně jako následující výstup:
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
Vytvoření a nasazení funkce obměně hesel SQL Server
Důležité
Tato šablona vyžaduje, aby trezor klíčů, SQL Server instance a aplikace funkcí byly ve stejné skupině prostředků.
Dále vytvořte aplikaci funkcí se spravovanou identitou přiřazenou systémem spolu s dalšími požadovanými komponentami a nasaďte funkci obměně hesel SQL Server.
Aplikace funkcí vyžaduje tyto komponenty:
- Plán Azure App Service.
- Aplikace funkcí s funkcí pro rotaci hesla SQL, která má trigger Event Gridu a trigger HTTP.
- Účet úložiště pro správu triggerů aplikace funkcí.
- Přiřazení role Azure, které umožňuje aplikaci funkcí přistupovat k tajným kódům identit v trezoru klíčů.
- Odběr události Event Gridu pro událost SecretNearExpiry .
Vyberte odkaz pro nasazení šablony Azure:
V seznamu Skupina prostředků vyberte akvrotation.
Do pole SQL Server Název zadejte název instance SQL Server, jejíž heslo chcete otočit.
Do pole Název trezoru klíčů zadejte název trezoru klíčů.
Do pole Název aplikace funkcí zadejte název aplikace funkcí.
Do Název tajného klíče zadejte název tajného klíče, ve kterém je uloženo heslo.
Do pole Repo URL zadejte umístění kódu funkce na GitHubu:
https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git.Vyberte možnost Zkontrolovat a vytvořit.
Vyberte Vytvořit.
Poznámka:
Tato šablona ARM používá nasazení správy zdrojového kódu služby App Service (Kudu) k načtení kódu funkce z GitHub. Pro produkční pracovní zatížení místo toho doporučujeme nasazení založené na balíčku, například func azure functionapp publish nebo nasazení zip deploy pomocí WEBSITE_RUN_FROM_PACKAGE.
Po dokončení předchozích kroků budete mít účet služby Storage, serverovou farmu a aplikaci Function App. Ověřte toto nastavení v Azure CLI:
az resource list -o table -g akvrotation
Výsledek vypadá podobně jako následující výstup:
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
Další informace o vytvoření aplikace funkcí a použití spravované identity pro přístup k Key Vault najdete v tématu Vytvoření aplikace funkcí z portálu Azure, použití spravované identity pro App Service a Azure Functions a poskytnutí přístupu k Key Vault pomocí Azure RBAC.
Poznámka:
Ukázková funkce cílí na model .NET v procesu pro Azure Functions. Pro nový vývoj použijte .NET izolovaný model pracovního procesu, což je podporovaný model v budoucnu.
Funkce Rotation
Funkce nasazená v předchozím kroku používá událost k aktivaci obměně tajných kódů. Aktualizuje Key Vault a databázi SQL.
Spouštěcí událost funkce
Tato funkce čte data událostí a spouští logiku rotace.
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);
}
}
Logika rotace tajných klíčů
Tato metoda rotace čte informace o databázi z tajemství, vytvoří novou verzi tajemství a aktualizuje databázi novým tajemstvím.
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");
}
}
Kompletní kód najdete na GitHub.
Přidání tajného kódu do Key Vault
Přiřaďte si roli Key Vault Secrets Officer, abyste mohli spravovat tajné údaje v trezoru klíčů:
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
Vytvořte tajný kód se značkami, které obsahují ID prostředku SQL Server, přihlašovací jméno SQL Server a dobu platnosti tajného kódu ve dnech. Nastavte název tajného kódu, počáteční heslo z databáze SQL (Simple123 v tomto příkladu) a datum vypršení platnosti nastavené na zítra, aby se rotace aktivovala okamžitě.
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name sqlPassword --vault-name akvrotation-kv --value "Simple123" --tags "CredentialId=sqlAdmin" "ProviderAddress=<sql-database-resource-id>" "ValidityPeriodDays=90" --expires $tomorrowDate
Nastavení krátké doby platnosti publikuje během 15 minut událost SecretNearExpiry, která spustí funkci pro obměnu tajného klíče.
Testování a ověření
Chcete-li ověřit, že došlo k obměně tajného klíče, přejděte na Key Vault>Tajné klíče:
Otevřete tajný kód sqlPassword a zobrazte původní a otočené verze:
Vytvoření webové aplikace
Pokud chcete ověřit přihlašovací údaje SQL, vytvořte webovou aplikaci. Webová aplikace načte tajný klíč z Key Vault, extrahuje informace o databázi SQL a přihlašovací údaje z tajného klíče a otestuje připojení k SQL Server.
Webová aplikace vyžaduje tyto komponenty:
- Webová aplikace se spravovanou identitou přiřazenou systémem
- Přiřazení role, které umožňuje spravované identitě webové aplikace číst tajné kódy v trezoru klíčů.
Vyberte odkaz pro nasazení šablony Azure:
Vyberte skupinu prostředků akvrotation .
Do pole SQL Server Name zadejte název SQL Server, jehož heslo jste otočili.
Do pole Key Vault Name zadejte název trezoru klíčů.
Do pole Název tajného klíče zadejte název tajného klíče, který ukládá heslo.
Do pole URL úložiště zadejte umístění kódu webové aplikace na GitHubu:
https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git.Vyberte možnost Zkontrolovat a vytvořit.
Vyberte Vytvořit.
Otevření webové aplikace
Přejděte na adresu URL nasazené aplikace: https://akvrotation-app.azurewebsites.net/.
Když se aplikace otevře v prohlížeči, zobrazí se na stránce vygenerovaná tajná hodnota a hodnota true .
Přizpůsobení funkce rotace pro vaši databázi pomocí AI
Tento návod demonstruje správu tajností pro SQL Server, ale funkci rotace můžete přizpůsobit pro jiné typy databází. GitHub Copilot vám může pomoct upravit kód funkce rotace tak, aby fungoval s databází nebo typem přihlašovacích údajů.
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 vám také může pomoct tento model přizpůsobit pro jiné typy přihlašovacích údajů, jako jsou klíče rozhraní API, připojovací řetězce nebo hesla účtu služby.
GitHub Copilot využívá AI, takže jsou možné překvapení a chyby. Další informace najdete v tématu Copilot nejčastější dotazy.