Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De beste manier om te verifiëren bij Azure services is het gebruik van een beheerde identiteit, maar er zijn enkele scenario's waarin dat geen optie is. In dergelijke gevallen worden toegangssleutels of geheimen gebruikt. U moet regelmatig toegangssleutels of geheimen roteren.
In deze zelfstudie leert u hoe u de periodieke rotatie van geheimen voor databases en services automatiseert die gebruikmaken van één set verificatiereferenties. Zie Onderstaand autorotatie in Azure Key Vault voor een uitgebreid overzicht van concepten en voordelen van automatischerotatie voor verschillende assettypen.
Deze zelfstudie rouleert SQL Server wachtwoorden die zijn opgeslagen in Azure Key Vault met behulp van een functie die wordt geactiveerd door een Azure Event Grid notificatie.
- Dertig dagen vóór de vervaldatum van een geheim publiceert Key Vault de gebeurtenis 'bijna verlopen' op Event Grid.
- Event Grid controleert de gebeurtenisabonnementen en maakt gebruik van HTTP POST om het eindpunt voor de functie-app aan te roepen die is geabonneerd op de gebeurtenis.
- De functie-app ontvangt de geheime informatie, genereert een nieuw willekeurig wachtwoord en maakt een nieuwe versie voor het geheim met het nieuwe wachtwoord in Key Vault.
- De functie-app werkt SQL Server bij met het nieuwe wachtwoord.
Opmerking
Er kan een vertraging optreden tussen stap 3 en 4. Gedurende die tijd kan het geheim in Key Vault niet worden geverifieerd bij SQL Server. In het geval van een fout in een van de stappen probeert Event Grid twee uur opnieuw.
Vereiste voorwaarden
- Een Azure-abonnement- gratis een abonnement maken.
- Azure Key Vault
- SQL Server
Als u nog geen Key Vault en SQL Server hebt, kunt u deze implementatiekoppeling gebruiken:
- Selecteer voor Resourcegroep de optie Nieuwe maken. Geef groep een naam, we gebruiken akvrotation in deze zelfstudie.
- Typ de aanmeldingsnaam van de SQL-beheerder onder SQL-beheerdersaanmelding.
- Kies Beoordelen + creëren.
- Selecteer Creëren
U hebt nu een Key Vault en een SQL Server exemplaar. U kunt deze instelling controleren in de Azure CLI door de volgende opdracht uit te voeren:
az resource list -o table -g akvrotation
Het resultaat zal er ongeveer als het volgende uitzien:
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
De functie wachtwoordrotatie voor SQL Server maken en implementeren
Belangrijk
Voor deze sjabloon moeten de sleutelkluis, SQL Server en Azure Function zich in dezelfde resourcegroep bevinden.
Maak vervolgens een functie-app met een door het systeem beheerde identiteit, naast de andere vereiste onderdelen, en implementeer functies voor wachtwoordrotatie van SQL Server
Voor de functie-app zijn de volgende onderdelen vereist:
- Een Azure App Service-abonnement
- Een functie-app met functies voor het rouleren van SQL-wachtwoorden met gebeurtenistrigger en HTTP-trigger
- Een opslagaccount dat vereist is voor het beheer van triggers voor functie-apps
- Een Azure RBAC-roltoewijzing om de identiteit van de functie-app toegang tot geheimen in Key Vault te geven.
- Een Event Grid-gebeurtenisabonnement voor SecretNearExpiry-gebeurtenis
Selecteer de Azure sjabloonimplementatie link:
Selecteer akvrotation in de lijst Resource groep.
Typ in de SQL Server Naam de naam van de SQL Server en het wachtwoord om te roteren.
Typ in de Key Vault Name de naam van de key vault
Typ in de functie-appnaam de naam van de functie-app.
Typ in de geheime naam de geheime naam waarin het wachtwoord wordt opgeslagen
Voer in de Repo-URL de GitHub-locatie van de functiecode in (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git)
Kies Beoordelen + creëren.
Klik op Creëren.
Nadat u de voorgaande stappen hebt voltooid, hebt u een opslagaccount, een serverfarm en een functie-app. U kunt deze instelling controleren in de Azure CLI door de volgende opdracht uit te voeren:
az resource list -o table -g akvrotation
Het resultaat ziet er ongeveer als volgt uit:
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
Voor informatie over het maken van een functie-app en het gebruik van een beheerde identiteit voor toegang tot Key Vault, zie Maak een functie-app vanuit de Azure portal, Het gebruik van beheerde identiteiten voor App Service en Azure Functions en Provide-toegang tot Key Vault met Azure RBAC.
Draaifunctie
Geïmplementeerd in de vorige stapfunctie maakt gebruik van een gebeurtenis om de rotatie van een geheim te activeren door Key Vault en de SQL-database bij te werken.
Trigger-gebeurtenis van functie
Deze functie leest gebeurtenisgegevens en voert de rotatielogica uit:
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);
}
}
Logica voor geheimrotatie
Deze rotatiemethode leest databasegegevens uit het geheim, maakt een nieuwe versie van het geheim en werkt de database bij met het nieuwe geheim:
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");
}
}
U vindt de volledige code op GitHub.
Het geheim toevoegen aan Key Vault
Stel uw toegangsbeleid in om beheren van geheimen rechten aan gebruikers te verlenen.
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
Maak een nieuw geheim met tags die de SQL Server resource-id, de SQL Server aanmeldingsnaam en de geldigheidsperiode voor het geheim in dagen bevatten. Geef de naam op van het geheim, het eerste wachtwoord van de SQL-database (in ons voorbeeld 'Simple123') en neem een vervaldatum op die voor morgen is ingesteld.
$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
Als u een geheim met een korte vervaldatum maakt, wordt binnen 15 minuten een SecretNearExpiry gebeurtenis gepubliceerd. Hierdoor wordt de functie geactiveerd om het geheim te draaien.
Testen en verifiëren
Als u wilt controleren of het geheim is bijgewerkt, gaat u naar Key Vault>Secrets:
Open het sqlPassword-geheim en bekijk de oorspronkelijke en gedraaide versies:
Een web-app maken
Als u de SQL-referenties wilt controleren, maakt u een web-app. Deze web-app haalt het geheim op uit Key Vault, extraheert gegevens en referenties van de SQL-database uit het geheim en test de verbinding met SQL Server.
Voor de web-app zijn de volgende onderdelen vereist:
- Een web-app met door het systeem beheerde identiteit
- Een toegangsbeleid voor toegang tot geheimen in Key Vault via beheerde identiteit voor web-apps
Selecteer de koppeling voor Azure-sjabloonimplementatie:
Kies de akvrotation-resourcegroep.
Voer in de SQL Server Naam de SQL Server naam en wachtwoord in om te roteren.
Typ de sleutelkluisnaam in Sleutelkluisnaam in.
Typ in de geheime naam de geheime naam waarin het wachtwoord is opgeslagen
Typ in de Repo-URL de code van de web-app GitHub locatie (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git)
Kies Beoordelen + creëren.
Klik op Creëren.
De web-app openen
Ga naar de URL van de geïmplementeerde toepassing:
https://akvrotation-app.azurewebsites.net/
Wanneer de toepassing in de browser wordt geopend, ziet u de gegenereerde geheime waarde en een Database verbonden waarde van true.
AI gebruiken om de rotatiefunctie voor uw database aan te passen
Deze zelfstudie demonstreert geheime rotatie voor SQL Server, maar u kunt de rotatiefunctie aanpassen voor andere databasetypen. GitHub Copilot in VS Code kan u helpen de code van de rotatiefunctie te wijzigen zodat deze werkt met uw specifieke database of referentietype.
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 kan u ook helpen dit patroon aan te passen voor andere soorten referenties, zoals API-sleutels, verbindingsreeksen (connection strings) of wachtwoorden voor service-accounts.
GitHub Copilot wordt aangedreven door AI, dus verrassingen en fouten zijn mogelijk. Zie Copilot veelgestelde vragen voor meer informatie.