Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Najlepszym sposobem uwierzytelniania w usługach Azure jest użycie managed identity ale istnieją pewne scenariusze, w których nie jest to opcja. W takich przypadkach używane są klucze dostępu lub tajne dane. Należy okresowo obracać klucze dostępu lub sekrety.
W tym samouczku pokazano, jak zautomatyzować okresową rotację wpisów tajnych dla baz danych i usług korzystających z jednego zestawu poświadczeń uwierzytelniania. Aby zapoznać się z kompleksowym omówieniem pojęć i korzyści związanych z autowachlowaniem w różnych typach zasobach, zobacz Zrozumienie autowachlowania w Azure Key Vault.
W szczególności, ten samouczek obraca hasła serwera SQL przechowywane w Azure Key Vault, przy użyciu funkcji wyzwalanej przez powiadomienie z Azure Event Grid.
- Trzydzieści dni przed datą wygaśnięcia sekretu, Key Vault publikuje zdarzenie "bliskie wygaśnięcia" do usługi Event Grid.
- Usługa Event Grid sprawdza subskrypcje zdarzeń i używa żądania HTTP POST do wywołania punktu końcowego aplikacji funkcji subskrybowanego do zdarzenia.
- Aplikacja funkcji odbiera informacje poufne, generuje nowe losowe hasło i tworzy nową wersję sekretu z nowym hasłem w Key Vault.
- Aplikacja funkcji aktualizuje SQL Server przy użyciu nowego hasła.
Uwaga
Może wystąpić opóźnienie między krokami 3 i 4. W tym czasie tajna wartość w Key Vault nie będzie mogła uwierzytelnić się wobec SQL Server. W przypadku niepowodzenia dowolnego z kroków usługa Event Grid ponawia próbę przez dwie godziny.
Wymagania wstępne
- Subskrypcja Azure — utwórz ją bezpłatnie.
- Azure Key Vault
- SQL Server
Jeśli nie masz istniejących Key Vault i SQL Server, możesz użyć tego linku wdrożenia:
- W obszarze Grupa zasobów wybierz pozycję Utwórz nową. Nadaj grupie nazwę. W tym samouczku użyjemy funkcji akvrotation .
- W obszarze Identyfikator logowania administratora SQL wpisz nazwę logowania administratora SQL.
- Wybierz opcję Recenzja i utwórz.
- Wybierz pozycję Utwórz
Masz teraz Key Vault i wystąpienie SQL Server. Tę konfigurację można zweryfikować w Azure CLI, uruchamiając następujące polecenie:
az resource list -o table -g akvrotation
Wynik będzie wyglądać następująco:
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
Tworzenie i wdrażanie funkcji rotacji haseł programu SQL Server
Ważne
Ten szablon wymaga, aby magazyn kluczy, program SQL Server i funkcja Azure znajdowały się w tej samej grupie zasobów.
Następnie utwórz aplikację funkcji z tożsamością zarządzaną przez system, oprócz innych wymaganych składników i wdróż funkcje rotacji haseł programu SQL Server
Aplikacja funkcji wymaga następujących składników:
- Plan usługi Azure App
- Aplikacja funkcyjna z funkcjami rotacji haseł SQL z wyzwalaczem zdarzeń i wyzwalaczem HTTP
- Konto magazynowe wymagane do zarządzania wyzwalaczami aplikacji funkcji
- Przypisanie roli RBAC Azure do tożsamości aplikacji funkcji w celu uzyskiwania dostępu do tajemnic w Key Vault
- Subskrypcja zdarzeń usługi Event Grid dla zdarzenia SecretNearExpiry
Wybierz link wdrażania szablonu Azure:
Na liście Grupa zasobów wybierz pozycję akvrotation.
W Nazwa SQL Server wpisz nazwę SQL Server oraz hasło, aby je zmienić.
W Key Vault Name wpisz nazwę magazynu kluczy
W polu Nazwa aplikacji funkcji wpisz nazwę aplikacji funkcji
W polu Nazwa wpisu tajnego wpisz nazwę wpisu tajnego, w którym będzie przechowywane hasło
W Repo Url wpisz lokalizację kodu funkcji na GitHubie (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git)
Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Po wykonaniu powyższych kroków uzyskasz dostęp do konta magazynowego, farmy serwerów i aplikacji funkcjonalnej. Tę konfigurację można zweryfikować w Azure CLI, uruchamiając następujące polecenie:
az resource list -o table -g akvrotation
Efekt będzie przypominał poniższy rezultat:
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
Aby uzyskać informacje na temat tworzenia aplikacji funkcji i używania tożsamości zarządzanej do uzyskiwania dostępu do Key Vault, zobacz Utwórz aplikację funkcji z portalu Azure, Jak używać tożsamości zarządzanej dla usługi App Service i Azure Functions oraz Podaj dostęp do Key Vault za pomocą kontroli dostępu opartej na rolach Azure.
Funkcja Obrót
Funkcja kroku wdrożona w poprzednim kroku używa zdarzenia, aby wyzwolić rotację tajemnicy przez zaktualizowanie Key Vault i bazy danych SQL.
Zdarzenie uruchomienia funkcji
Ta funkcja odczytuje dane zdarzeń i uruchamia logikę rotacji:
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 rotacji tajnych
Ta metoda rotacji odczytuje informacje o bazie danych z wpisu tajnego, tworzy nową wersję wpisu tajnego i aktualizuje bazę danych przy użyciu nowego wpisu tajnego:
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");
}
}
Pełny kod można znaleźć w GitHub.
Dodaj sekret do Key Vault
Ustaw zasady dostępu, aby udzielić użytkownikom uprawnień do zarządzania tajemnicami:
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
Utwórz nowy wpis tajny z tagami zawierającymi identyfikator zasobu SQL Server, nazwę logowania SQL Server i okres ważności wpisu tajnego w dniach. Podaj nazwę sekretu, początkowe hasło dla bazy danych SQL (w naszym przykładzie "Simple123") i dodaj datę wygaśnięcia ustawioną na jutro.
$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
Utworzenie tajemnicy z krótką datą wygaśnięcia spowoduje opublikowanie SecretNearExpiry zdarzenia w ciągu 15 minut, co z kolei wyzwoli funkcję rotacji tajemnicy.
Testowanie i weryfikowanie
Aby sprawdzić, czy tajemnica została zrotowana, przejdź do Key Vault>Secrets:
Otwórz tajny element sqlPassword i wyświetl oryginalną oraz zaktualizowaną wersję:
Tworzenie aplikacji internetowej
Aby zweryfikować poświadczenia SQL, utwórz aplikację internetową. Ta aplikacja internetowa pobierze wpis tajny z Key Vault, wyodrębni informacje i poświadczenia bazy danych SQL z wpisu tajnego oraz przetestuje połączenie z SQL Server.
Aplikacja internetowa wymaga następujących składników:
- Aplikacja internetowa z tożsamością zarządzaną przez system
- Zasady dostępu do tajemnic w Key Vault za pośrednictwem tożsamości zarządzanej aplikacji webowej
Wybierz link wdrażania szablonu Azure:
Wybierz grupę zasobów akvrotation .
W polu Nazwa SQL Server wpisz nazwę SQL Server oraz hasło, aby je zaktualizować.
W Key Vault Name wpisz nazwę Key Vault
W polu Nazwa wpisu tajnego wpisz nazwę wpisu tajnego, w którym jest przechowywane hasło
W Repo Url wpisz lokalizację kodu aplikacji webowej w GitHub (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git)
Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Otwieranie aplikacji internetowej
Przejdź do adresu URL wdrożonej aplikacji:
"https://akvrotation-app.azurewebsites.net/"
Po otwarciu aplikacji w przeglądarce zobaczysz wygenerowaną tajną wartość i połączenie z bazą danych o wartości prawda.
Dostosowywanie funkcji rotacji bazy danych za pomocą sztucznej inteligencji
W tym samouczku przedstawiono rotację tajnych danych dla SQL Server, ale można dostosować mechanizm rotacji dla innych typów baz danych. GitHub Copilot w programie VS Code może pomóc zmodyfikować kod funkcji rotacji, aby pracować z określoną bazą danych lub typem poświadczeń.
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 może również pomóc w dostosowaniu tego wzorca dla innych typów poświadczeń, takich jak klucze API, ciągi połączenia lub hasła konta usługi.
GitHub Copilot jest obsługiwana przez sztuczną inteligencję, więc możliwe są niespodzianki i błędy. Aby uzyskać więcej informacji, zobacz Copilot CZĘSTO zadawane pytania.