ASP.NET Core Azure Key Vault yapılandırma sağlayıcısı
Bu belgede, uygulama yapılandırma değerlerini Azure Key Vault gizliliklerden 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 anahtarların korunmasına yardımcı olan bulut tabanlı bir hizmettir. ASP.NET Core uygulamalarla Azure 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 tarafından doğrulanan donanım güvenlik modülleri (HSM 'ler) için gereksinimi toplantısı.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Paketler
Aşağıdaki paketler için paket başvuruları ekleyin:
Örnek uygulama
Örnek uygulama, #define program. cs' nin en üstündeki Önişlemci yönergesi tarafından belirlenen iki moddan birinde çalışır:
Certificate: Azure Key Vault depolanan gizli dizileri erişmek için bir Azure Key Vault Istemci KIMLIĞI ve X. 509.440 sertifikası kullanmayı gösterir. bu örnek, Azure App Service veya ASP.NET Core uygulamasına dağıtılan herhangi bir konağa dağıtılan herhangi bir konumdan çalıştırılabilir.Managed: Azure kaynakları Için yönetilen kimliklerinnasıl kullanılacağını gösterir. yönetilen kimlik, uygulamanın kodunda veya yapılandırmasında depolanan kimlik bilgileri olmadan Azure Active Directory (AD) kimlik doğrulamasıyla Azure Key Vault için uygulamanın kimliğini doğrular. Kimlik doğrulaması için Yönetilen kimlikler kullanıldığında, bir Azure AD uygulama KIMLIĞI ve parolası (gizli anahtar) gerekli değildir.ManagedÖrneğin sürümünün Azure 'a dağıtılması gerekir. Azure kaynakları için Yönetilen kimlikler bölümünü kullanma bölümündeki yönergeleri izleyin.
Önişlemci yönergeleri () kullanarak örnek bir uygulama yapılandırma hakkında daha fazla bilgi için #define bkz ASP.NET Core’a Giriş ..
Geliştirme ortamında gizli dizi
Gizli dizi Yöneticisikullanarak gizli dizileri ayarlayın. Örnek uygulama, geliştirme ortamındaki yerel makinede çalıştığında, gizlilikler yerel kullanıcı gizli dizileri deposundan yüklenir.
Gizli dizi Yöneticisi <UserSecretsId> , uygulamanın proje dosyasında bir özellik gerektirir. Özellik değerini ( {GUID} ) herhangi bir BENZERSIZ GUID 'ye ayarlayın:
<PropertyGroup>
<UserSecretsId>{GUID}</UserSecretsId>
</PropertyGroup>
Gizlilikler ad-değer çiftleri olarak oluşturulur. hiyerarşik değerler (yapılandırma bölümleri) : ASP.NET Core yapılandırma anahtarı adlarında ayırıcı olarak bir (iki nokta üst üste) kullanır.
Gizli dizi, projenin içerik köküneaçılan bir komut kabuğundan kullanılır; burada {SECRET NAME} ad ve {SECRET VALUE} değerdir:
dotnet user-secrets set "{SECRET NAME}" "{SECRET VALUE}"
Örnek uygulamanın gizli dizilerini ayarlamak için, projenin içerik kökünden bir komut kabuğu 'nda 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 gizlilikler, Azure Key Vault bölümündeki üretim ortamındaki gizli depolama alanında Azure Key Vault depolandığında, _dev sonek olarak değiştirilir _prod . Sonek, uygulamanın çıktısında yapılandırma değerlerinin kaynağını gösteren bir görsel ipucu sağlar.
Azure Key Vault ile üretim ortamında gizli dizi
Azure Key Vault oluşturmak ve örnek uygulamanın gizli dizilerini depolamak için aşağıdaki adımları izleyin. Daha fazla bilgi için bkz. hızlı başlangıç: Azure CLI kullanarak Azure Key Vault bir gizli dizi ayarlama ve alma.
Azure Portalaşağıdaki yöntemlerden birini kullanarak Azure Cloud Shell açın:
- Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Metin kutusunda "Azure CLı" arama dizesini kullanın.
- Cloud Shell Başlat düğmesini kullanarak tarayıcınızda Cloud Shell açın.
- Azure portal sağ üst köşesindeki menüdeki Cloud Shell düğmesini seçin.
Daha fazla bilgi için bkz. Azure CLI ve Azure Cloud Shell Genel Bakış.
Henüz kimlik doğrulamasından geçirilmemişse komutuyla oturum açın
az login.Aşağıdaki komutla,
{RESOURCE GROUP NAME}Yeni kaynak grubunun adı ve Azure bölgesi olan bir kaynak grubu oluşturun{LOCATION}:az group create --name "{RESOURCE GROUP NAME}" --location {LOCATION}Aşağıdaki komutla kaynak grubunda bir Anahtar Kasası oluşturun; burada
{KEY VAULT NAME}Yeni anahtar kasasının adı ve{LOCATION}Azure bölgesi bulunur:az keyvault create --name {KEY VAULT NAME} --resource-group "{RESOURCE GROUP NAME}" --location {LOCATION}Anahtar kasasında ad-değer çiftleri olarak gizli diziler oluşturun.
Azure Key Vault gizli dizi adları, alfasayısal karakterler ve tireler ile sınırlıdır. Hiyerarşik değerler (yapılandırma bölümleri)
--sınırlayıcı olarak (iki tire) kullanır ve Anahtar Kasası gizli adlarında iki nokta üst üste izin verilmez. iki nokta üst üste ASP.NET Core yapılandırmasındakibir alt anahtardan bir bölümü sınırlandırın. İki Dash sırası, parolaların uygulamanın yapılandırmasına yüklendiği zaman iki nokta ile değiştirilmiştir.Aşağıdaki gizlilikler örnek uygulamayla kullanım içindir. Değerler,
_prod_devgizli yöneticisinden geliştirme ortamında yüklenen sonek değerlerinden ayırt etmek için bir sonek içerir.{KEY VAULT NAME}Önceki adımda 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 uygulamalar için uygulama KIMLIĞI ve X. 509.440 sertifikası kullanın
Uygulama Azure dışında barındırıldığı zaman bir anahtar kasasında kimlik doğrulaması yapmak için Azure ad, Azure Key Vault ve uygulamayı Azure AD uygulama kimliği ve X. 509.952 sertifikası kullanacak şekilde yapılandırın. Daha fazla bilgi için bkz. anahtarlar, gizlilikler ve sertifikalar hakkında.
Not
Azure 'da barındırılan uygulamalar için uygulama KIMLIĞI ve X. 509.440 sertifikası kullanılması önerilse de önerilmez. Bunun yerine, Azure 'da bir uygulamayı barındırırken Azure kaynakları Için Yönetilen kimlikler kullanın. Yönetilen kimlikler, uygulamada veya geliştirme ortamında bir sertifikanın depolanmasını gerektirmez.
Örnek uygulama, #define program. cs ' nin en üstündeki ön işlemci yönergesi olarak AYARLANDıĞıNDA bir uygulama kimliği ve X. 509.440 sertifikası kullanır Certificate .
- PKCS # 12 Arşivi (. pfx) sertifikası oluşturun. sertifika oluşturma seçenekleri Windows ve openssl üzerinde MakeCert içerir.
- Sertifikayı geçerli kullanıcının kişisel sertifika deposuna yükler. Anahtarı verilebilir olarak işaretlemek isteğe bağlıdır. Sertifikanın daha sonra bu işlemde kullanılan parmak izini aklınızda bulunur.
- PKCS # 12 Arşivi (. pfx) sertifikasını der kodlu bir sertifika (. cer) olarak dışarı aktarın.
- Uygulamayı Azure AD 'ye kaydedin (uygulama kayıtları).
- DER kodlu sertifikayı (. cer) Azure AD 'ye Upload:
- Azure AD 'de uygulamayı seçin.
- Sertifikalar & gizli dizi sayfasına gidin.
- sertifikayı karşıya yüklemek için ortak anahtarı içeren Upload sertifika ' nı seçin. . Cer, . pek veya . CRT sertifikası kabul edilebilir.
- Anahtar Kasası adı, uygulama KIMLIĞI ve sertifika parmak izini uygulamanın appsettings.json dosyasına depolayın.
- Azure portal ana kasaları ' ne gidin.
- Azure Key Vault bölümünde, üretim ortamındaki gizli dizi altında oluşturduğunuz anahtar kasasını seçin.
- Erişim ilkeleri'ni seçin.
- Erişim Ilkesi Ekle' yi seçin.
- Gizli izinleri açın ve uygulamaya Get ve list izinleri sağlayın.
- Sorumlu Seç ' i seçin ve kayıtlı uygulamayı ada göre seçin. Seç düğmesini belirleyin.
- Tamam’ı seçin.
- Kaydet’i seçin.
- Uygulamayı dağıtın.
CertificateÖrnek uygulama, yapılandırma değerlerini, IConfigurationRoot parola adı ile aynı adla alır:
- Hiyerarşik olmayan değerler: için değeri
SecretNameile elde edilirconfig["SecretName"]. - Hiyerarşik değerler (bölümler):
:(iki nokta üst üste) gösterimini veyaGetSectiongenişletme yöntemini kullanın. Yapılandırma değerini elde etmek için şu yaklaşımlardan birini kullanın:config["Section:SecretName"]config.GetSection("Section")["SecretName"]
X. 509.440 sertifikası işletim sistemi tarafından yönetiliyor. Uygulama AddAzureKeyVault , dosya tarafından sağlanan değerlerle çağırır appsettings.json :
// 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:
- Anahtar Kasası adı:
contosovault - Uygulama KIMLIĞI:
627e911e-43cc-61d4-992e-12db9c81b413 - 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 değerleri gösterir. Geliştirme ortamında, gizli anahtar değerleri sonek ile yüklenir _dev . Üretim ortamında, değerler sonek ile yüklenir _prod .
Azure kaynakları için yönetilen kimlikleri kullanma
Azure 'a dağıtılan bir uygulama , Azure kaynakları için yönetilen kimliklerdenyararlanabilir. Yönetilen bir kimlik, uygulamanın Azure AD kimlik doğrulamasını kullanarak Azure Key Vault kimlik doğrulaması yapmasına izin verir (uygulama KIMLIĞI ve parola/Istemci gizli anahtarı).
Örnek uygulama, Program.cs'nin üst kısmında önişlemci yönergesi olarak ayarlanırken Azure kaynakları #define için yönetilen kimlikleri Managed kullanır.
Uygulamanın dosyasına kasa adını appsettings.json girin. Örnek uygulama, sürüme ayarlanırken Uygulama Kimliği ve Parola (gizli dizi) gerektirmez, bu nedenle bu yapılandırma Managed girişlerini yoksayabilirsiniz. Uygulama Azure'a dağıtılır ve Azure yalnızca dosyada depolanan kasa adını Azure Key Vault erişim için uygulamanın kimliğini appsettings.json doğrular.
Örnek uygulamayı Azure App Service.
Azure App Service dağıtılan bir uygulama, hizmet oluşturulduğunda Azure AD'ye otomatik olarak kaydedilir. Aşağıdaki komutta kullanmak üzere dağıtımdan Nesne Kimliğini alın. Nesne Kimliği, Azure portal panelinin Identity App Service.
Azure CLI ve uygulamanın Nesne Kimliğini kullanarak, uygulamaya anahtar kasasına list erişmek için ve izinleri get verin:
az keyvault set-policy --name {KEY VAULT NAME} --object-id {OBJECT ID} --secret-permissions get list
Azure CLI, PowerShell veya Azure portal.
Örnek uygulama:
- DefaultAzureCredential sınıfının bir örneğini oluşturur. Kimlik bilgisi, Azure kaynakları için ortamdan erişim belirteci alma girişiminde bulundu.
- Örneğiyle SecretClient yeni bir
DefaultAzureCredentialoluşturulur. - Örneği, gizli değerleri yüken ve anahtar adlarında iki tire ( ) yerine iki nokta üst üste ( ) alan
SecretClientKeyVaultSecretManagerbir--:örnekle 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>());
Anahtar kasası adı örnek değeri: contosovault
appsettings.json:
{
"KeyVaultName": "Key Vault Name"
}
Uygulamayı çalıştırsanız, web sayfası yüklenen gizli dizi değerlerini gösterir. Geliştirme ortamında gizli değerler Gizli Gizli Yönetici _dev tarafından sağlandıkları için son eke sahiptir. Üretim ortamında değerler, son ek ile birlikte yük dengeleme _prod Azure Key Vault.
Hata Access denied alırsanız, uygulamanın Azure AD'ye kayıtlı olduğunu ve anahtar kasasına erişim sağladığını onaylayın. Azure'da hizmeti yeniden başlatmış olduğunu onaylayın.
Sağlayıcıyı yönetilen kimlikle ve yönetilen kimlikle kullanma hakkında Azure Pipelines için bkz. Yönetilen hizmet Azure Resource Manager vm'ye bir hizmet bağlantısı oluşturma.
Yapılandırma seçenekleri
AddAzureKeyVault bir nesneyi kabul AzureKeyVaultConfigurationOptions eder:
config.AddAzureKeyVault(
new SecretClient(
new Uri("Your Key Vault Endpoint"),
new DefaultAzureCredential()),
new AzureKeyVaultConfigurationOptions())
{
...
});
nesnesi AzureKeyVaultConfigurationOptions aşağıdaki özellikleri içerir.
| Özellik | Açıklama |
|---|---|
| Manager | IKeyVaultSecretManager gizli yüklemeyi kontrol etmek için kullanılan örnek. |
| ReloadInterval | TimeSpan anahtar kasasını yoklama girişimleri arasında değişiklik bekleme. Varsayılan değerdir null (yapılandırma yeniden yüklenmez). |
Anahtar adı ön eki kullanma
AddAzureKeyVault , bir uygulamasını kabul eden ve anahtar kasası gizli dizilerinin yapılandırma anahtarlarına nasıl dönüştürüleceklerini denetlemeye olanak IKeyVaultSecretManager sağlayan bir aşırı yükleme sağlar. Örneğin, uygulama başlangıcındaki ön ek değerine göre gizli değerleri yüklemek için arabirimini kullanabilirsiniz. Bu teknik, örneğin uygulamanın sürümüne göre gizli dizileri yüklemene olanak sağlar.
Uyarı
Anahtar kasası gizli dizileri üzerinde ön ekleri kullanarak şunların için kullanın:
- Birden çok uygulamanın gizli dizilerini aynı kasaya yer verin.
- Ortam gizli dizilerini (örneğin, geliştirme ve üretim gizli dizileri) aynı kasaya yer.
Farklı uygulamalar ve geliştirme/üretim ortamları, uygulama ortamlarını en yüksek güvenlik düzeyine göre yalıtmak için ayrı anahtar kasaları kullandırabilir.
Aşağıdaki örnekte, anahtar kasasında (ve Geliştirme ortamı için Gizli Anahtar Yöneticisi kullanılarak) için bir gizli anahtar (anahtar kasası gizli anahtar adlarında dönemlere izin verilmez) 5000-AppSecret oluşturulmaktadır. Bu gizli, uygulamanın 5.0.0.0 sürümü için bir uygulama gizli dır. Uygulamanın başka bir sürümü olan 5.1.0.0 için, için anahtar kasasına bir gizli anahtar eklenir (ve Gizli Anahtar Yöneticisi 5100-AppSecret kullanılarak). Her uygulama sürümü, sürümüne sahip gizli anahtarı olarak yapılandırmasına yükler AppSecret ve gizli anahtarı yüklerken sürümü çıkarır.
AddAzureKeyVault özel bir uygulama ile IKeyVaultSecretManager çağrılır:
config.AddAzureKeyVault(
$"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
builtConfig["AzureADApplicationId"],
certs.OfType<X509Certificate2>().Single(),
new PrefixKeyVaultSecretManager(versionPrefix));
Uygulama, uygun gizli diziyi yapılandırmaya yüklemek için gizli dizilerin sürüm ön eklerine tepki gösterir:
Load, adı ön ekle başladığında bir gizli kod yükler. Diğer gizli diziler yüklenmez.GetKey:- Gizli addan ön eki kaldırır.
- Herhangi bir adda bulunan iki tireyi, yapılandırmada kullanılan sınırlayıcı olan (genellikle iki nokta üst
KeyDelimiterüste) ile değiştirir. Azure Key Vault gizli adlarda iki nokta üst üste 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);
}
}
yöntemi, sürüm ön ekli gizli dizileri bulmak için kasa gizli dizileri aracılığıyla Load devam eden bir sağlayıcı algoritması tarafından çağrılır. ile bir sürüm ön eki Load bulunursa algoritma, gizli anahtarın yapılandırma GetKey adını dönmek için yöntemini kullanır. Gizli adın sürüm ön eklerini kaldırır. Gizli anahtarın geri kalanı uygulamanın yapılandırma adı-değer çiftlerine yüklenmesi için döndürülür.
Bu yaklaşım uygulanırken:
Uygulamanın proje dosyasında belirtilen sürümü. Aşağıdaki örnekte, uygulamanın sürümü olarak
5.0.0.0ayarlanır:<PropertyGroup> <Version>5.0.0.0</Version> </PropertyGroup>Uygulamanın
<UserSecretsId>proje dosyasında bir özelliğin mevcut olduğunu onaylayın;{GUID}burada, kullanıcı tarafından sağlanan BIR GUID'tir:<PropertyGroup> <UserSecretsId>{GUID}</UserSecretsId> </PropertyGroup>Gizli Dizi Yöneticisi ile aşağıdaki gizli dizileri 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"Gizli diziler Azure Key Vault 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 yüklendiğinde anahtar kasası gizli dizileri yüklenir. dizesi gizli
5000-AppSecretdizisi, uygulamanın proje dosyasında () belirtilen uygulama sürümüyle5.0.0.0eştir.Sürüm
5000( tire ile) anahtar addan çıkarılmış. Uygulama boyunca anahtarla yapılandırmayı okumakAppSecretgizli anahtar değerini yükler.Uygulamanın sürümü proje dosyasında olarak değiştirilirse ve uygulama yeniden çalıştır olursa, döndürülen gizli değer Geliştirme ortamında ve
5.1.0.05.1.0.0_secret_value_dev5.1.0.0_secret_value_prodÜretim'de olur.
Not
Ayrıca, uygulamasına kendi SecretClient uygulamalarınızı da s hizmetleriniz için SSS'ye SSS'ye 20122' AddAzureKeyVault Özel istemci, uygulama genelinde istemcinin tek bir örneğini paylaşmaya izin sağlar.
Bir diziyi bir sınıfa bağlama
Sağlayıcı, poCO dizisine bağlama için yapılandırma 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 ( , , ) ayıran anahtarları ayırt etmek için sayısal bir anahtar : :0: kesimi :1: … :{n}: kullanılır. Daha fazla bilgi için bkz. Yapılandırma: Bir diziyi sınıfına bağlama.
Azure Key Vault anahtarları ayırıcı olarak iki nokta üst üste kullanamayr. Bu belgede açıklanan yaklaşım, hiyerarşik değerler (bölümler) için ayırıcı olarak çift tire -- ( ) kullanır. Dizi anahtarları, çift Azure Key Vault ve sayısal anahtar segmentleri ( , , ) ile birlikte --0-- --1-- … --{n}-- depolanır.
Bir JSON dosyası tarafından sağlanan aşağıdaki Serilog günlük sağlayıcısı yapılandırmasını inceleme. Dizide tanımlanan ve günlük çıkışı hedeflerini açıklayan iki Serilog havuzu yansıtan WriteTo iki nesne değişmez değer vardı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=="
}
}
]
}
Önceki JSON dosyasında gösterilen yapılandırma, çift kısa çizgi ( ) Azure Key Vault ve sayısal -- kesimler kullanılarak bir dosyada depolanır:
| Anahtar | Değer |
|---|---|
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 dizileri yeniden yükleme
Gizli diziler çağrılana kadar IConfigurationRoot.Reload() önbelleğe alınmış olur. Anahtar kasasında süresi dolan, devre dışı bırakılmış ve güncelleştirilmiş gizli diziler yürütülene kadar uygulama Reload tarafından kabul olmaz.
Configuration.Reload();
Devre dışı bırakılmış ve süresi dolmuş gizli diziler
Devre dışı bırakılmış ve süresi dolmuş gizli diziler bir RequestFailedException atar. Uygulamanın atması önlemek için, farklı bir yapılandırma sağlayıcısı kullanarak yapılandırmayı silebilir veya devre dışı bırakılmış veya süresi dolmuş gizli anahtarı güncelleştirebilirsiniz.
Sorun giderme
Uygulama sağlayıcıyı kullanarak yapılandırmayı yükleyemezse, günlük altyapısına ASP.NET Core yazılır. Aşağıdaki koşullar yapılandırmanın yüklenmesini önlemektedir:
- Uygulama veya sertifika Azure AD'de doğru yapılandırılmamış.
- Anahtar kasası, anahtar kasasında Azure Key Vault.
- Uygulamanın anahtar kasasına erişme yetkisi yok.
- Erişim ilkesi ve
GetizinleriniListiçermez. - Anahtar kasasında yapılandırma verileri (ad-değer çifti) yanlış adlandırılmış, eksik, devre dışı veya süresi dolmuş.
- Uygulamanın anahtar kasası adı ( ), Azure AD Uygulama Kimliği ( ) veya Azure AD sertifika parmak izi
KeyVaultName( ) veya Azure AD Dizin Kimliği ( )AzureADApplicationIdAzureADCertThumbprintAzureADDirectoryIdyanlış. - Uygulamaya yüklenmeye çalıştığınız değer için yapılandırma anahtarı (ad) yanlış.
- Uygulama için anahtar kasası erişim ilkesi eklerken ilke oluşturuldu, ancak Erişim ilkeleri kullanıcı arabiriminde Kaydet düğmesi seçilmedi.
Ek kaynaklar
- ASP.NET Core'de yapılandırma
- Microsoft Azure: Key Vault Belgeleri
- Azure Key Vault için HSM korumalı anahtarlar oluşturma ve Azure Key Vault
- Hızlı Başlangıç: .NET web uygulaması kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma
- Öğretici: .NET'Azure Key Vault Azure Windows Sanal Makinesi ile sanal makineleri kullanma
Bu belgede, gizli dizilerden uygulama Microsoft Azure Key Vault yüklemek için Azure Key Vault açıklar. Azure Key Vault, uygulamalar ve hizmetler tarafından kullanılan şifreleme anahtarlarının ve gizli dizilerin korunmasına yardımcı olan bulut tabanlı bir hizmettir. ASP.NET Core uygulamalarıyla Azure Key Vault yaygın ASP.NET Core 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.
Örnek kodu görüntüleme veya indirme ( nasılindir)
Paketler
Microsoft.Extensions.Configuration.AzureKeyVault paketine bir paket başvurusu ekleyin.
Örnek uygulama
Örnek uygulama, Program.cs'nin üst kısmında bulunan önişlemci yönergesi tarafından belirlenen #define iki moddan birini çalıştırır:
Certificate: Azure Key Vault'de depolanan gizli dizilere erişmek için Azure Key Vault İstemci Kimliği ve X.509 sertifikası Azure Key Vault. Bu örnek, uygulamanın bir uygulama için hizmet Azure App Service herhangi bir ana bilgisayar için dağıtıldığında herhangi bir konumdan ASP.NET Core olabilir.Managed: Uygulamanın kodunda veya yapılandırmasında depolanan kimlik bilgileri olmadan Azure Key Vault Azure Active Directory (AD) kimlik doğrulaması ile kimlik doğrulaması yapmak için Azure kaynakları için Yönetilen kimlikleri kullanmayı gösterir. Kimlik doğrulaması için yönetilen kimlikler kullanırken Azure AD Uygulama Kimliği ve Parolası (Gizli Anahtar) gerekli değildir.ManagedÖrneğin sürümü Azure'a dağıtılacaktır. Azure kaynakları için yönetilen kimlikleri kullanma bölümündeki yönergeleri izleyin.
Önişlemci yönergelerini kullanarak örnek bir uygulamayı yapılandırma hakkında daha fazla bilgi için #define bkz. ASP.NET Core’a Giriş .
Geliştirme ortamında gizli depolama
Gizli Dizi Yöneticisi'ni kullanarak gizli dizileri yerel olarak ayarlayın. Örnek uygulama Geliştirme ortamındaki yerel makinede çalıştırıldıklarında, gizli diziler yerel kullanıcı gizli dizileri deposuna yüklenir.
Gizli Gizli <UserSecretsId> Yönetici, uygulamanın proje dosyasında bir özellik gerektirir. Özellik değerini ( {GUID} ) herhangi bir benzersiz GUID olarak ayarlayın:
<PropertyGroup>
<UserSecretsId>{GUID}</UserSecretsId>
</PropertyGroup>
Gizli diziler ad-değer çiftleri olarak oluşturulur. Hiyerarşik değerler (yapılandırma bölümleri), yapılandırma anahtarı adlarında ayırıcı olarak bir : (ASP.NET Core) kullanır.
Secret Manager, projenin içerik köküne açılan bir komut kabuğundan kullanılır;burada {SECRET NAME} ad ve {SECRET VALUE} değeridir:
dotnet user-secrets set "{SECRET NAME}" "{SECRET VALUE}"
Örnek uygulamanın gizli dizilerini 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 diziler Azure Key Vault üretim ortamındaki Gizli Dizi depolama Azure Key Vault depolandığı zaman, _dev soneki olarak _prod değiştirilir. Son ek, uygulamanın çıkışında yapılandırma değerlerinin kaynağını gösteren görsel bir ipucu sağlar.
Azure Key Vault ile Üretim ortamında gizli Azure Key Vault
Hızlı Başlangıç: Azure CLI kullanarak Azure Key Vault gizli dizi ayarlama ve alma yönergeleri, Azure Key Vault oluşturmak ve örnek uygulama tarafından kullanılan gizli dizileri depolamak için burada özetlenmiştir.
dosya Azure Cloud Shell aşağıdaki yöntemlerden birini kullanarak Azure portal:
- Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Metin kutusunda "Azure CLI" arama dizesini kullanın.
- Uygulamayı Cloud Shell başlat düğmesiyle tarayıcınızda Cloud Shell açın.
- Giriş Cloud Shell sağ üst köşesindeki menüde yer alan Azure portal.
Daha fazla bilgi için bkz. Azure CLI veAzure Cloud Shell.
Henüz kimliği doğrulanmadıysanız komutuyla oturum
az loginaçma.Aşağıdaki komutla bir kaynak grubu oluşturun; burada yeni kaynak grubunun
{RESOURCE GROUP NAME}adı ve{LOCATION}Azure bölgesidir:az group create --name "{RESOURCE GROUP NAME}" --location {LOCATION}Kaynak grubunda aşağıdaki komutla bir anahtar kasası oluşturun; burada yeni
{KEY VAULT NAME}anahtar kasasının adıdır ve{LOCATION}Azure bölgesidir:az keyvault create --name {KEY VAULT NAME} --resource-group "{RESOURCE GROUP NAME}" --location {LOCATION}Anahtar kasasında gizli dizileri ad-değer çiftleri olarak oluşturun.
Azure Key Vault adları alfasayısal karakterler ve tirelerle sınırlıdır. Hiyerarşik değerler (yapılandırma bölümleri), sınırlayıcı olarak (iki tire) kullanır çünkü anahtar kasası gizli anahtar adlarında iki nokta üst
--üste kullanmasına izin verilmez. İki nokta üst üste, yapılandırmada bir alt anahtardan ASP.NET Core sınırlar. İki tire dizisi, gizli diziler uygulamanın yapılandırmasına yüklendiğinde iki nokta üst üste ile değiştirilir.Aşağıdaki gizli diziler örnek uygulamayla birlikte kullanım içindir. Değerler, Geliştirme ortamında Secret Manager'dan yüklenen sonek değerlerinden ayırt etmek için
_prod_devbir sonek içerir. yerine{KEY VAULT NAME}önceki adımda oluşturduğunuz anahtar kasasının adını yazın: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 uygulamalar için Uygulama Kimliği ve X.509 sertifikasını kullanma
Azure AD, Azure Key Vault ve uygulamayı Azure AD Uygulama Kimliği ve X.509 sertifikasını kullanarak uygulama Azure dışında barındırıldığında bir anahtar kasasında kimlik doğrulaması yapmak üzere yapılandırma. Daha fazla bilgi için bkz. Anahtarlar, gizli diziler ve sertifikalar hakkında.
Not
Azure'da barındırılan uygulamalar için Uygulama Kimliği ve X.509 sertifikası kullanılması desteklese de önerilmez. Bunun yerine, Azure'da uygulama barındırıyorsanız Azure kaynakları için Yönetilen kimlikler kullanın. Yönetilen kimlikler için uygulamada veya geliştirme ortamında bir sertifikanın depolanmasına gerek yok.
Örnek uygulama, Program.cs dosyasının üst kısmında yer alan deyimi olarak ayarlanırken bir Uygulama Kimliği ve X.509 #define sertifikası Certificate kullanır.
- Bir PKCS #12 (.pfx) sertifikası oluşturun. Sertifika oluşturma seçenekleri arasında Windows ve OpenSSLüzerinde MakeCert yer almaktadır.
- 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şlemde daha sonra kullanılan sertifikanın parmak izini not seçin.
- Sertifika arşivini PKCS #12 (.pfx) sertifikasını DER kodlanmış sertifika ( .cer )olarak dışarı aktarın.
- Uygulamayı Azure AD'ye kaydetme (Uygulama kayıtları).
- Upload der kodlanmış sertifikayı (.cer) Azure AD'ye edinin:
- Azure AD'de uygulamayı seçin.
- Sertifikalar ve gizli & gidin.
- Ortak Upload içeren sertifikayı karşıya yüklemek için Sertifikayı yükle'yi seçin. .cer, .pem veya .crt sertifikası kabul edilebilir.
- Anahtar kasası adını, Uygulama Kimliğini ve sertifika parmak izini uygulamanın dosyasında appsettings.json depolar.
- Azure portal'da Anahtar kasaları'Azure portal.
- Üretim ortamındaki Gizli depolamada oluşturduğunuz anahtar kasasını Azure Key Vault seçin.
- Erişim ilkeleri'ni seçin.
- Erişim İlkesi Ekle'yi seçin.
- Gizli Izinler'i açın ve uygulamaya Al ve Liste izinlerini verin.
- Sorumlu seç'i seçin ve adına göre kayıtlı uygulamayı seçin. Seç düğmesini belirleyin.
- Tamam’ı seçin.
- Kaydet’i seçin.
- Uygulamayı dağıtın.
Örnek Certificate uygulama, yapılandırma değerlerini gizli IConfigurationRoot adla aynı adla elde eder:
- Hiyerarşik olmayan değerler: değeri
SecretNameile eldeconfig["SecretName"]edilir. - Hiyerarşik değerler (bölümler): Genişletme
:yöntemini (iki nokta üst üste)GetSectionkullanı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 dosya tarafından sağlanan değerlerle appsettings.json çağrır:
// using System.Linq;
// using System.Security.Cryptography.X509Certificates;
// using Microsoft.Extensions.Configuration;
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.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(
$"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
builtConfig["AzureADApplicationId"],
certs.OfType<X509Certificate2>().Single());
store.Close();
}
}
})
.UseStartup<Startup>();
Örnek değerler:
- Anahtar kasası adı:
contosovault - Uygulama Kimliği:
627e911e-43cc-61d4-992e-12db9c81b413 - Sertifika parmak izi:
fe14593dd66b2406c5269d742d04b6e1ab03adb1
appsettings.json:
{
"KeyVaultName": "Key Vault Name",
"AzureADApplicationId": "Azure AD Application ID",
"AzureADCertThumbprint": "Azure AD Certificate Thumbprint"
}
Uygulamayı çalıştırsanız, web sayfası yüklenen gizli dizi değerlerini gösterir. Geliştirme ortamında gizli değerler sonek _dev ile birlikte yük bindir. Üretim ortamında değerler soneki _prod ile birlikte yük bindir.
Azure kaynakları için yönetilen kimlikleri kullanma
Azure'a dağıtılan bir uygulama, Azure kaynakları için Yönetilen kimliklerden faydalanabilirsiniz. Yönetilen kimlik, uygulamada depolanan kimlik bilgileri Azure Key Vault (Uygulama Kimliği ve Parola/Gizli Anahtar) olmadan Azure AD kimlik doğrulamasını kullanarak uygulamanın kimlik doğrulamasına olanak sağlar.
Örnek uygulama, Program.cs dosyasının üst kısmında deyimi olarak ayarlanırken Azure kaynakları #define için yönetilen kimlikleri Managed kullanır.
Uygulamanın dosyasına kasa adını appsettings.json girin. Örnek uygulama, sürüme ayarlanırken Uygulama Kimliği ve Parola (gizli dizi) gerektirmez, bu nedenle bu yapılandırma Managed girişlerini yoksayabilirsiniz. Uygulama Azure'a dağıtılır ve Azure yalnızca dosyada depolanan kasa adını Azure Key Vault erişim için uygulamanın kimliğini appsettings.json doğrular.
Örnek uygulamayı Azure App Service.
Azure App Service dağıtılan bir uygulama, hizmet oluşturulduğunda Azure AD'ye otomatik olarak kaydedilir. Aşağıdaki komutta kullanmak üzere dağıtımdan Nesne Kimliğini alın. Nesne Kimliği, Azure portal panelinin Identity App Service.
Azure CLI ve uygulamanın Nesne Kimliğini kullanarak, uygulamaya anahtar kasasına list erişmek için ve izinleri get verin:
az keyvault set-policy --name {KEY VAULT NAME} --object-id {OBJECT ID} --secret-permissions get list
Azure CLI, PowerShell veya Azure portal.
Örnek uygulama:
- Bağlantı dizesi olmadan
AzureServiceTokenProvidersınıfının bir örneğini oluşturur. Bir bağlantı dizesi sağlanamıyorsa, sağlayıcı Azure kaynakları için yönetilen kimliklerden erişim belirteci elde etmek için çalışır. - Örnek KeyVaultClient belirteci geri çağırma
AzureServiceTokenProviderile yeni bir oluşturulur. - Örneği, tüm gizli değerleri yüken varsayılan bir uygulamasıyla kullanılır ve anahtar adlarında çift tire KeyVaultClient ( ) iki nokta üst üste ( ) ile IKeyVaultSecretManager
--:değiştirir.
// using Microsoft.Azure.KeyVault;
// using Microsoft.Azure.Services.AppAuthentication;
// using Microsoft.Extensions.Configuration.AzureKeyVault;
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
if (context.HostingEnvironment.IsProduction())
{
var builtConfig = config.Build();
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
$"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
keyVaultClient,
new DefaultKeyVaultSecretManager());
}
})
.UseStartup<Startup>();
Anahtar kasası adı örnek değeri: contosovault
appsettings.json:
{
"KeyVaultName": "Key Vault Name"
}
Uygulamayı çalıştırsanız, web sayfası yüklenen gizli dizi değerlerini gösterir. Geliştirme ortamında gizli değerler Gizli Gizli Yönetici _dev tarafından sağlandıkları için son eke sahiptir. Üretim ortamında değerler, son ekle birlikte yük dengeleme _prod Azure Key Vault.
Hata Access denied alırsanız, uygulamanın Azure AD'ye kayıtlı olduğunu ve anahtar kasasına erişim sağladığını onaylayın. Azure'da hizmeti yeniden başlatmış olduğunu onaylayın.
Sağlayıcıyı yönetilen kimlikle ve yönetilen kimlikle kullanma hakkında Azure Pipelines için bkz. Yönetilen hizmet kimliğine Azure Resource Manager vm'ye bir hizmet bağlantısı oluşturma.
Anahtar adı ön eki kullanma
AddAzureKeyVault uygulamasının uygulanmasını kabul eden bir aşırı yükleme IKeyVaultSecretManager sağlar. Bu aşırı yükleme, anahtar kasası gizli dizilerinin yapılandırma anahtarlarına nasıl dönüştürüleceklerini denetlemeye olanak sağlar. Örneğin, uygulama başlangıcındaki bir ön ek değerine göre gizli değerleri yüklemek için arabirimini kullanabilirsiniz. Bu teknik, örneğin uygulamanın sürümüne göre gizli dizileri yüklemene olanak sağlar.
Uyarı
Birden çok uygulamanın gizli dizilerini aynı anahtar kasasına yer vermek veya ortam gizli dizilerini (geliştirme ve üretim gizli dizileri gibi) aynı kasaya yer vermek için anahtar kasası gizli dizilerine ön ekleri kullanmayın. Farklı uygulama ve geliştirme/üretim ortamlarının, uygulama ortamlarını en yüksek güvenlik düzeyine göre yalıtmak için ayrı anahtar kasaları kullanmaları önerilir.
Aşağıdaki örnekte, anahtar kasasında (ve Geliştirme ortamı için Gizli Anahtar Yöneticisi kullanılarak) için bir gizli anahtar (anahtar kasası gizli anahtar adlarında dönemlere izin verilmez) 5000-AppSecret oluşturulmaktadır. Bu gizli, uygulamanın 5.0.0.0 sürümü için bir uygulama gizli dır. Uygulamanın başka bir sürümü olan 5.1.0.0 için, için anahtar kasasına bir gizli anahtar eklenir (ve Gizli Anahtar Yöneticisi 5100-AppSecret kullanılarak). Her uygulama sürümü, sürümüne sahip gizli anahtarı olarak yapılandırmasına yükler AppSecret ve gizli anahtarı yüklerken sürümü çıkarır.
AddAzureKeyVault özel bir ile IKeyVaultSecretManager çağrılır:
config.AddAzureKeyVault(
$"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
builtConfig["AzureADApplicationId"],
certs.OfType<X509Certificate2>().Single(),
new PrefixKeyVaultSecretManager(versionPrefix));
Uygulama, IKeyVaultSecretManager uygun gizli diziyi yapılandırmaya yüklemek için gizli dizilerin sürüm ön eklerine tepki gösterir:
Load, adı ön ekle başladığında bir gizli kod yükler. Diğer gizli diziler yüklenmez.GetKey:- Gizli addan ön eki kaldırır.
- Herhangi bir adda bulunan iki tireyi, yapılandırmada kullanılan sınırlayıcı olan (genellikle iki nokta üst
KeyDelimiterüste) ile değiştirir. Azure Key Vault gizli adlarda iki nokta üst üste 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);
}
}
yöntemi, sürüm ön eke sahip olanları bulmak için kasa gizli dizileri aracılığıyla devam Load eden bir sağlayıcı algoritması tarafından çağrılır. ile bir sürüm ön eki Load bulunursa algoritma, gizli anahtarın yapılandırma GetKey adını dönmek için yöntemini kullanır. Gizli adın sürüm ön eklerini kaldırır. Gizli anahtarın geri kalanı uygulamanın yapılandırma adı-değer çiftlerine yüklenmesi için döndürülür.
Bu yaklaşım uygulanırken:
Uygulamanın proje dosyasında belirtilen sürümü. Aşağıdaki örnekte, uygulamanın sürümü olarak
5.0.0.0ayarlanır:<PropertyGroup> <Version>5.0.0.0</Version> </PropertyGroup>Uygulamanın
<UserSecretsId>proje dosyasında bir özelliğin mevcut olduğunu onaylayın;{GUID}burada, kullanıcı tarafından sağlanan BIR GUID'tir:<PropertyGroup> <UserSecretsId>{GUID}</UserSecretsId> </PropertyGroup>Gizli Dizi Yöneticisi ile aşağıdaki gizli dizileri 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"Gizli diziler Azure Key Vault 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 yüklendiğinde anahtar kasası gizli dizileri yüklenir. dizesi gizli
5000-AppSecretdizisi, uygulamanın proje dosyasında () belirtilen uygulama sürümüyle5.0.0.0eştir.Sürüm
5000( tire ile) anahtar addan çıkarılmış. Uygulama boyunca anahtarla yapılandırmayı okumakAppSecretgizli anahtar değerini yükler.Uygulamanın sürümü proje dosyasında olarak değiştirilirse ve uygulama yeniden çalıştır olursa, döndürülen gizli değer Geliştirme ortamında ve
5.1.0.05.1.0.0_secret_value_dev5.1.0.0_secret_value_prodÜretim'de olur.
Not
Ayrıca, uygulamasına kendi KeyVaultClient uygulamalarınızı da s hizmetleriniz için SSS'ye SSS'ye 20122' AddAzureKeyVault Özel istemci, uygulama genelinde istemcinin tek bir örneğini paylaşmaya izin sağlar.
Bir diziyi bir sınıfa bağlama
Sağlayıcı, poCO dizisine bağlama için yapılandırma 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 ( , , ) ayıran anahtarları ayırt etmek için sayısal bir anahtar kesimi : :0: :1: … :{n}: kullanılır. Daha fazla bilgi için bkz. Yapılandırma: Bir diziyi sınıfına bağlama.
Azure Key Vault anahtarları ayırıcı olarak iki nokta üst üste kullanamayr. Bu belgede açıklanan yaklaşım, hiyerarşik değerler (bölümler) için ayırıcı olarak çift tire -- ( ) kullanır. Dizi anahtarları, çift Azure Key Vault ve sayısal anahtar segmentleri ( , , ) ile birlikte --0-- --1-- … --{n}-- depolanır.
Bir JSON dosyası tarafından sağlanan aşağıdaki Serilog günlük sağlayıcısı yapılandırmasını inceleme. Dizide tanımlanan ve günlük çıkışı hedeflerini açıklayan iki Serilog havuzu WriteTo yansıtan iki nesne değişmez değer vardı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=="
}
}
]
}
Önceki JSON dosyasında gösterilen yapılandırma, çift kısa çizgi ( ) Azure Key Vault ve sayısal -- kesimler kullanılarak dosyada depolanır:
| Anahtar | Değer |
|---|---|
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 dizileri yeniden yükleme
Gizli diziler çağrılana kadar IConfigurationRoot.Reload() önbelleğe alınmış olur. Anahtar kasasında süresi dolan, devre dışı bırakılmış ve güncelleştirilmiş gizli diziler yürütülene kadar uygulama Reload tarafından kabul olmaz.
Configuration.Reload();
Devre dışı bırakılmış ve süresi dolmuş gizli diziler
Devre dışı bırakılmış ve süresi dolmuş gizli diziler bir KeyVaultErrorException atar. Uygulamanın atması önlemek için, farklı bir yapılandırma sağlayıcısı kullanarak yapılandırmayı silebilir veya devre dışı bırakılmış veya süresi dolmuş gizli anahtarı güncelleştirebilirsiniz.
Sorun giderme
Uygulama sağlayıcıyı kullanarak yapılandırmayı yükleyemezse, uygulama günlük altyapısına ASP.NET Core iletisi yazılır. Aşağıdaki koşullar yapılandırmanın yüklenmesini önlemektedir:
- Uygulama veya sertifika Azure AD'de doğru yapılandırılmamış.
- Anahtar kasası, anahtar kasasında Azure Key Vault.
- Uygulamanın anahtar kasasına erişme yetkisi yok.
- Erişim ilkesi ve
GetizinleriniListiçermez. - Anahtar kasasında yapılandırma verileri (ad-değer çifti) yanlış adlandırılmış, eksik, devre dışı veya süresi dolmuş.
- Uygulamanın anahtar kasası adı ( ), Azure AD Uygulama Kimliği ( ) veya Azure AD sertifika parmak
KeyVaultNameAzureADApplicationIdizi ()AzureADCertThumbprintyanlış. - Uygulamaya yüklenmeye çalıştığınız değer için yapılandırma anahtarı (ad) yanlış.
- Uygulamanın erişim ilkesi anahtar kasasına eklerken ilke oluşturuldu, ancak Erişim ilkeleri kullanıcı arabiriminde Kaydet düğmesi seçilmedi.
Ek kaynaklar
- ASP.NET Core'de yapılandırma
- Microsoft Azure: Key Vault Belgeleri
- Azure Key Vault için HSM korumalı anahtarlar oluşturma ve Azure Key Vault
- Hızlı Başlangıç: .NET web uygulaması kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma
- Öğretici: .NET'Azure Key Vault Azure Windows Sanal Makinesi ile sanal makineleri kullanma