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.
Bu makalede, Key Vault gizli dizilerinden uygulama yapılandırma değerlerini yüklemek için Azure Key Vault yapılandırma sağlayıcısının nasıl kullanılacağı açıklanmaktadır. Key Vault, uygulamalar ve hizmetler tarafından kullanılan şifreleme anahtarlarını ve gizli dizileri korumaya yardımcı olan bulut tabanlı bir hizmettir. ASP.NET Core uygulamalarla Key Vault kullanmaya yönelik yaygın senaryolar şunlardır:
- Hassas yapılandırma verilerine erişimi denetleme.
- Yapılandırma verilerini depolarken FIPS 140-2 Düzey 2 doğrulanmış Donanım Güvenlik Modülleri (HSM) gereksinimini karşılar.
Packages
Paket başvurularını aşağıdaki paketler için ekleyin:
Örnek uygulama
Örnek uygulama, #define dosyasının üst kısmındaki ön işlemci yönergesi tarafından belirlenen iki moddan birinde çalışır:
Certificate: Bir anahtar kasasında depolanan gizli bilgilere erişmek için Key Vault istemci kimliği ile X.509 sertifikasının nasıl kullanılacağını gösterir. örneği, Azure App Service veya bir ASP.NET Core uygulamasına hizmet verebilen herhangi bir konağa dağıtılan herhangi bir konumdan çalıştırabilirsiniz.Managed: Azure kaynakları için Yönetilen kimliklerin nasıl kullanılacağını gösterir. Yönetilen kimlik, kimlik bilgilerini uygulama kodunda veya yapılandırmasında depolamadan, Azure kaynakları için Yönetilen Kimlikler kullanarak uygulamanın Key Vault’a kimlik doğrulaması yapmasını sağlar. ÖrneğinManagedsürümü Azure'a dağıtılmalıdır. Azure kaynakları için yönetilen kimlikleri kullanma bölümündeki yönergeleri izleyin.
kullanarak #defineörnek uygulama yapılandırma hakkında daha fazla bilgi için bkz. Örnek kodda önişlemci yönergeleri.
Örnek kodu görüntüleme veya indirme (indirme)
Geliştirme ortamında gizli depolama
Gizli Yönetimi aracını kullanarak gizli anahtarları yerel olarak ayarlayın. Örnek uygulama Development ortamında yerel makinede çalıştırıldığında, gizli bilgiler yerel kullanıcı gizli bilgiler deposundan yüklenir.
Secret Manager, uygulama projesi dosyasında bir <UserSecretsId> özelliği gerektirir. Özellik değerini ({GUID}) herhangi bir benzersiz GUID olarak ayarlayın:
<PropertyGroup>
<UserSecretsId>{GUID}</UserSecretsId>
</PropertyGroup>
Sırlar ad-değer çiftleri olarak oluşturulur. Hiyerarşik değerler (yapılandırma bölümleri), : anahtar adlarında ayırıcı olarak iki nokta () kullanır.
Secret Manager, projenin içerik kökünde açılmış bir komut kabuğunda (veya terminalde) kullanılır; burada {SECRET NAME} addır ve {SECRET VALUE} değerdir:
dotnet user-secrets set "{SECRET NAME}" "{SECRET VALUE}"
Aşağıdaki komutları projenin içerik kökünden bir komut kabuğunda çalıştırın. Komutlar örnek uygulama için gizli anahtarları belirler:
dotnet user-secrets set "SecretName" "secret_value_1_dev"
dotnet user-secrets set "Section:SecretName" "secret_value_2_dev"
Bu gizli bilgiler, Key Vault ile Üretim ortamında gizli bilgilerin depolanması bölümünde açıklandığı gibi Key Vault'ta depolandığında, _dev soneki _prod olarak değişir. Sonek, uygulama çıkışında yapılandırma değerlerinin kaynağını gösteren görsel bir ipucu sağlar.
Key Vault ile Üretim ortamında gizli depolama
Aşağıdaki adımları tamamlayarak bir Azure anahtar kasası oluşturun ve örnek uygulama gizli dizilerini depolayın. Daha fazla bilgi için bkz. Hızlı başlangıç: Azure CLI ile Key Vault'ta bir gizli dizi ayarlama ve alma.
Azure portalında aşağıdaki yöntemlerden birini kullanarak Azure Cloud Shell açın:
- Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Metin kutusundaki "Azure CLI" arama dizesini kullanın.
- Cloud Shell'i Başlat düğmesiyle tarayıcınızda Cloud Shell'i açın.
- Azure portalının sağ üst köşesindeki menüden Cloud Shell düğmesini seçin.
Daha fazla bilgi için Azure CLI belgelerine ve Azure Cloud Shell’e genel bakış bölümüne bakın.
Henüz kimliğiniz doğrulanmamışsa komutuyla
az loginoturum açın.Aşağıdaki komutla bir kaynak grubu oluşturun; burada
{RESOURCE GROUP NAME}yeni kaynak grubunun adıdır ve{LOCATION}Azure bölgesidir:az group create --name "{RESOURCE GROUP NAME}" --location {LOCATION}Kaynak grubunda aşağıdaki komutla bir Azure anahtar kasası oluşturun; burada
{KEY VAULT NAME}yeni kasanın adı ve{LOCATION}Azure bölgesidir:az keyvault create --name {KEY VAULT NAME} --resource-group "{RESOURCE GROUP NAME}" --location {LOCATION}Güvenlik deposunda isim-değer çiftleri olarak gizli anahtarlar oluşturun.
Key Vault gizli anahtar adları, harf ve rakamlardan oluşan karakterler ile tireler (
-) içerebilir. Hiyerarşik değerler (yapılandırma bölümleri), ayraç olarak iki tire (--) kullanır. Key Vault gizli bilgi adlarında iki nokta üst üste karakterine izin verilmez. ASP.NET Core yapılandırmasında iki nokta üst üste, bir bölümü bir alt anahtardan ayırır. Gizli anahtarlar uygulama yapılandırmasına yüklendiğinde, iki tire karakteri dizisi iki nokta üst üste ile değiştirilir.Aşağıdaki gizli bilgiler örnek uygulamayla birlikte kullanılması içindir. Değerler, bunları Secret Manager aracılığıyla
_prodortamına yüklenen_devson ekine sahip değerlerden ayıran birDevelopmentson eki içerir.{KEY VAULT NAME}değerini daha önce oluşturduğunuz anahtar kasasının adıyla değiştirin:az keyvault secret set --vault-name {KEY VAULT NAME} --name "SecretName" --value "secret_value_1_prod" az keyvault secret set --vault-name {KEY VAULT NAME} --name "Section--SecretName" --value "secret_value_2_prod"
Azure'da barındırılan olmayan uygulamalar için Uygulama Kimliği ve X.509 sertifikası kullanma
Azure dışında barındırıldığında uygulamanın bir kasaya kimlik doğrulaması yapmak için Microsoft Entra ID Uygulama Kimliği ve X.509 sertifikası kullanmasını sağlayacak şekilde Key Vault'u ve uygulamayı yapılandırın . Daha fazla bilgi için bkz . Anahtarlar, gizli diziler ve sertifikalar hakkında.
Note
Uygulama Kimliği ve X.509 sertifikasının kullanılması Azure barındırılan uygulamalar için desteklense de bu yaklaşım önerilmez. Bunun yerine, Azure'da bir uygulamayı barındırırken Azure kaynakları için Yönetilen kimlikleri kullanın. Yönetilen kimlikler için uygulamada veya Development ortamda sertifika depolanması gerekmez.
Örnek uygulama, #define dosyasının en üstündeki önişlemci yönergesi Certificate olarak ayarlandığında bir Uygulama Kimliği ve X.509 sertifikası kullanır.
PKCS#12 arşiv (.pfx) sertifikası oluşturun. Sertifika oluşturma seçenekleri Arasında Windows'ta New-SelfSignedCertificate ve OpenSSL bulunur.
Sertifikayı geçerli kullanıcının kişisel sertifika deposuna yükleyin. Anahtarı dışarı aktarılabilir olarak işaretlemek isteğe bağlıdır. Bu işlemin ilerleyen bölümlerinde kullanılan sertifikanın parmak izini not edin.
PKCS#12 arşiv (.pfx) sertifikasını DER ile kodlanmış sertifika (.cer) olarak dışarı aktarın.
Uygulamayı Microsoft Entra ID (Uygulama kayıtları) ile kaydedin.
DER ile kodlanmış sertifikayı (.cer) Microsoft Entra ID yükleyin:
- Microsoft Entra Id'de uygulamayı seçin.
- Sertifikalar ve gizli anahtarlar bölümüne gidin.
- Sertifikayı karşıya yükle seçeneğini seçin, bu işlem ortak anahtarı içeren sertifikayı karşıya yükleyecektir. .cer, .pem veya .crt sertifikası kabul edilebilir.
Anahtar kasası adını, Uygulama Kimliği'ni ve sertifika parmak izini uygulama appsettings.json dosyasında depolayın.
Azure portalında Key Vaults adresine gidin.
Azure Key Vault ile Üretim ortamında Gizli dizi depolama bölümünde oluşturduğunuz anahtar kasasını seçin.
Erişim ilkeleri'ni ve ardından Erişim İlkesi Ekle'yi seçin.
Gizli izinleri açın ve uygulamaya Alma ve Listeleme izinlerini sağlayın.
Sorumlu seç öğesini seçin. Kayıtlı uygulamayı ada göre seçin ve ardından Seç'i seçin.
Tamam'ı ve ardından Kaydet'i seçin.
Uygulamayı dağıtın.
Örnek uygulama, yapılandırma değerlerini Certificate, sır adıyla aynı ada sahip IConfigurationRoot'den alır.
- Hiyerarşik olmayan değerler:
SecretNameiçin değer,config["SecretName"]ile elde edilir. - Hiyerarşik değerler (bölümler): İki nokta üst üste (
:) gösterimini veya GetSection yöntemini kullanın. Yapılandırma değerini almak için aşağıdaki yaklaşımlardan birini kullanın:config["Section:SecretName"]config.GetSection("Section")["SecretName"]
İşletim sistemi X.509 sertifikasını yönetir. Uygulama, AddAzureKeyVault dosyasının sağladığı değerlerle yöntemini çağırır:
using System.Security.Cryptography.X509Certificates;
using Azure.Identity;
var builder = WebApplication.CreateBuilder(args);
if (builder.Environment.IsProduction())
{
using var x509Store = new X509Store(StoreLocation.CurrentUser);
x509Store.Open(OpenFlags.ReadOnly);
var x509Certificate = x509Store.Certificates
.Find(
X509FindType.FindByThumbprint,
builder.Configuration["AzureADCertThumbprint"],
validOnly: false)
.OfType<X509Certificate2>()
.Single();
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new ClientCertificateCredential(
builder.Configuration["AzureADDirectoryId"],
builder.Configuration["AzureADApplicationId"],
x509Certificate));
}
var app = builder.Build();
Örnek değerler:
- Anahtar kasası adı:
contosovault - Uygulama kimliği:
00001111-aaaa-2222-bbbb-3333cccc4444 - Sertifika parmak izi:
fe14593dd66b2406c5269d742d04b6e1ab03adb1
appsettings.json dosyasındaki değerler:
{
"KeyVaultName": "Key Vault Name",
"AzureADApplicationId": "Azure AD Application ID",
"AzureADCertThumbprint": "Azure AD Certificate Thumbprint",
"AzureADDirectoryId": "Azure AD Directory ID"
}
Uygulamayı çalıştırdığınızda, bir web sayfası yüklenen gizli dizi değerlerini gösterir.
Development ortamında, gizli değerler _dev sonekiyle yüklenir.
Production ortamda değerler _prod sonekle birlikte yüklenir.
Azure kaynakları için yönetilen kimlikleri kullanma
Azure'a dağıtılan bir uygulama, Azure kaynakları için Yönetilen kimliklerden yararlanabilir. Yönetilen kimlik, uygulamanın kimlik bilgilerini uygulama kodunda veya yapılandırmasında depolamadan Microsoft Entra ID kimlik doğrulamasını kullanarak Azure Key Vault ile kimlik doğrulaması yapmasına olanak tanır.
Örnek uygulama, #define dosyasının üst kısmında yer alan ön işlemci yönergesi olarak ayarlandığında, Managed sistem tarafından atanan yönetilen kimliği kullanır. Azure App Service uygulaması için yönetilen kimlik oluşturmak için bkz. App Service ve Azure İşlevleri için yönetilen kimlikleri kullanma
Uygulama appsettings.json dosyasına anahtar kasası adını girin. Örnek uygulama, sürüme Managed ayarlandığında Bir Uygulama Kimliği ve Parola (İstemci Gizli Anahtarı) gerektirmez, bu nedenle bu yapılandırma girdilerini yoksayabilirsiniz. Uygulama Azure’a dağıtılır ve Azure, Key Vault’a erişmek için uygulamanın kimliğini yalnızca appsettings.json dosyasında depolanan kasa adını kullanarak doğrular.
Örnek uygulamayı Azure Uygulaması Hizmetine dağıtın.
Azure CLI'yi ve uygulamanın Nesne Kimliğini kullanarak, uygulamaya anahtar kasasına erişmek üzere list ve get izinlerini verin:
az keyvault set-policy --name {KEY VAULT NAME} --object-id {OBJECT ID} --secret-permissions get list
Azure CLI, Azure PowerShell veya Azure portalını kullanarak uygulamayı başlatın.
Örnek uygulama DefaultAzureCredential sınıfının bir örneğini oluşturur. Kimlik bilgisi, Azure kaynakları için ortamdan erişim belirteci almayı dener:
using Azure.Identity;
var builder = WebApplication.CreateBuilder(args);
if (builder.Environment.IsProduction())
{
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential());
}
Note
Yukarıdaki örnekte, Azure dağıtan uygulamalar geliştirirken kimlik doğrulamasını basitleştirmek için DefaultAzureCredential sınıfı kullanılır. Bu yaklaşım, Azure barındırma ortamlarında kullanılan kimlik bilgilerini yerel geliştirmede kullanılan kimlik bilgileriyle birleştirir. Uygulamayı üretime taşıdığınızda, sınıfı gibi ManagedIdentityCredential bir alternatif daha iyi bir seçimdir. Daha fazla bilgi için bkz. Sistem tarafından atanan yönetilen kimlik kullanarak Azure’da barındırılan .NET uygulamalarının Azure kaynaklarına kimlik doğrulaması yapması.
Anahtar kasası için örnek ad: contosovault
appsettings.json dosyasındaki ad değeri:
{
"KeyVaultName": "Key Vault Name"
}
Kullanıcı tarafından atanan yönetilen kimlik kullanan uygulamalar için, aşağıdaki yaklaşımlardan birini kullanarak yönetilen kimliğin İstemci Kimliğini yapılandırın:
AZURE_CLIENT_IDortam değişkenini ayarlayın.DefaultAzureCredentialOptions.ManagedIdentityClientId yöntemini çağırırken
AddAzureKeyVaultözelliğini ayarlayın:builder.Configuration.AddAzureKeyVault( new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"), new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = builder.Configuration["AzureADManagedIdentityClientId"] }));
Uygulamayı çalıştırdığınızda, bir web sayfası yüklenen gizli dizi değerlerini gösterir.
Development Ortamda gizli değerler, Gizli Yönetici tarafından sağlandığı için _dev son eke sahiptir.
Production ortamında, değerler Azure Key Vault tarafından sağlandığı için _prod sonekiyle yüklenir.
Access denied hatası alırsanız, uygulamanın Microsoft Entra ID'ye kaydedildiğini ve kasaya erişimi olduğunu doğrulayın. hizmeti Azure'de yeniden başlattığınızdan emin olun.
Sağlayıcıyı bir yönetilen kimlik ve Azure Pipelines ile kullanma konusunda bilgi için bkz. Azure Resource Manager hizmet bağlantısıyla Azure’a bağlanma.
Yapılandırma seçenekleri
AddAzureKeyVault yöntemi bir AzureKeyVaultConfigurationOptions nesneyi kabul edebilir:
// using Azure.Extensions.AspNetCore.Configuration.Secrets;
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(),
new AzureKeyVaultConfigurationOptions
{
// ...
});
AzureKeyVaultConfigurationOptions nesnesi aşağıdaki özellikleri içerir:
| Property | Description |
|---|---|
| Manager | Gizli bilgilerin yüklenmesini kontrol etmek için kullanılan bir KeyVaultSecretManager örneğini belirtir. |
| ReloadInterval | Değişiklikler için anahtar kasasında yoklama yapma denemeleri arasında beklenecek TimeSpan değerini belirtir. Varsayılan değerdir null (yapılandırma yeniden yüklenmez). |
Anahtar adı ön eki kullanma
AddAzureKeyVault yöntemi, Key Vault gizli dizilerinin yapılandırma anahtarlarına nasıl dönüştürüldüğünü denetlemenize olanak tanıyan KeyVaultSecretManager uygulamasını kabul eden bir aşırı yükleme sağlar. Örneğin, uygulama başlangıcında sağladığınız bir ön ek değerine göre gizli değerleri yüklemek için arabirimi uygulayabilirsiniz. Bu teknik, örneğin uygulamanın sürümüne göre gizli verileri yüklemenizi sağlar.
Important
Key Vault sırlarında aşağıdakiler için ön ek kullanmayın:
- Birden çok uygulamanın gizli anahtarlarını aynı anahtar kasasında depolayın.
- Ortam sırlarını (örneğin,
DevelopmentveProductionsırlarını) aynı anahtar kasasına yerleştirin.
Farklı uygulamalar ve geliştirme/üretim ortamları, en yüksek güvenlik düzeyi için uygulama ortamlarını yalıtmak için ayrı anahtar kasaları kullanmalıdır.
Aşağıdaki örnekte, Development ortamı için Secret Manager kullanılarak 5000-AppSecret için Key Vault'ta bir gizli dizi oluşturulur (Key Vault gizli dizi adlarında nokta kullanımına izin verilmez). Bu gizli anahtar, uygulamanın 5.0.0.0 sürümü için uygulamanın gizli anahtarını temsil eder. Uygulamanın 5.1.0.0 olan başka bir sürümü için, 5100-AppSecret adına aynı anahtar kasasına Gizli Dizi Yöneticisi kullanılarak bir gizli dizi eklenir. Her uygulama sürümü, sürümüne ait gizli değeri AppSecret olarak yapılandırmasına yükler ve gizli değeri yüklerken sürümü kaldırır.
AddAzureKeyVault yöntemi özel KeyVaultSecretManager bir uygulamayla çağrılır:
// using Azure.Extensions.AspNetCore.Configuration.Secrets;
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(),
new SamplePrefixKeyVaultSecretManager("5000"));
Uygulama, yapılandırmaya uygun gizli anahtarı yüklemek için gizli anahtarların sürüm ön eklerine göre tepki verir.
-
Loadyöntemi, adı bu ön ekle başladığında bir gizli anahtar yükler. Diğer sırlar yüklenmedi. - Yöntemi
GetKey:- Gizli isimden ön eki kaldırır.
- Herhangi bir adda bulunan iki tireyi (
--)KeyDelimiterile değiştirir. Bu ayırıcı (genellikle iki nokta üst üste:), yapılandırmada kullanılır çünkü Key Vault'ta gizli adlarında iki nokta üst üste (:) kullanılamaz.
public class SamplePrefixKeyVaultSecretManager : KeyVaultSecretManager
{
private readonly string _prefix;
public SamplePrefixKeyVaultSecretManager(string prefix)
=> _prefix = $"{prefix}-";
public override bool Load(SecretProperties properties)
=> properties.Name.StartsWith(_prefix);
public override string GetKey(KeyVaultSecret secret)
=> secret.Name[_prefix.Length..].Replace("--", ConfigurationPath.KeyDelimiter);
}
Bir sağlayıcı algoritması, Load yöntemini çağırır ve sürüm ön ekine sahip gizli dizileri bulmak için anahtar kasasındaki gizli diziler arasında dolaşır. Bir sürüm ön eki Load ile bulunduğunda, algoritma GetKey yöntemini kullanarak gizli adıyla ilgili yapılandırma adını döndürür. Sırrın adındaki sürüm ön ekini kaldırır. Gizli adın geri kalanı, uygulama yapılandırmasının ad-değer çiftlerine yüklenmek üzere döndürülür.
Bu yaklaşımı uyguladığınızda aşağıdaki adımları tamamlayın:
Uygulama proje dosyasında uygulama sürümünü belirtin. Aşağıdaki örnekte uygulama sürümü olarak
5.0.0.0ayarlanmıştır:<PropertyGroup> <Version>5.0.0.0</Version> </PropertyGroup><UserSecretsId>kullanıcı tarafından sağlanan bir GUID olmak üzere,{GUID}özelliğinin uygulama proje dosyasında tanımlandığını onaylayın:<PropertyGroup> <UserSecretsId>{GUID}</UserSecretsId> </PropertyGroup>Aşağıdaki gizli anahtarları Gizli Dizi Yöneticisi kullanarak yerel olarak kaydedin:
dotnet user-secrets set "5000-AppSecret" "5.0.0.0_secret_value_dev" dotnet user-secrets set "5100-AppSecret" "5.1.0.0_secret_value_dev"Aşağıdaki Azure CLI komutlarını kullanarak gizli anahtarları Azure Key Vault’a kaydedin:
az keyvault secret set --vault-name {KEY VAULT NAME} --name "5000-AppSecret" --value "5.0.0.0_secret_value_prod" az keyvault secret set --vault-name {KEY VAULT NAME} --name "5100-AppSecret" --value "5.1.0.0_secret_value_prod"
İşlem aşağıdaki görevleri tamamlar:
Uygulama çalıştığında, uygulama mantığı Anahtar Kasası'ndaki gizli anahtarları yükler.
5000-AppSecretiçin gizli dize, uygulamanın proje dosyasında (5.0.0.0) belirtilen uygulama sürümüyle eşleştirilir.Sürüm, (
5000ile birlikte tire), anahtar adından çıkarılır. Uygulama genelinde,AppSecretanahtarını kullanarak okuma işlemi, gizli değeri yükler.Proje dosyasında uygulama sürümü
5.1.0.0olarak değiştirilir ve uygulama yeniden çalıştırılırsa, döndürülen gizli değer5.1.0.0_secret_value_devortamındaDevelopmentve5.1.0.0_secret_value_prodortamındaProductionolur.
Note
Kendi SecretClient uygulamanızı da AddAzureKeyVault yöntemine sağlayabilirsiniz. Özel istemci, istemcinin tek bir örneğinin uygulama genelinde paylaşılmasına olanak tanır.
Bir diziyi sınıfa bağlama
Sağlayıcı, POCO dizisine bağlamak için konfigürasyon değerlerini bir diziye okuyabilir.
Anahtarların iki nokta (:) ayırıcıları içermesine izin veren bir yapılandırma kaynağından okurken, bir diziyi oluşturan anahtarları (:0:, :1:, ... :{n}:) ayırt etmek için sayısal bir anahtar kesimi kullanılır. Daha fazla bilgi için bkz . Yapılandırma: Diziyi bir sınıfa bağlama.
Key Vault anahtarlarında ayırıcı olarak iki nokta (:) kullanılamaz. Bu makalede açıklanan yaklaşım, hiyerarşik değerler (bölümler) için ayırıcı olarak çift tireler (--) kullanır. Dizi anahtarları, Key Vault’ta çift kısa çizgiler ve sayısal anahtar segmentleriyle (--0--, --1--, … --{n}--) depolanır.
Bir JSON dosyasında sağlanan aşağıdaki Serilog günlüğü sağlayıcısı yapılandırmasını inceleyin. Dizide, günlüğe kaydetme çıkışına yönelik hedefleri açıklayan iki Serilog WriteTo yansıtan iki nesne değişmez değeri tanımlanmıştır.
"Serilog": {
"WriteTo": [
{
"Name": "AzureTableStorage",
"Args": {
"storageTableName": "logs",
"connectionString": "DefaultEnd...ountKey=Eby8...GMGw=="
}
},
{
"Name": "AzureDocumentDB",
"Args": {
"endpointUrl": "https://contoso.documents.azure.com:443",
"authorizationKey": "Eby8...GMGw=="
}
}
]
}
JSON dosyasındaki yapılandırma, çift tire (--) notasyonu ve sayısal bölümler kullanılarak Key Vault'ta depolanır:
| Key | Value |
|---|---|
Serilog--WriteTo--0--Name |
AzureTableStorage |
Serilog--WriteTo--0--Args--storageTableName |
logs |
Serilog--WriteTo--0--Args--connectionString |
DefaultEnd...ountKey=Eby8...GMGw== |
Serilog--WriteTo--1--Name |
AzureDocumentDB |
Serilog--WriteTo--1--Args--endpointUrl |
https://contoso.documents.azure.com:443 |
Serilog--WriteTo--1--Args--authorizationKey |
Eby8...GMGw== |
Gizli verileri yeniden yükle
Varsayılan olarak, yapılandırma sağlayıcısı uygulama ömrü için gizli dizileri önbelleğe alır. Uygulama, daha sonra anahtar kasasında devre dışı bırakılan veya güncellenen gizli anahtarları yoksayar.
Gizli anahtarları yeniden yüklemek için IConfigurationRoot.Reload yöntemini çağırın:
config.Reload();
Belirli aralıklarla gizli bilgileri yeniden yüklemek için AzureKeyVaultConfigurationOptions.ReloadInterval özelliğini ayarlayın. Daha fazla bilgi için bkz . Yapılandırma seçenekleri.
Devre dışı bırakılmış ve süresi dolmuş gizli anahtarlar
Süresi dolmuş gizli veriler varsayılan olarak yapılandırma sağlayıcısına eklenir. Uygulama yapılandırmasında bu gizli dizilerin değerlerini dışlamak için süresi dolan gizli diziyi güncelleştirin veya özel bir yapılandırma sağlayıcısı kullanarak yapılandırmayı sağlayın:
class SampleKeyVaultSecretManager : KeyVaultSecretManager
{
public override bool Load(SecretProperties properties) =>
properties.ExpiresOn.HasValue &&
properties.ExpiresOn.Value > DateTimeOffset.Now;
}
Bu özel KeyVaultSecretManager sağlayıcıyı AddAzureKeyVault yöntemine iletin:
// using Azure.Extensions.AspNetCore.Configuration.Secrets;
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(),
new SampleKeyVaultSecretManager());
Devre dışı bırakılmış gizli bilgiler Key Vault’tan alınamaz ve hiçbir zaman dahil edilmez.
Note
Yukarıdaki örnekte, Azure dağıtan uygulamalar geliştirirken kimlik doğrulamasını basitleştirmek için DefaultAzureCredential sınıfı kullanılır. Bu yaklaşım, Azure barındırma ortamlarında kullanılan kimlik bilgilerini yerel geliştirmede kullanılan kimlik bilgileriyle birleştirir. Uygulamayı üretime taşıdığınızda, sınıfı gibi ManagedIdentityCredential bir alternatif daha iyi bir seçimdir. Daha fazla bilgi için bkz. Sistem tarafından atanan yönetilen kimlik kullanarak Azure’da barındırılan .NET uygulamalarının Azure kaynaklarına kimlik doğrulaması yapması.
Yapılandırma yükleme sorunlarını giderme
Uygulama, yapılandırmayı sağlayıcı aracılığıyla yükleyemezse, ASP.NET Core günlükleme altyapısına bir hata iletisi yazılır.
Aşağıdaki koşullar yapılandırmanın yüklenmesini engelleyebilir:
- Uygulama veya sertifika Microsoft Entra Id'de doğru yapılandırılmamış.
- Azure Key Vault'ta depo bulunmamaktadır.
- Uygulamanın kasaya erişme yetkisi yoktur.
- Erişim ilkesi
GetveListizinlerini içermez. - Kasada yapılandırma verileri (ad-değer çifti) yanlış adlandırılmış, eksik veya devre dışı bırakılmış.
- Uygulamadaki anahtar kasası adı (
KeyVaultName), Microsoft Entra ID Uygulama Kimliği (AzureADApplicationId), Microsoft Entra ID sertifika parmak izi (AzureADCertThumbprint) veya Microsoft Entra ID Dizin Kimliği (AzureADDirectoryId) yanlış. - Uygulama için Key Vault erişim ilkesi eklendiğinde, ilke başarıyla oluşturulur, ancak kullanıcı Access ilkeleri iletişim kutusunda Save seçmedi.
İlgili içerik
Bu makalede Azure Key Vault gizli dizilerinden uygulama yapılandırma değerlerini yüklemek için Azure Key Vault yapılandırma sağlayıcısının nasıl kullanılacağı açıklanmaktadır. Azure Key Vault, uygulamalar ve hizmetler tarafından kullanılan şifreleme anahtarlarının ve gizli dizilerinin korunmasına yardımcı olan bulut tabanlı bir hizmettir. Azure Key Vault'un ASP.NET Core uygulamalarıyla kullanılmasına yönelik yaygın senaryolar şunlardır:
- Hassas yapılandırma verilerine erişimi denetleme.
- Yapılandırma verilerini depolarken FIPS 140-2 Düzey 2 doğrulanmış Donanım Güvenlik Modülleri (HSM) gereksinimini karşılar.
Packages
Paket başvurularını aşağıdaki paketler için ekleyin:
Örnek uygulama
Örnek uygulama, en üstündeki önişlemci yönergesi tarafından #define belirlenen iki moddan Program.csbirinde çalışır:
-
Certificate: Azure Key Vault'ta depolanan gizli dizilere erişmek için Azure Key Vault İstemci Kimliği ve X.509 sertifikasının kullanılmasını gösterir. Bu örnek, Azure Uygulaması Hizmeti'ne veya ASP.NET Core uygulamasına hizmet verebilen herhangi bir ana bilgisayara dağıtılan herhangi bir konumdan çalıştırılabilir. -
Managed: Azure kaynakları için Yönetilen kimliklerin nasıl kullanılacağını gösterir. Yönetilen kimlik, uygulamanın kodunda veya yapılandırmasında kimlik bilgileri depolanmaksızın, Azure kaynakları için Yönetilen Kimlikler kullanarak Azure Key Vault'ta uygulamanın kimliğini doğrular. Kimlik doğrulaması için yönetilen kimlikler kullanılırken, Azure kaynakları uygulama kimliği ve Parolası (İstemci Gizli Anahtarı) için yönetilen kimlikler gerekli değildir. ÖrneğinManagedsürümü Azure'a dağıtılmalıdır. Azure kaynakları için yönetilen kimlikleri kullanma bölümündeki yönergeleri izleyin.
Önişlemci yönergelerini ()#define kullanarak örnek bir uygulamayı yapılandırma hakkında daha fazla bilgi için bkz . ASP.NET Core'a genel bakış.
Örnek kodu görüntüleme veya indirme (indirme)
Development ortamında gizli veri depolama
Gizli Yöneticisi'ni kullanarak gizli anahtarları yerel olarak ayarlayın. Örnek uygulama Development ortamında yerel makinede çalıştırıldığında, gizli bilgiler yerel kullanıcı gizli bilgiler deposundan yüklenir.
Gizli Yönetici, uygulamanın proje dosyasında bir <UserSecretsId> property gerektirir. Özellik değerini ({GUID}) herhangi bir benzersiz GUID olarak ayarlayın:
<PropertyGroup>
<UserSecretsId>{GUID}</UserSecretsId>
</PropertyGroup>
Sırlar ad-değer çiftleri olarak oluşturulur. Hiyerarşik değerler (yapılandırma bölümleri), : (iki nokta üst üste) ayırıcı olarak ASP.NET Core yapılandırma anahtar adlarında kullanılır.
Gizli Yönetici, projenin içerik köküne açılan bir komut kabuğundan kullanılır. Burada {SECRET NAME} olarak ad ve {SECRET VALUE} olarak değer kullanılır.
dotnet user-secrets set "{SECRET NAME}" "{SECRET VALUE}"
Örnek uygulamanın gizli anahtarlarını ayarlamak için projenin içerik kökünden bir komut kabuğunda aşağıdaki komutları yürütün:
dotnet user-secrets set "SecretName" "secret_value_1_dev"
dotnet user-secrets set "Section:SecretName" "secret_value_2_dev"
Bu gizli bilgiler, Azure Key Vault ile ortamda Production Azure Key Vault içinde Gizli depolama bölümünde depolandığında, _dev sonek _prod olarak değiştirilir. Sonek, uygulamanın çıkışında yapılandırma değerlerinin kaynağını gösteren görsel bir ipucu sağlar.
Azure Key Vault ile Production ortamında gizli depolama
Azure Key Vault oluşturmak ve örnek uygulamanın gizli dizilerini bu kasada depolamak için aşağıdaki adımları tamamlayın. Daha fazla bilgi için Hızlı Başlangıç: Azure CLI kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma bölümüne bakın.
Azure portalda aşağıdaki yöntemlerden birini kullanarak Azure Cloud Shell'i açın:
- Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Metin kutusundaki "Azure CLI" arama dizesini kullanın.
- Cloud Shell'i Başlat düğmesiyle tarayıcınızda Cloud Shell'i açın.
- Azure portalının sağ üst köşesindeki menüden Cloud Shell düğmesini seçin.
Daha fazla bilgi için bkz . Azure CLI ve Azure Cloud Shell'e Genel Bakış.
Henüz kimliğiniz doğrulanmamışsa komutuyla
az loginoturum açın.Aşağıdaki komutu kullanarak bir kaynak grubu oluşturun; burada
{RESOURCE GROUP NAME}yeni kaynak grubunun adı ve{LOCATION}Azure bölgesidir:az group create --name "{RESOURCE GROUP NAME}" --location {LOCATION}Kaynak grubunda aşağıdaki komutu kullanarak bir Key Vault oluşturun; burada
{KEY VAULT NAME}yeni kasanın adı ve{LOCATION}Azure bölgesidir:az keyvault create --name {KEY VAULT NAME} --resource-group "{RESOURCE GROUP NAME}" --location {LOCATION}Güvenlik deposunda isim-değer çiftleri olarak gizli anahtarlar oluşturun.
Azure Key Vault gizli anahtar adları alfasayısal karakterler ve kısa çizgilerle sınırlıdır. Anahtar Kasası gizli anahtar adlarında iki nokta üst üste kullanımına izin verilmediğinden, hiyerarşik değerler (yapılandırma bölümleri) sınırlayıcı olarak
--(iki tire) kullanır. ASP.NET Core yapılandırmasında iki nokta üst üste, bir bölümü bir alt anahtardan ayırır. Uygulamanın yapılandırmasına gizli bilgiler yüklendiğinde iki tire sıralaması iki nokta ile değiştirilir.Aşağıdaki gizli bilgiler örnek uygulamayla birlikte kullanılması içindir. Değerler, ortamda Gizli Dizi Yöneticisi'nden yüklenen
_prodsonek değerlerinden_devayırt etmek için birDevelopmentsonek içerir. Önceki adımda oluşturduğunuz Key Vault adıyla{KEY VAULT NAME}değerini değiştirin.az keyvault secret set --vault-name {KEY VAULT NAME} --name "SecretName" --value "secret_value_1_prod" az keyvault secret set --vault-name {KEY VAULT NAME} --name "Section--SecretName" --value "secret_value_2_prod"
Azure'da barındırılan olmayan uygulamalar için Uygulama Kimliği ve X.509 sertifikası kullanma
Azure Key Vault'u ve uygulamayı, azure dışında barındırıldığında bir kasada kimlik doğrulaması yapmak için Microsoft Entra ID Uygulama Kimliği ve X.509 sertifikası kullanacak şekilde yapılandırın. Daha fazla bilgi için bkz . Anahtarlar, gizli diziler ve sertifikalar hakkında.
Note
Azure'da barındırılan uygulamalar için Uygulama Kimliği ve X.509 sertifikası kullanılması desteklense de önerilmez. Bunun yerine, Azure'da bir uygulamayı barındırırken Azure kaynakları için Yönetilen kimlikleri kullanın. Yönetilen kimlikler için uygulamada veya Development ortamda sertifika depolanması gerekmez.
Örnek uygulama, en üstündeki #define önişlemci yönergesi Program.cs olarak ayarlandığında, bir Uygulama Kimliği ve X.509 sertifikası Certificate kullanır.
- PKCS#12 arşiv (.pfx) sertifikası oluşturun. Sertifika oluşturma seçenekleri Arasında Windows'ta New-SelfSignedCertificate ve OpenSSL bulunur.
- Sertifikayı geçerli kullanıcının kişisel sertifika deposuna yükleyin. Anahtarı dışarı aktarılabilir olarak işaretlemek isteğe bağlıdır. Bu işlemin ilerleyen bölümlerinde kullanılan sertifikanın parmak izini not edin.
- PKCS#12 arşiv (.pfx) sertifikasını DER ile kodlanmış sertifika (.cer) olarak dışarı aktarın.
- Uygulamayı Microsoft Entra ID (Uygulama kayıtları) ile kaydedin.
- DER ile kodlanmış sertifikayı (.cer) Microsoft Entra Id'ye yükleyin:
- Microsoft Entra Id'de uygulamayı seçin.
- Sertifikalar ve gizli anahtarlar'a
gidin. - Sertifikayı karşıya yükle seçeneğini seçin, bu işlem ortak anahtarı içeren sertifikayı karşıya yükleyecektir. .cer, .pem veya .crt sertifikası kabul edilebilir.
- Key Vault adını, Uygulama Kimliği'ni ve sertifika parmak izini uygulamanın
appsettings.jsondosyasında depolayın. - Azure portalında Key Vaults'a gidin.
- Azure Key Vault ile ortamında Gizli depolama alanında oluşturduğunuz
ProductionKey Vault'u seçin. - Erişim ilkeleri'ni seçin.
- Erişim İlkesi Ekle'yi seçin.
- Gizli izinleri açın ve uygulamaya Alma ve Listeleme izinlerini sağlayın.
- İlkeyi Seç ve kayıtlı uygulamayı ada göre seçin. Seçim düğmesini seçin.
- Tamam'ı seçin.
- Kaydetseçeneğini seçin.
- Uygulamayı dağıtın.
Örnek uygulama, yapılandırma değerlerini Certificate, sır adıyla aynı ada sahip IConfigurationRoot'den alır.
- Hiyerarşik olmayan değerler:
SecretNameiçin değerconfig["SecretName"]ile elde edilir. - Hiyerarşik değerler (bölümler):
:(iki nokta üst üste) gösterimini veya GetSection yöntemini kullanın. Yapılandırma değerini almak için şu yaklaşımlardan birini kullanın:config["Section:SecretName"]config.GetSection("Section")["SecretName"]
X.509 sertifikası işletim sistemi tarafından yönetilir. Uygulama, AddAzureKeyVault'yi appsettings.json dosyası tarafından sağlanan değerlerle çağırır.
// using System.Linq;
// using System.Security.Cryptography.X509Certificates;
// using Azure.Extensions.AspNetCore.Configuration.Secrets;
// using Azure.Identity;
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
if (context.HostingEnvironment.IsProduction())
{
var builtConfig = config.Build();
using var store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(
X509FindType.FindByThumbprint,
builtConfig["AzureADCertThumbprint"], false);
config.AddAzureKeyVault(new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
new ClientCertificateCredential(builtConfig["AzureADDirectoryId"], builtConfig["AzureADApplicationId"], certs.OfType<X509Certificate2>().Single()),
new KeyVaultSecretManager());
store.Close();
}
})
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
Örnek değerler:
- Key Vault adı:
contosovault - Uygulama kimliği:
00001111-aaaa-2222-bbbb-3333cccc4444 - Sertifika parmak izi:
fe14593dd66b2406c5269d742d04b6e1ab03adb1
appsettings.json:
{
"KeyVaultName": "Key Vault Name",
"AzureADApplicationId": "Azure AD Application ID",
"AzureADCertThumbprint": "Azure AD Certificate Thumbprint",
"AzureADDirectoryId": "Azure AD Directory ID"
}
Uygulamayı çalıştırdığınızda, bir web sayfası yüklenen gizli dizi değerlerini gösterir.
Development ortamında, gizli değerler _dev sonekiyle yüklenir.
Production ortamda değerler _prod sonekle birlikte yüklenir.
Azure kaynakları için yönetilen kimlikleri kullanma
Azure'a dağıtılan bir uygulama, Azure kaynakları için Yönetilen kimliklerden yararlanabilir. Yönetilen kimlik, uygulamanın kimlik bilgileri (Uygulama Kimliği ve Parola/İstemci Gizli Anahtarı) olmadan Microsoft Entra ID kimlik doğrulamasını kullanarak Azure Key Vault ile kimlik doğrulaması yapmasına olanak tanır.
En üstteki #define önişlemci yönergesi Program.cs olarak ayarlandığında, örnek uygulama Azure kaynakları için yönetilen kimlikleri kullanır.
Uygulamanın appsettings.json dosyasına kasa adını girin. Örnek uygulama, sürüme Managed ayarlandığında Bir Uygulama Kimliği ve Parola (İstemci Gizli Anahtarı) gerektirmez, bu nedenle bu yapılandırma girdilerini yoksayabilirsiniz. Uygulama Azure üzerinde dağıtılır ve Azure, yalnızca appsettings.json dosyasında saklanan kasa adını kullanarak Azure Key Vault'a erişmek için uygulamanın kimliğini doğrular.
Örnek uygulamayı Azure Uygulaması Hizmetine dağıtın.
Azure Uygulaması Hizmetine dağıtılan bir uygulama, hizmet oluşturulduğunda Microsoft Entra Id ile otomatik olarak kaydedilir. Aşağıdaki komutta kullanmak üzere dağıtımdan Nesne Kimliğini alın. Nesne Kimliği, App Service panelindeki Identity Azure portalında gösterilir.
Azure CLI ve uygulamanın Nesne Kimliği'ni kullanarak uygulamaya kasaya erişim izni sağlamak için list ve get izinleri verin.
az keyvault set-policy --name {KEY VAULT NAME} --object-id {OBJECT ID} --secret-permissions get list
Azure CLI, PowerShell veya Azure portalını kullanarak uygulamayı yeniden başlatın.
Örnek uygulama:
- DefaultAzureCredential sınıfının bir örneğini oluşturur. Kimlik bilgisi, Azure kaynakları için ortamdan erişim belirteci almayı dener.
-
SecretClient örneği ile yeni bir
DefaultAzureCredentialoluşturulur. - Bu
SecretClientörneği, gizli değerleri yükleyen ve anahtar adlarında çift tireleri (KeyVaultSecretManager) iki nokta (--) ile değiştiren bir:örnekle birlikte kullanılır.
// using Azure.Security.KeyVault.Secrets;
// using Azure.Identity;
// using Azure.Extensions.AspNetCore.Configuration.Secrets;
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
if (context.HostingEnvironment.IsProduction())
{
var builtConfig = config.Build();
var secretClient = new SecretClient(
new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential());
config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
}
})
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
Note
Yukarıdaki örnek, Azure barındırma ortamlarında kullanılan kimlik bilgilerini yerel geliştirmede kullanılan kimlik bilgileriyle birleştirerek Azure'a dağıtım yapan uygulamalar geliştirirken kimlik doğrulamasını basitleştirmek için kullanır DefaultAzureCredential . Üretime geçerken, ManagedIdentityCredential gibi bir alternatif daha iyi bir seçenektir. Daha fazla bilgi için bkz. Sistem tarafından atanan yönetilen kimliği kullanarak Azure kaynaklarına Azure tarafından barındırılan .NET uygulamalarının kimliğini doğrulama.
Key Vault adı örnek değeri: contosovault
appsettings.json:
{
"KeyVaultName": "Key Vault Name"
}
Uygulamayı çalıştırdığınızda, bir web sayfası yüklenen gizli dizi değerlerini gösterir.
Development Ortamda gizli değerler, Gizli Yönetici tarafından sağlandığı için _dev son eke sahiptir.
Production ortamında, değerler Azure Key Vault tarafından sağlandığı için _prod sonekiyle yüklenir.
Hata Access denied alırsanız, uygulamanın Microsoft Entra ID ile kaydedildiğini ve kasaya erişim izni verildiğini onaylayın. Hizmeti Azure'da yeniden başlattığınızdan emin olun.
Sağlayıcıyı yönetilen kimlik ve Azure Pipelines ile kullanma hakkında bilgi için bkz. yönetilen hizmet kimliğine sahip bir VM'ye Azure Resource Manager hizmet bağlantısı oluşturma .
Yapılandırma seçenekleri
AddAzureKeyVault bir AzureKeyVaultConfigurationOptions nesneyi kabul edebilir:
config.AddAzureKeyVault(
new SecretClient(
new Uri("Your Key Vault Endpoint"),
new DefaultAzureCredential(),
new AzureKeyVaultConfigurationOptions())
{
...
});
Note
Yukarıdaki örnek, Azure barındırma ortamlarında kullanılan kimlik bilgilerini yerel geliştirmede kullanılan kimlik bilgileriyle birleştirerek Azure'a dağıtım yapan uygulamalar geliştirirken kimlik doğrulamasını basitleştirmek için kullanır DefaultAzureCredential . Üretime geçerken, ManagedIdentityCredential gibi bir alternatif daha iyi bir seçenektir. Daha fazla bilgi için bkz. Sistem tarafından atanan yönetilen kimliği kullanarak Azure kaynaklarına Azure tarafından barındırılan .NET uygulamalarının kimliğini doğrulama.
AzureKeyVaultConfigurationOptions nesnesi aşağıdaki özellikleri içerir.
| Property | Description |
|---|---|
| Manager | KeyVaultSecretManager gizli yüklemeyi kontrol etmek için kullanılan örnek. |
| ReloadInterval |
TimeSpan kasadaki değişiklikleri yoklama girişimleri arasında beklemek için. Varsayılan değerdir null (yapılandırma yeniden yüklenmez). |
Anahtar adı ön eki kullanma
AddAzureKeyVault, Key Vault sırlarının yapılandırma anahtarlarına nasıl dönüştürüleceğini denetlemenize imkân tanıyan bir KeyVaultSecretManager gerçekleştirmesini kabul eden bir aşırı yükleme sağlar. Örneğin, uygulama başlangıcında sağladığınız bir ön ek değerine göre gizli değerleri yüklemek için arabirimi uygulayabilirsiniz. Bu teknik, örneğin uygulamanın sürümüne göre gizli verileri yüklemenizi sağlar.
Warning
Key Vault sırlarında aşağıdakiler için ön ek kullanmayın:
- Birden fazla uygulamanın gizli verilerini aynı kasada saklayın.
- Çevresel sırları (örneğin, geliştirme ve üretim sırları) aynı kasaya yerleştirin.
Farklı uygulamalar ve geliştirme/üretim ortamları, uygulama ortamlarını en yüksek güvenlik düzeyi için yalıtmak için ayrı Key Vault'lar kullanmalıdır.
Aşağıdaki örnekte, Key Vault'ta (ve ortam için Development Gizli Dizi Yöneticisi kullanılarak) (Key Vault gizli dizi adlarında dönemlere izin verilmez) için 5000-AppSecret bir gizli dizi oluşturulur. Bu gizli anahtar, uygulamanın 5.0.0.0 sürümü için uygulamanın gizli anahtarını temsil eder. Uygulamanın diğer bir sürümü olan 5.1.0.0 için 5100-AppSecret kasaya bir gizli anahtar eklenir (ve Gizli Dizi Yöneticisi kullanılarak). Her uygulama sürümü, sürümüne ait gizli değeri AppSecret olarak yapılandırmasına yükler ve gizli değeri yüklerken sürümü kaldırır.
AddAzureKeyVault özel KeyVaultSecretManager bir uygulamayla çağrılır:
config.AddAzureKeyVault(
$"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
builtConfig["AzureADApplicationId"],
certs.OfType<X509Certificate2>().Single(),
new PrefixKeyVaultSecretManager(versionPrefix));
Uygulama, yapılandırmaya uygun gizli anahtarı yüklemek için gizli anahtarların sürüm ön eklerine göre tepki verir.
-
Loadadı ön ek ile başladığında bir gizli dizi yükler. Diğer sırlar yüklenmedi. -
GetKey:- Gizli isimden ön eki kaldırır.
- Herhangi bir addaki iki tireyi, yapılandırmada kullanılan sınırlayıcı (genellikle iki nokta üst üste olan)
KeyDelimiterile değiştirir. Azure Key Vault gizli adlarında iki nokta izin vermez.
public class PrefixKeyVaultSecretManager : KeyVaultSecretManager
{
private readonly string _prefix;
public PrefixKeyVaultSecretManager(string prefix)
{
_prefix = $"{prefix}-";
}
public override bool Load(SecretProperties secret)
{
return secret.Name.StartsWith(_prefix);
}
public override string GetKey(KeyVaultSecret secret)
{
return secret.Name
.Substring(_prefix.Length)
.Replace("--", ConfigurationPath.KeyDelimiter);
}
}
Load yöntemi, sürüm ön ekli gizli dizileri bulmak için kasa gizli dizileri arasında yinelenen bir sağlayıcı algoritması tarafından çağrılır. Bir sürüm ön eki Load ile bulunduğunda, algoritma GetKey yöntemini kullanarak gizli adıyla ilgili yapılandırma adını döndürür. Sırrın adındaki sürüm ön ekini kaldırır. Gizli adın geri kalanı, uygulamanın yapılandırma ad-değer çiftlerine yüklenmek üzere döndürülür.
Bu yaklaşım uygulandığında:
Uygulamanın proje dosyasında belirtilen sürümü. Aşağıdaki örnekte, uygulamanın sürümü olarak
5.0.0.0ayarlanmıştır:<PropertyGroup> <Version>5.0.0.0</Version> </PropertyGroup>Uygulamanın proje dosyasında,
<UserSecretsId>kullanıcı tarafından sağlanan bir GUID olan{GUID}özelliğinin bulunduğunu onaylayın.<PropertyGroup> <UserSecretsId>{GUID}</UserSecretsId> </PropertyGroup>Aşağıdaki gizli bilgileri yerel olarak Gizli Yönetici ile kaydedin:
dotnet user-secrets set "5000-AppSecret" "5.0.0.0_secret_value_dev" dotnet user-secrets set "5100-AppSecret" "5.1.0.0_secret_value_dev"Gizliler, Azure Key Vault'a aşağıdaki Azure CLI komutları kullanılarak kaydedilir:
az keyvault secret set --vault-name {KEY VAULT NAME} --name "5000-AppSecret" --value "5.0.0.0_secret_value_prod" az keyvault secret set --vault-name {KEY VAULT NAME} --name "5100-AppSecret" --value "5.1.0.0_secret_value_prod"Uygulama çalıştırıldığında Key Vault gizli anahtarları yüklenir.
5000-AppSecretiçin olan dizenin gizli anahtarı, uygulamanın proje dosyasında belirtilen (5.0.0.0) sürümle eşleşecek şekilde ayarlanır.Sürüm, (
5000ile birlikte tire), anahtar adından çıkarılır. Uygulama genelinde,AppSecretanahtarını kullanarak okuma işlemi, gizli değeri yükler.Uygulamanın sürümü proje dosyasında
5.1.0.0olarak değiştirilirse ve uygulama yeniden çalıştırılırsa, döndürülen gizli değer,5.1.0.0_secret_value_devortamındaDevelopmentve5.1.0.0_secret_value_prodortamındaProductionolur.
Note
kendi SecretClient uygulamanızı AddAzureKeyVault gerçekleştirebilirsiniz. Özel istemci, istemcinin tek bir örneğinin uygulama genelinde paylaşılmasına izin verir.
Bir diziyi sınıfa bağlama
Sağlayıcı, POCO dizisine bağlamak için konfigürasyon değerlerini bir diziye okuyabilir.
Anahtarların iki nokta (:) ayırıcıları içermesine izin veren bir yapılandırma kaynağından okurken, bir diziyi oluşturan anahtarları (:0:, :1:, ... :{n}:) ayırt etmek için sayısal bir anahtar kesimi kullanılır. Daha fazla bilgi için bkz . Yapılandırma: Diziyi bir sınıfa bağlama.
Azure Key Vault anahtarları ayırıcı olarak "iki nokta" (:) kullanamaz. Bu makalede açıklanan yaklaşım, hiyerarşik değerler (bölümler) için ayırıcı olarak çift tireler (--) kullanır. Dizi anahtarları, Azure Key Vault'ta çift tireler ve sayısal anahtar kesimleri (--0--, --1--, ... --{n}--) ile depolanır.
Bir JSON dosyası tarafından sağlanan aşağıdaki Serilog günlüğü sağlayıcısı yapılandırmasını inceleyin. Dizide, günlüğe kaydetme çıkışına yönelik hedefleri açıklayan iki Serilog WriteTo yansıtan iki nesne değişmez değeri tanımlanmıştır.
"Serilog": {
"WriteTo": [
{
"Name": "AzureTableStorage",
"Args": {
"storageTableName": "logs",
"connectionString": "DefaultEnd...ountKey=Eby8...GMGw=="
}
},
{
"Name": "AzureDocumentDB",
"Args": {
"endpointUrl": "https://contoso.documents.azure.com:443",
"authorizationKey": "Eby8...GMGw=="
}
}
]
}
Yukarıdaki JSON dosyasında gösterilen yapılandırma, çift tire (--) gösterimi ve sayısal kesimler kullanılarak Azure Key Vault'ta depolanır:
| Key | Value |
|---|---|
Serilog--WriteTo--0--Name |
AzureTableStorage |
Serilog--WriteTo--0--Args--storageTableName |
logs |
Serilog--WriteTo--0--Args--connectionString |
DefaultEnd...ountKey=Eby8...GMGw== |
Serilog--WriteTo--1--Name |
AzureDocumentDB |
Serilog--WriteTo--1--Args--endpointUrl |
https://contoso.documents.azure.com:443 |
Serilog--WriteTo--1--Args--authorizationKey |
Eby8...GMGw== |
Gizli verileri yeniden yükle
Gizliler IConfigurationRoot.Reload çağrılana kadar önbelleğe alınır. Daha sonra kasada devre dışı bırakılan veya güncelleştirilen gizli anahtarlar Reload çalıştırılana kadar uygulama tarafından dikkate alınmıyor.
Configuration.Reload();
Devre dışı bırakılmış ve süresi dolmuş gizli anahtarlar
Süresi dolmuş gizli veriler varsayılan olarak yapılandırma sağlayıcısına eklenir. Uygulama yapılandırmasında bu gizli dizilerin değerlerini dışlamak için süresi dolan gizli diziyi güncelleştirin veya özel bir yapılandırma sağlayıcısı kullanarak yapılandırmayı sağlayın:
class SampleKeyVaultSecretManager : KeyVaultSecretManager
{
public override bool Load(SecretProperties properties) =>
properties.ExpiresOn.HasValue &&
properties.ExpiresOn.Value > DateTimeOffset.Now;
}
Bu özel öğeyi KeyVaultSecretManager ' ye geçirin AddAzureKeyVault:
// using Azure.Extensions.AspNetCore.Configuration.Secrets;
config.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(),
new SampleKeyVaultSecretManager());
Devre dışı bırakılan gizli anahtarlar Key Vault'tan alınamaz ve hiçbir şekilde dahil edilmez.
Note
Yukarıdaki örnek, Azure barındırma ortamlarında kullanılan kimlik bilgilerini yerel geliştirmede kullanılan kimlik bilgileriyle birleştirerek Azure'a dağıtım yapan uygulamalar geliştirirken kimlik doğrulamasını basitleştirmek için kullanır DefaultAzureCredential . Üretime geçerken, ManagedIdentityCredential gibi bir alternatif daha iyi bir seçenektir. Daha fazla bilgi için bkz. Sistem tarafından atanan yönetilen kimliği kullanarak Azure kaynaklarına Azure tarafından barındırılan .NET uygulamalarının kimliğini doğrulama.
Troubleshoot
Uygulama sağlayıcıyı kullanarak yapılandırmayı yükleyemezse ASP.NET Çekirdek Günlüğü altyapısına bir hata iletisi yazılır. Aşağıdaki koşullar yapılandırmanın yüklenmesini engeller:
- Uygulama veya sertifika Microsoft Entra Id'de doğru yapılandırılmamış.
- Azure Key Vault'ta depo bulunmamaktadır.
- Uygulamanın kasaya erişme yetkisi yoktur.
- Erişim ilkesi
GetveListizinlerini içermez. - Kasada yapılandırma verileri (ad-değer çifti) yanlış adlandırılmış, eksik veya devre dışı bırakılmış.
- Uygulama yanlış Key Vault adına (
KeyVaultName), Microsoft Entra ID Uygulama Kimliğine (AzureADApplicationId) veya Microsoft Entra Id sertifikası parmak izine (AzureADCertThumbprint) veya Microsoft Entra Id Dizin Kimliğine (AzureADDirectoryId) sahip. - Uygulama için Key Vault erişim ilkesi eklenirken ilke oluşturuldu, ancak Erişim ilkeleri kullanıcı arabiriminde Kaydet düğmesi seçilmedi.
Ek kaynaklar
- Örnek kodu görüntüleme veya indirme (indirme)
- ASP.NET Core'da yapılandırma
- Microsoft Azure: Key Vault Belgeleri
- Azure Key Vault için HSM korumalı anahtarlar oluşturma ve aktarma
- Hızlı Başlangıç: .NET web uygulaması kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma
- Öğretici: .NET'te Azure Windows Sanal Makinesi ile Azure Key Vault kullanma
ASP.NET Core