Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure hizmetlerinde kimlik doğrulamanın en iyi yolu yönetilen kimliktir, ancak bazı senaryolarda erişim anahtarı, parola veya başka bir gizli dizi gerekir. Sızdırılmış bir kimlik bilgisinin etkisini azaltmak için bu gizli anahtarları düzenli olarak yenileyin.
Bu öğretici, tek bir kimlik doğrulama bilgisi kümesi kullanan veritabanları ve hizmetler için periyodik gizli bilgi döndürmenin nasıl otomatikleştirileceğini gösterir. Farklı varlık türleri arasında otomatik döndürmeye genel bakış için bkz. Azure Key Vault'de otomatik döndürmeyi anlama.
Özellikle bu öğretici, Azure Event Grid bildirimiyle tetiklenen bir işlev kullanarak Azure Key Vault'ta depolanan bir SQL Server parolasını döndürür:
İpucu
Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için SQL oturum açma işlemleri yerine yalnızca Microsoft Entra kimlik doğrulamasını tercih edin. Bu öğreticideki parola döndürme desenini yalnızca bir iş yükü SQL kimlik doğrulaması gerektirdiğinde kullanın.
- Key Vault, bir gizli verinin son kullanma tarihinden otuz gün öncesinde Event Grid'e "süresi dolmak üzere" olayını yayımlar.
- Event Grid olay aboneliklerini denetler ve olaya abone olan işlev uygulaması uç noktasını çağırmak için HTTP POST kullanır.
- İşlev uygulaması gizli dizi bilgilerini alır, yeni bir rastgele parola oluşturur ve Key Vault yeni parolayla gizli dizi için yeni bir sürüm oluşturur.
- İşlev uygulaması yeni parolayla SQL Server güncelleştirir.
Uyarı
3. ve 4. adımlar arasında bir gecikme olabilir. Bu süre zarfında, Key Vault’taki gizli anahtar SQL Server’da kimlik doğrulaması yapamaz. Herhangi bir adım başarısız olursa Event Grid iki saat boyunca yeniden denenir.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik .
- Azure Key Vault.
- SQL Server.
Henüz bir anahtar kasanız ve SQL Server örneğiniz yoksa şu dağıtım bağlantısını kullanın:
- Kaynak grubu'nun altında Yeni oluştur'u seçin ve gruba bir ad verin. Bu öğreticide akvrotation kullanılır.
- SQL Yöneticisi Oturum Açma'nın altına SQL yöneticisi oturum açma adını girin.
- Seçin, gözden geçir ve oluştur.
- Oluştur'i seçin.
Artık bir anahtar kasanız ve bir SQL Server örneğiniz var. Bu kurulumu Azure CLI'da doğrulayın:
az resource list -o table -g akvrotation
Sonuç aşağıdaki çıkışa benzer:
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 parola döndürme işlevini oluşturma ve dağıtma
Önemli
Bu şablon anahtar kasasının, SQL Server örneğinin ve işlev uygulamasının aynı kaynak grubunda olmasını gerektirir.
Ardından, sistem tarafından atanan yönetilen kimlikle birlikte gerekli diğer bileşenlerle birlikte bir işlev uygulaması oluşturun ve SQL Server parola döndürme işlevini dağıtın.
İşlev uygulaması şu bileşenleri gerektirir:
- bir Azure App Service planı.
- Event Grid tetikleyicisi ve HTTP tetikleyicisi olan SQL parola döndürme işlevine sahip bir işlev uygulaması.
- İşlev uygulaması tetikleyici yönetimi için bir depolama hesabı.
- İşlev uygulaması kimliğinin Anahtar Kasası’ndaki gizli anahtarlara erişmesini sağlayan Azure rol ataması.
- SecretNearExpiry olayı için Event Grid etkinlik aboneliği.
Azure şablonu dağıtım bağlantısını seçin:
Kaynak grubu listesinde akvrotation öğesini seçin.
SQL Server Adı alanına, parolasını döndürmek istediğiniz SQL Server örneğinin adını girin.
Key Vault Adı alanına key vault adını girin.
İşlev Uygulaması Adı alanına işlev uygulaması adını girin.
Secret Name alanına, parolanın depolandığı gizli dizi adını girin.
Depo URL'sinde işlev kodunun GitHub konumunu girin:
https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git.Seçin, gözden geçir ve oluştur.
Oluştur'i seçin.
Uyarı
Bu ARM şablonu, işlevin kodunu GitHub’dan çekmek için App Service kaynak denetimi (Kudu) dağıtımını kullanır. Üretim iş yükleri için bunun yerine func azure functionapp publish veya WEBSITE_RUN_FROM_PACKAGE ile zip dağıtımı gibi paket tabanlı bir dağıtım öneririz.
Önceki adımları tamamladıktan sonra bir depolama hesabınız, sunucu grubunuz ve bir işlev uygulamanız olur. Azure CLI’da bu yapılandırmayı doğrulayın:
az resource list -o table -g akvrotation
Sonuç aşağıdaki çıkışa benzer:
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
İşlev uygulaması oluşturma ve Key Vault erişmek için yönetilen kimlik kullanma hakkında daha fazla bilgi için bkz. Azure portalından işlev uygulaması oluşturma, App Service ve Azure İşlevleri için yönetilen kimlik kullanma veAzure RBAC ile Key Vault erişimi sağlama.
Uyarı
Örnek işlev, Azure İşlevleri için .NET işlem içi modelini hedefler. Yeni geliştirmeler için, bundan sonra desteklenen model olan .NET yalıtılmış çalışan modelini kullanın.
Döndürme işlevi
Önceki adımda dağıtılan işlev, gizli dizi döndürmeyi tetikleyen bir olay kullanır. Key Vault ve SQL veritabanını güncelleştirir.
İşlev tetikleyici olayı
Bu işlev olay verilerini okur ve döndürme mantığını çalıştırır:
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);
}
}
Gizli dizi döndürme mantığı
Bu döndürme yöntemi gizli dizideki veritabanı bilgilerini okur, gizli dizinin yeni bir sürümünü oluşturur ve veritabanını yeni gizli diziyle güncelleştirir:
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");
}
}
Kodun tamamını GitHub üzerinde bulabilirsiniz.
Gizli bilgiyi Key Vault'a ekleyin
Kasadaki gizli dizileri yönetebilmeniz için kendinize Key Vault Gizli Diziler Sorumlusu rolünü atayın:
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 kaynak kimliğini, SQL Server oturum açma adını ve gün cinsinden geçerlilik süresini içeren etiketlerle bir gizli bilgi oluşturun. Gizli adını, SQL veritabanındaki başlangıç parolasını (bu örnekte Simple123) ve rotasyonun hemen tetiklenmesi için son kullanma tarihini yarın olarak ayarlayın.
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
Kısa bir geçerlilik süresi ayarlamak, 15 dakika içinde bir SecretNearExpiry olayı yayınlar; bu da fonksiyonun gizli anahtarı yenilemesini tetikler.
Test edin ve doğrulayın
Gizli anahtarın yenilendiğini doğrulamak için Key Vault>Secrets bölümüne gidin:
>
sqlPassword gizli dizisini açın ve özgün ve döndürülmüş sürümleri görüntüleyin:
Web uygulaması oluştur
SQL kimlik bilgilerini doğrulamak için bir web uygulaması oluşturun. Web uygulaması gizli anahtarı Key Vault’tan alır, gizli anahtardan SQL veritabanına ilişkin bilgileri ve kimlik bilgilerini çıkarır ve SQL Server’a bağlantıyı test eder.
Web uygulaması şu bileşenleri gerektirir:
- Sistem tarafından atanan yönetilen kimliğe sahip bir web uygulaması.
- Web uygulamasının yönetilen kimliğinin Anahtar Kasası'ndaki gizli anahtarları okumasına izin veren rol ataması.
Azure şablonu dağıtım bağlantısını seçin:
akvrotation kaynak grubunu seçin.
SQL Server Adı alanına, parolasını döndürdüğünüz SQL Server adını girin.
Key Vault Adı alanına key vault adını girin.
Secret Name alanına, parolayı depolayan gizli anahtarın adını girin.
Depo URL'sinde web uygulaması kodunun GitHub konumunu girin:
https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git.Seçin, gözden geçir ve oluştur.
Oluştur'i seçin.
Web uygulamasını açma
Dağıtılan uygulama URL'sine gidin: https://akvrotation-app.azurewebsites.net/.
Uygulama tarayıcıda açıldığında, sayfada Oluşturulan Gizli Değer ve Veritabanı Bağlantısı değeri true gösterilir.
Veritabanınızın döndürme işlevini özelleştirmek için yapay zekayı kullanma
Bu öğreticide SQL Server için gizli bilgilerin döndürülmesi açıklanmaktadır, ancak bu döndürme işlevini diğer veritabanı türlerine uyarlayabilirsiniz. GitHub Copilot, döndürme işlevi kodunu veritabanınızla veya kimlik bilgileri türünüzle çalışacak şekilde değiştirmenize yardımcı olabilir.
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 bu düzeni API anahtarları, bağlantı dizeleri veya hizmet hesabı parolaları gibi diğer kimlik bilgileri türleri için uyarlamanıza da yardımcı olabilir.
GitHub Copilot yapay zeka ile desteklendiğinden sürprizler ve hatalar mümkündür. Daha fazla bilgi için Copilot Sıkça Sorulan Sorular'a bakın.