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 managed identity kullanmaktır, ancak bunun bir seçenek olmadığı bazı senaryolar vardır. Böyle durumlarda erişim anahtarları veya gizli anahtarlar kullanılır. Erişim anahtarlarını veya gizli dizileri düzenli aralıklarla döndürmeniz gerekir.
Bu öğretici, veritabanları ve hizmetler için tek bir kimlik doğrulama kimlik bilgisi kümesi kullanarak sırların periyodik olarak döndürülmesi süreçlerini otomatikleştirmeyi göstermektedir. Farklı varlık türleri genelinde otomatik döndürme kavramlarına ve avantajlarına kapsamlı bir genel bakış için bkz. Azure Key Vault'da otomatik döndürmeyi anlama.
Özellikle, bu öğretici Azure Event Grid bildirimi tarafından tetiklenen bir işlev kullanarak Azure Key Vault'da depolanan SQL Server parolaları döndürür:
- 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 boyunca, Key Vault'taki gizli anahtar SQL Server'a kimlik doğrulaması yapamaz. Adımlardan herhangi birinin başarısız olması durumunda Event Grid iki saat boyunca yeniden denenir.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik .
- Azure Key Vault
- SQL Server
Mevcut Key Vault ve SQL Server yoksa şu dağıtım bağlantısını kullanabilirsiniz:
- Kaynak grubu'nun altında Yeni oluştur’u seçin. Gruba bir ad verin, bu öğreticide akvrotation kullanıyoruz.
- SQL Yöneticisi Oturum Açma'nın altına SQL yöneticisi oturum açma adı yazın.
- Seçin, gözden geçir ve oluştur.
- Oluştur'u seçin
Artık bir Key Vault ve bir SQL Server örneğiniz olacak. Aşağıdaki komutu çalıştırarak bu kurulumu Azure CLI doğrulayabilirsiniz:
az resource list -o table -g akvrotation
Sonuç, aşağıdaki gibi bir çıktı olarak görünecek:
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şlevi oluşturma ve dağıtma
Önemli
Bu şablon anahtar kasası, SQL server ve Azure İşlevinin aynı kaynak grubunda olmasını gerektirir.
Ardından, sistem tarafından yönetilen bir kimlikle, diğer gerekli bileşenlere ek olarak bir işlev uygulaması oluşturun ve SQL server parola döndürme işlevlerini dağıtın
İşlev uygulaması şu bileşenleri gerektirir:
- Azure App Service planı
- Olay tetikleyicisi ve http tetikleyicisi ile SQL parola döndürme işlevlerine sahip bir İşlev Uygulaması
- İşlev uygulaması tetikleyici yönetimi için gereken bir depolama hesabı
- Key Vault'taki gizli bilgilere erişmek için işlev uygulaması kimliğine Azure RBAC rol ataması yapılması
- SecretNearExpiry olayı için Event Grid olay aboneliği
Azure şablonu dağıtım bağlantısını seçin:
Kaynak grubu listesinde akvrotation öğesini seçin.
SQL Server Adı için döndürmek amacıyla parolayı da içeren SQL Server adını yazın.
Key Vault Name alanına key vault adını yazın
İşlev Uygulaması Adı alanına işlev uygulaması adını yazın
Gizli Dizi Adı alanına parolanın depolanacağı gizli dizi adını yazın
Repo Url bölümüne işlev kodu GitHub konum (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git) yazın
Seçin, gözden geçir ve oluştur.
Oluştur'i seçin.
Önceki adımları tamamladıktan sonra bir depolama hesabınız, bir sunucu grubunuz ve bir işlev uygulamanız olur. Aşağıdaki komutu çalıştırarak bu kurulumu Azure CLI doğrulayabilirsiniz:
az resource list -o table -g akvrotation
Sonuç aşağıdaki çıkışa benzer olacaktır:
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
Fonksiyon uygulaması oluşturma ve yönetilen kimliği kullanarak Key Vault'a erişim hakkında bilgi için, bkz. Azure portalından fonksiyon uygulaması oluşturma, App Service ve Azure İşlevleri için yönetilen kimliğin nasıl kullanılacağı ve Azure RBAC ile Key Vault erişimi sağlama.
Döndürme işlevi
Önceki adımda dağıtılan işlev, Key Vault ve SQL veritabanını güncelleyerek bir olaydan yararlanarak gizli dizi döndürme işlemini başlatır.
İş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
Kullanıcılara sırları yönetme izni vermek için erişim ilkenizi ayarlayı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 gizli dizi için geçerlilik süresini içeren etiketlerle yeni bir gizli dizi oluşturun. Gizli anahtarın adını, SQL veritabanındaki ilk parolayı ("Simple123" örneğimizde) belirtin ve yarın için ayarlanmış bir son kullanma tarihi ekleyin.
$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
Kısa bir son kullanma tarihiyle gizli dizi oluşturmak 15 dakika içinde bir SecretNearExpiry olay yayımlar ve bu da işlevin gizli diziyi döndürmesini tetikler.
Test edin ve doğrulayın
Gizliliğin döndüğünü 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. Bu web uygulaması Key Vault'tan gizliyi alacak, gizliden SQL veritabanı bilgilerini ve kimlik bilgilerini ayıklayacak ve SQL Server bağlantısını test edecek.
Web uygulaması şu bileşenleri gerektirir:
- Sistem tarafından yönetilen kimliğe sahip bir web uygulaması
- Web uygulamasının yönetilen kimliği aracılığıyla Key Vault'taki gizli bilgilere erişim sağlamak için bir erişim politikası
Azure şablonu dağıtım bağlantısını seçin:
akvrotation kaynak grubunu seçin.
SQL Server Adı'nı yazın, ardından döndürülecek parolayı girin.
Key Vault Name alanına key vault adını yazın
Gizli Dizi Adı alanına parolanın depolandığı gizli dizi adını yazın
Repo Url bölümüne web uygulaması kodu GitHub konum (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git) yazın
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 Oluşturulan Gizli Dizi Değeri'ni ve Veritabanı Bağlı değerini true olarak görürsünüz.
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. VS Code'daki GitHub Copilot, döndürme işlevi kodunu belirli veritabanınızla veya kimlik bilgisi 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.