Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Cara terbaik untuk mengautentikasi ke layanan Azure adalah dengan menggunakan identitas dikelola, tetapi ada beberapa skenario di mana itu bukan opsi. Dalam kasus tersebut, kunci akses atau rahasia digunakan. Anda harus memutar kunci akses atau rahasia secara berkala.
Tutorial ini menunjukkan cara mengotomatiskan rotasi berkala rahasia untuk database dan layanan yang menggunakan satu set kredensial autentikasi. Untuk gambaran umum komprehensif tentang konsep dan manfaat autorotasi di berbagai jenis aset, lihat Memahami autorotasi dalam Azure Key Vault.
Secara khusus, tutorial ini memutar kata sandi SQL Server yang disimpan dalam Azure Key Vault dengan menggunakan fungsi yang dipicu oleh pemberitahuan Azure Event Grid:
- Tiga puluh hari sebelum tanggal kedaluwarsa rahasia, Key Vault menerbitkan peristiwa "mendekati kedaluwarsa" ke Event Grid.
- Event Grid memeriksa langganan acara dan menggunakan HTTP POST untuk memanggil endpoint aplikasi fungsi yang berlangganan terhadap acara tersebut.
- Aplikasi fungsi menerima informasi rahasia, menghasilkan kata sandi acak baru, dan membuat versi baru untuk rahasia dengan kata sandi baru di Key Vault.
- Aplikasi fungsi memperbarui SQL Server dengan kata sandi baru.
Nota
Mungkin ada jeda antara langkah 3 dan 4. Selama waktu itu, rahasia di Key Vault tidak akan dapat mengautentikasi ke SQL Server. Jika terjadi kegagalan salah satu langkah, Event Grid mencoba kembali selama dua jam.
Prasyarat
- Langganan Azure - buat langganan secara gratis.
- Azure Key Vault
- SQL Server
Jika Anda tidak memiliki Key Vault dan SQL Server yang sudah ada, Anda dapat menggunakan tautan penyebaran ini:
- Pada Grup Sumber Daya, pilih Buat baru. Beri nama grup, kami menggunakan akvrotasi dalam tutorial ini.
- Di bawah Masuk Admin SQL, ketik nama masuk administrator SQL.
- Pilih Tinjau + kreasikan.
- Pilih Buat
Anda sekarang akan memiliki Key Vault, dan instans SQL Server. Anda dapat memverifikasi penyiapan ini di Azure CLI dengan menjalankan perintah berikut:
az resource list -o table -g akvrotation
Hasilnya akan terlihat seperti output berikut:
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
Membuat dan menyebarkan fungsi rotasi kata sandi server SQL
Penting
Templat ini memerlukan brankas kunci, server SQL, dan Fungsi Azure berada dalam grup sumber daya yang sama.
Selanjutnya, buat aplikasi fungsi dengan identitas yang dikelola sistem, selain komponen lain yang diperlukan, dan sebarkan fungsi rotasi kata sandi server SQL
Aplikasi fungsi memerlukan komponen-komponen ini:
- Paket Azure App Service
- Aplikasi Fungsi dengan fungsi rotasi kata sandi SQL, pemicu peristiwa, dan pemicu HTTP
- Akun penyimpanan yang diperlukan untuk pengelolaan pemicu aplikasi fungsi
- Penetapan peran RBAC Azure untuk identitas aplikasi fungsi agar dapat mengakses rahasia di Key Vault
- Langganan peristiwa pada Event Grid untuk peristiwa "SecretNearExpiry"
Pilih tautan penyebaran templat Azure:
Di daftar Grup sumber daya, pilih akvrotation.
Di nama SQL Server, ketik nama SQL Server dengan kata sandi untuk memutar
Di Nama Key Vault, ketikkan nama key vault
Di Nama Aplikasi Fungsi, ketik nama aplikasi fungsi
Di Nama Rahasia, ketik nama rahasia tempat kata sandi akan disimpan
Di Repo URL, ketik lokasi kode fungsi GitHub (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git)
Pilih Tinjau + kreasikan.
Pilih Buat.
Setelah menyelesaikan langkah-langkah sebelumnya, Anda akan memiliki akun penyimpanan, farm server, dan aplikasi fungsi. Anda dapat memverifikasi penyiapan ini di Azure CLI dengan menjalankan perintah berikut:
az resource list -o table -g akvrotation
Hasilnya akan terlihat seperti output berikut:
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
Untuk informasi tentang cara membuat aplikasi fungsi dan menggunakan identitas terkelola untuk mengakses Key Vault, lihat Buat aplikasi fungsi dari portal Azure, Cara menggunakan identitas terkelola untuk App Service dan Azure Functions, dan Memberikan akses ke Key Vault dengan Azure RBAC.
Fungsi rotasi
Diterapkan pada fungsi langkah sebelumnya menggunakan event untuk memicu rotasi rahasia dengan memperbarui Key Vault dan database SQL.
Peristiwa pemicu fungsi
Fungsi ini membaca data peristiwa dan menjalankan logika rotasi:
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 rotasi rahasia
Metode rotasi ini membaca informasi database dari elemen rahasia, membuat versi baru elemen rahasia, dan memperbarui database dengan elemen rahasia yang baru.
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");
}
}
Anda dapat menemukan kode lengkap pada GitHub.
Tambahkan rahasia ke Key Vault
Atur kebijakan akses Anda untuk memberikan izin kelola rahasia kepada pengguna:
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
Buat rahasia baru dengan tag yang berisi ID sumber daya SQL Server, nama login SQL Server, dan periode validitas untuk rahasia dalam beberapa hari. Berikan nama rahasia, kata sandi awal dari database SQL (dalam contoh kami "Simple123") dan sertakan tanggal kedaluwarsa yang ditetapkan untuk besok.
$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
Membuat rahasia dengan tanggal kedaluwarsa singkat akan menerbitkan SecretNearExpiry peristiwa dalam waktu 15 menit, yang pada gilirannya akan memicu fungsi untuk memutar rahasia.
Menguji dan memverifikasi
Untuk memverifikasi bahwa rahasia telah diganti, buka Key Vault>Secrets:
Buka rahasia sqlPassword dan lihat versi asli dan yang telah diganti:
Membuat aplikasi web
Untuk memverifikasi kredensial SQL, buat aplikasi web. Aplikasi web ini akan mendapatkan rahasia dari Key Vault, mengekstrak informasi database SQL dan kredensial dari rahasia, dan menguji koneksi ke SQL Server.
Aplikasi web memerlukan komponen-komponen ini:
- Aplikasi web dengan identitas yang dikelola sistem
- Kebijakan akses untuk mengakses rahasia di Key Vault melalui identitas terkelola aplikasi web
Pilih tautan penyebaran templat Azure:
Pilih grup sumber daya akvrotation .
Di nama SQL Server, ketik nama SQL Server dengan kata sandi untuk memutar
Di Nama Key Vault, ketik nama key vault
Di Nama Rahasia, ketik nama rahasia tempat kata sandi disimpan
Di Repo Url, ketik lokasi kode aplikasi web di GitHub (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git)
Pilih Tinjau + kreasikan.
Pilih Buat.
Buka aplikasi web
Buka URL aplikasi yang disebarkan:
https://akvrotation-app.azurewebsites.net/
Ketika aplikasi terbuka di browser, Anda akan melihat Nilai Rahasia yang Dihasilkan dan nilai Database Terhubung yang berstatus benar.
Menggunakan AI untuk mengkustomisasi fungsi rotasi untuk database Anda
Tutorial ini menunjukkan rotasi rahasia untuk SQL Server, tetapi Anda dapat menyesuaikan fungsi rotasi untuk jenis database lainnya. GitHub Copilot di VISUAL Code dapat membantu Anda mengubah kode fungsi rotasi agar berfungsi dengan database atau jenis kredensial tertentu Anda.
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 juga dapat membantu Anda menyesuaikan pola ini untuk jenis kredensial lainnya seperti kunci API, string koneksi, atau kata sandi akun layanan.
GitHub Copilot didukung oleh AI, sehingga kejutan dan kesalahan dimungkinkan. Untuk informasi selengkapnya, lihat FAQ Copilot.