ASP.NET Core'da Azure Key Vault yapılandırma sağlayıcısı
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.
Paketler
Aşağıdaki paketler için paket başvuruları ekleyin:
Örnek uygulama
Örnek uygulama, en üstündeki önişlemci yönergesi tarafından #define
belirlenen iki moddan Program.cs
birinde ç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 identity , kimlik bilgilerini uygulamanın kodunda veya yapılandırmasında depolamadan Azure kaynakları için Yönetilen kimliklerle Azure Key Vault'ta uygulamanın kimliğini doğrular. ÖrneğinManaged
sü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)
Geliştirme ortamında gizli depolama
Gizli Dizi Yöneticisi'ne giderek gizli dizileri yerel olarak ayarlayın. Örnek uygulama Geliştirme ortamındaki yerel makinede çalıştırıldığında, gizli diziler yerel kullanıcı gizli dizileri deposundan yüklenir.
Gizli Dizi Yöneticisi, uygulamanın proje dosyasında bir <UserSecretsId>
ö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), ASP.NET Temel yapılandırma anahtarı adlarında ayırıcı olarak bir (iki nokta üst üste) kullanır :
.
Gizli Dizi Yöneticisi, projenin içerik köküne açılan bir komut kabuğundan kullanılır. Burada {SECRET NAME}
ad ve {SECRET VALUE}
değer:
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ütebilirsiniz:
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 ile Üretim ortamındaki Gizli depolama alanında Azure Key Vault'ta depolandığında, _dev
sonek olarak _prod
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 Üretim 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 bkz . Hızlı Başlangıç: Azure CLI kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma.
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 login
oturum 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}
Kasada ad-değer çiftleri olarak gizli diziler oluşturun.
Azure Key Vault gizli dizi adları alfasayısal karakterler ve kısa çizgilerle sınırlıdır. Anahtar Kasası gizli dizi adlarında iki nokta üst üste 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ındaki bir alt anahtardan bir bölümü iki nokta üst üste sınırlar. Gizli diziler uygulamanın yapılandırmasına yüklendiğinde iki tire dizisi iki nokta üst üste ile değiştirilir.Aşağıdaki gizli diziler örnek uygulamayla birlikte kullanılabilir. Değerler, Geliştirme ortamında Gizli Dizi Yöneticisi'nden yüklenen sonek değerlerinden
_dev
ayırt etmek için bir_prod
sonek içerir. değerini önceki adımda oluşturduğunuz Key Vault adıyla değiştirin{KEY VAULT NAME}
: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.
Not
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, uygulamada veya geliştirme ortamında sertifika depolamayı gerektirmez.
En üstündeki Program.cs
önişlemci yönergesi olarak ayarlandığında Certificate
örnek uygulama bir Uygulama Kimliği ve X.509 sertifikası #define
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 diziler'e gidin.
- Ortak anahtarı içeren sertifikayı karşıya yüklemek için Sertifikayı karşıya yükle'yi seçin. .cer, .pem veya .crt sertifikası kabul edilebilir.
- Key Vault adını, Uygulama Kimliği'ni ve sertifika parmak izini uygulamanın
appsettings.json
dosyasında depolayın. - Azure portalında Key Vaults'a gidin.
- Azure Key Vault ile Üretim ortamındaki Gizli depolama alanında oluşturduğunuz Key Vault'ı seçin.
- Erişim ilkeleri'ni seçin.
- Erişim İlkesi Ekle'yi seçin.
- Gizli dizi izinlerini açın ve uygulamaya Alma ve Listeleme izinlerini sağlayın.
- Sorumlu seç'i seçin ve kayıtlı uygulamayı ada göre seçin. Seçim düğmesini seçin.
- Tamam'ı seçin.
- Kaydet'i seçin.
- Uygulamayı dağıtın.
Örnek uygulama, Certificate
yapılandırma değerlerini gizli dizi adıyla aynı adla elde eder IConfigurationRoot :
- Hiyerarşik olmayan değerler: değeri
SecretName
ileconfig["SecretName"]
elde edilir. - Hiyerarşik değerler (bölümler): (iki nokta üst üste) gösterimini GetSection veya 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, dosya tarafından sağlanan değerlerle çağrılar AddAzureKeyVault appsettings.json
:
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:
- 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. Geliştirme ortamında gizli dizi değerleri sonekle birlikte _dev
yüklenir. Üretim ortamında değerler sonekle birlikte _prod
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 identity , uygulamanın kodunda veya yapılandırmasında kimlik bilgilerini depolamadan Microsoft Entra Id kimlik doğrulamasını kullanarak Azure Key Vault ile kimlik doğrulaması yapmasına olanak tanır.
Örnek uygulama, en üstündeki Program.cs
önişlemci yönergesi olarak Managed
ayarlandığında sistem tarafından atanan bir yönetilen identity #define
kullanır. Azure Uygulaması Hizmeti uygulaması için yönetilen identity bir uygulama oluşturmak için bkz. App Service ve Azure İşlevleri için yönetilen kimlikleri kullanma. Yönetilen identity oluşturulduktan sonra, App Service panelinde Azure portalında Identity gösterilen uygulamanın Nesne Kimliğini not edin.
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'a dağıtılır ve Azure yalnızca dosyada depolanan kasa adını kullanarak Azure Key Vault'a appsettings.json
erişmek için uygulamanın kimliğini doğrular.
Örnek uygulamayı Azure Uygulaması Hizmetine dağıtın.
Azure CLI'yı ve uygulamanın Nesne Kimliğini kullanarak uygulamaya list
kasaya erişmek için ve get
izinleri sağlayın:
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 sınıfının bir örneğini DefaultAzureCredential 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());
}
Key Vault adı örnek değeri: contosovault
appsettings.json
:
{
"KeyVaultName": "Key Vault Name"
}
Kullanıcı tarafından atanan yönetilen identitykullanan uygulamalar için, aşağıdaki yaklaşımlardan birini kullanarak yönetilen identity'nin İstemci Kimliğini yapılandırın:
AZURE_CLIENT_ID
ortam değişkenini ayarlayın.DefaultAzureCredentialOptions.ManagedIdentityClientId çağrısı
AddAzureKeyVault
yaparken ö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. Geliştirme ortamında gizli dizi değerleri, Gizli Dizi Yöneticisi tarafından sağlandığı için son eke sahiptir _dev
. Üretim ortamında değerler, Azure Key Vault tarafından sağlandığı için sonekle birlikte _prod
yüklenir.
Hata Access denied
alırsanız uygulamanın Microsoft Entra Id ile kaydedildiğini ve kasaya erişim sağlandığını onaylayın. Hizmeti Azure'da yeniden başlattığınızdan emin olun.
Sağlayıcıyı yönetilen identity ve Azure Pipelines ile kullanma hakkında bilgi için bkz . Yönetilen hizmet içeren bir VM'ye Azure Resource Manager hizmet identitybağlantısı oluşturma.
Yapılandırma seçenekleri
AddAzureKeyVault
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:
Özellik | Açıklama |
---|---|
Manager | KeyVaultSecretManager gizli dizi yüklemesini denetlemek için kullanılan örnek. |
ReloadInterval | TimeSpan öğesini seçerek kasayı yoklama girişimleri arasında değişiklik yapmak için beklemeniz gerekir. Varsayılan değerdir null (yapılandırma yeniden yüklenmez). |
Anahtar adı ön eki kullanma
AddAzureKeyVault
, Key Vault gizli dizilerinin KeyVaultSecretManageryapılandırma anahtarlarına nasıl dönüştürüldüğünü denetlemenize olanak tanıyan 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 dizi değerlerini yüklemek için arabirimini uygulayabilirsiniz. Bu teknik, örneğin uygulamanın sürümüne göre gizli dizileri yüklemenizi sağlar.
Uyarı
Aşağıdakiler için Key Vault gizli dizilerinde ön ek kullanmayın:
- Birden çok uygulamanın gizli dizilerini aynı kasaya yerleştirin.
- Ortam gizli dizilerini (örneğin, geliştirme ve üretim gizli dizileri) 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 Geliştirme ortamı için Gizli Dizi Yöneticisi kullanılarak) için 5000-AppSecret
bir gizli dizi oluşturulur (Anahtar Kasası gizli dizi adlarında dönemlere izin verilmez). Bu gizli dizi, uygulamanın 5.0.0.0 sürümü için bir uygulama gizli dizisini temsil eder. Uygulamanın başka bir sürümü olan 5.1.0.0 için 5100-AppSecret
, için kasaya bir gizli dizi eklenir (ve Gizli Dizi Yöneticisi kullanılır). Her uygulama sürümü, sürümüne ait gizli dizi değerini olarak AppSecret
yapılandırmasına yükler ve gizli diziyi yüklerken sürümü kaldırır.
AddAzureKeyVault
ö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 diziyi yüklemek için gizli dizilerin sürüm ön eklerine tepki sağlar:
Load
adı ön ek ile başladığında bir gizli dizi yükler. Diğer gizli diziler yüklenmez.GetKey
:- Gizli dizi adından ön eki kaldırır.
- Herhangi bir addaki iki tireyi
KeyDelimiter
, yapılandırmada kullanılan sınırlayıcı (genellikle iki nokta üst üste) olan ile değiştirir. Azure Key Vault gizli dizi adlarında iki nokta üst üste izin vermez.
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);
}
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. ile Load
bir sürüm ön eki bulunduğunda algoritma, gizli dizi adının yapılandırma adını döndürmek için yöntemini kullanır GetKey
. Gizli dizinin adından sürüm ön ekini kaldırır. Gizli rest dizi adı, 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.0
ayarlanmıştır:<PropertyGroup> <Version>5.0.0.0</Version> </PropertyGroup>
Bir özelliğin
<UserSecretsId>
, kullanıcının sağladığı GUID'nin bulunduğu{GUID}
uygulamanın proje dosyasında mevcut olduğunu onaylayın:<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 aşağıdaki Azure CLI komutları kullanılarak Azure Key Vault'a 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 dizileri yüklenir. için
5000-AppSecret
dize gizli dizisi, uygulamanın proje dosyasında (5.0.0.0
) belirtilen sürümüyle eşleştirilir.Sürüm (
5000
tire ile), anahtar adından çıkarılır. Uygulama genelinde anahtarlaAppSecret
okuma yapılandırması gizli dizi değerini yükler.Proje dosyasında
5.1.0.0
uygulamanın sürümü olarak değiştirilirse ve uygulama yeniden çalıştırılırsa, döndürülen gizli dizi değeri Geliştirme ortamında ve5.1.0.0_secret_value_prod
Üretim'de olur5.1.0.0_secret_value_dev
.
Not
kendi uygulamanızı da sağlayabilirsiniz SecretClient AddAzureKeyVault
. Ö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ğ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 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 üst üste 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 WriteTo
, günlüğe kaydetme çıkışına yönelik hedefleri açıklayan iki Serilog havuzu yansıtan iki nesne değişmez değeri 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=="
}
}
]
}
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:
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
Varsayılan olarak, gizli diziler uygulamanın ömrü boyunca yapılandırma sağlayıcısı tarafından önbelleğe alınır. Kasada daha sonra devre dışı bırakılan veya güncelleştirilen gizli diziler uygulama tarafından yoksayılır.
Gizli dizileri yeniden yüklemek için öğesini çağırabilirsiniz IConfigurationRoot.Reload:
config.Reload();
Gizli dizileri belirli aralıklarla yeniden yüklemek için özelliğini ayarlayın AzureKeyVaultConfigurationOptions.ReloadInterval . Daha fazla bilgi için bkz . Yapılandırma seçenekleri.
Devre dışı bırakılmış ve süresi dolmuş gizli diziler
Süresi dolan gizli diziler 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;
builder.Configuration.AddAzureKeyVault(
new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential(),
new SampleKeyVaultSecretManager());
Devre dışı bırakılan gizli diziler Key Vault'tan alınamaz ve hiçbir zaman dahil edilemez.
Sorun giderme
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ış.
- Kasa Azure Key Vault'ta mevcut değildir.
- Uygulamanın kasaya erişme yetkisi yoktur.
- Erişim ilkesi ve
List
izinlerini içermezGet
. - 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
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.
Paketler
Aşağıdaki paketler için paket başvuruları ekleyin:
Örnek uygulama
Örnek uygulama, en üstündeki önişlemci yönergesi tarafından #define
belirlenen iki moddan Program.cs
birinde ç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 identity , uygulamanın kodunda veya yapılandırmasında depolanan kimlik bilgileri olmadan Azure kaynakları için Yönetilen kimliklerle 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ğinManaged
sü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)
Geliştirme ortamında gizli depolama
Gizli Dizi Yöneticisi'ne giderek gizli dizileri yerel olarak ayarlayın. Örnek uygulama Geliştirme ortamındaki yerel makinede çalıştırıldığında, gizli diziler yerel kullanıcı gizli dizileri deposundan yüklenir.
Gizli Dizi Yöneticisi, uygulamanın proje dosyasında bir <UserSecretsId>
ö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), ASP.NET Temel yapılandırma anahtarı adlarında ayırıcı olarak bir (iki nokta üst üste) kullanır :
.
Gizli Dizi Yöneticisi, projenin içerik köküne açılan bir komut kabuğundan kullanılır. Burada {SECRET NAME}
ad ve {SECRET VALUE}
değer:
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ütebilirsiniz:
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 ile Üretim ortamındaki Gizli depolama alanında Azure Key Vault'ta depolandığında, _dev
sonek olarak _prod
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 Üretim 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 bkz . Hızlı Başlangıç: Azure CLI kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma.
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 login
oturum 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}
Kasada ad-değer çiftleri olarak gizli diziler oluşturun.
Azure Key Vault gizli dizi adları alfasayısal karakterler ve kısa çizgilerle sınırlıdır. Anahtar Kasası gizli dizi adlarında iki nokta üst üste 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ındaki bir alt anahtardan bir bölümü iki nokta üst üste sınırlar. Gizli diziler uygulamanın yapılandırmasına yüklendiğinde iki tire dizisi iki nokta üst üste ile değiştirilir.Aşağıdaki gizli diziler örnek uygulamayla birlikte kullanılabilir. Değerler, Geliştirme ortamında Gizli Dizi Yöneticisi'nden yüklenen sonek değerlerinden
_dev
ayırt etmek için bir_prod
sonek içerir. değerini önceki adımda oluşturduğunuz Key Vault adıyla değiştirin{KEY VAULT NAME}
: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.
Not
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, uygulamada veya geliştirme ortamında sertifika depolamayı gerektirmez.
En üstündeki Program.cs
önişlemci yönergesi olarak ayarlandığında Certificate
örnek uygulama bir Uygulama Kimliği ve X.509 sertifikası #define
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 diziler'e gidin.
- Ortak anahtarı içeren sertifikayı karşıya yüklemek için Sertifikayı karşıya yükle'yi seçin. .cer, .pem veya .crt sertifikası kabul edilebilir.
- Key Vault adını, Uygulama Kimliği'ni ve sertifika parmak izini uygulamanın
appsettings.json
dosyasında depolayın. - Azure portalında Key Vaults'a gidin.
- Azure Key Vault ile Üretim ortamındaki Gizli depolama alanında oluşturduğunuz Key Vault'ı seçin.
- Erişim ilkeleri'ni seçin.
- Erişim İlkesi Ekle'yi seçin.
- Gizli dizi izinlerini açın ve uygulamaya Alma ve Listeleme izinlerini sağlayın.
- Sorumlu seç'i seçin ve kayıtlı uygulamayı ada göre seçin. Seçim düğmesini seçin.
- Tamam'ı seçin.
- Kaydet'i seçin.
- Uygulamayı dağıtın.
Örnek uygulama, Certificate
yapılandırma değerlerini gizli dizi adıyla aynı adla elde eder IConfigurationRoot :
- Hiyerarşik olmayan değerler: değeri
SecretName
ileconfig["SecretName"]
elde edilir. - Hiyerarşik değerler (bölümler): (iki nokta üst üste) gösterimini GetSection veya 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, dosya tarafından sağlanan değerlerle çağrılar AddAzureKeyVault 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:
- 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. Geliştirme ortamında gizli dizi değerleri sonekle birlikte _dev
yüklenir. Üretim ortamında değerler sonekle birlikte _prod
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 identity , uygulamanın uygulamada depolanan 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 üstündeki Program.cs
önişlemci yönergesi olarak ayarlandığında Managed
örnek uygulama Azure kaynakları #define
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'a dağıtılır ve Azure yalnızca dosyada depolanan kasa adını kullanarak Azure Key Vault'a appsettings.json
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'yı ve uygulamanın Nesne Kimliğini kullanarak uygulamaya list
kasaya erişmek için ve get
izinleri sağlayın:
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.
- Örnekle yeni SecretClient
DefaultAzureCredential
bir oluşturulur. - Örnek
SecretClient
, gizli değerleri yükleyen ve anahtar adlarında çift tireleri (--
) iki nokta üst üste (:
) ile değiştiren bir KeyVaultSecretManager ö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>());
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. Geliştirme ortamında gizli dizi değerleri, Gizli Dizi Yöneticisi tarafından sağlandığı için son eke sahiptir _dev
. Üretim ortamında değerler, Azure Key Vault tarafından sağlandığı için sonekle birlikte _prod
yüklenir.
Hata Access denied
alırsanız uygulamanın Microsoft Entra Id ile kaydedildiğini ve kasaya erişim sağlandığını onaylayın. Hizmeti Azure'da yeniden başlattığınızdan emin olun.
Sağlayıcıyı yönetilen identity ve Azure Pipelines ile kullanma hakkında bilgi için bkz . Yönetilen hizmet içeren bir VM'ye Azure Resource Manager hizmet identitybağ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())
{
...
});
AzureKeyVaultConfigurationOptions
nesnesi aşağıdaki özellikleri içerir.
Özellik | Açıklama |
---|---|
Manager | KeyVaultSecretManager gizli dizi yüklemesini denetlemek için kullanılan örnek. |
ReloadInterval | TimeSpan öğesini seçerek kasayı yoklama girişimleri arasında değişiklik yapmak için beklemeniz gerekir. Varsayılan değerdir null (yapılandırma yeniden yüklenmez). |
Anahtar adı ön eki kullanma
AddAzureKeyVault
, Key Vault gizli dizilerinin KeyVaultSecretManageryapılandırma anahtarlarına nasıl dönüştürüldüğünü denetlemenize olanak tanıyan 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 dizi değerlerini yüklemek için arabirimini uygulayabilirsiniz. Bu teknik, örneğin uygulamanın sürümüne göre gizli dizileri yüklemenizi sağlar.
Uyarı
Aşağıdakiler için Key Vault gizli dizilerinde ön ek kullanmayın:
- Birden çok uygulamanın gizli dizilerini aynı kasaya yerleştirin.
- Ortam gizli dizilerini (örneğin, geliştirme ve üretim gizli dizileri) 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 Geliştirme ortamı için Gizli Dizi Yöneticisi kullanılarak) için 5000-AppSecret
bir gizli dizi oluşturulur (Anahtar Kasası gizli dizi adlarında dönemlere izin verilmez). Bu gizli dizi, uygulamanın 5.0.0.0 sürümü için bir uygulama gizli dizisini temsil eder. Uygulamanın başka bir sürümü olan 5.1.0.0 için 5100-AppSecret
, için kasaya bir gizli dizi eklenir (ve Gizli Dizi Yöneticisi kullanılır). Her uygulama sürümü, sürümüne ait gizli dizi değerini olarak AppSecret
yapılandırmasına yükler ve gizli diziyi 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 diziyi yüklemek için gizli dizilerin sürüm ön eklerine tepki sağlar:
Load
adı ön ek ile başladığında bir gizli dizi yükler. Diğer gizli diziler yüklenmez.GetKey
:- Gizli dizi adından ön eki kaldırır.
- Herhangi bir addaki iki tireyi
KeyDelimiter
, yapılandırmada kullanılan sınırlayıcı (genellikle iki nokta üst üste) olan ile değiştirir. Azure Key Vault gizli dizi adlarında 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);
}
}
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. ile Load
bir sürüm ön eki bulunduğunda algoritma, gizli dizi adının yapılandırma adını döndürmek için yöntemini kullanır GetKey
. Gizli dizinin adından sürüm ön ekini kaldırır. Gizli rest dizi adı, 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.0
ayarlanmıştır:<PropertyGroup> <Version>5.0.0.0</Version> </PropertyGroup>
Bir özelliğin
<UserSecretsId>
, kullanıcının sağladığı GUID'nin bulunduğu{GUID}
uygulamanın proje dosyasında mevcut olduğunu onaylayın:<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 aşağıdaki Azure CLI komutları kullanılarak Azure Key Vault'a 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 dizileri yüklenir. için
5000-AppSecret
dize gizli dizisi, uygulamanın proje dosyasında (5.0.0.0
) belirtilen sürümüyle eşleştirilir.Sürüm (
5000
tire ile), anahtar adından çıkarılır. Uygulama genelinde anahtarlaAppSecret
okuma yapılandırması gizli dizi değerini yükler.Proje dosyasında
5.1.0.0
uygulamanın sürümü olarak değiştirilirse ve uygulama yeniden çalıştırılırsa, döndürülen gizli dizi değeri Geliştirme ortamında ve5.1.0.0_secret_value_prod
Üretim'de olur5.1.0.0_secret_value_dev
.
Not
kendi uygulamanızı da sağlayabilirsiniz SecretClient AddAzureKeyVault
. Ö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ğ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 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 üst üste 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 WriteTo
, günlüğe kaydetme çıkışına yönelik hedefleri açıklayan iki Serilog havuzu yansıtan iki nesne değişmez değeri 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=="
}
}
]
}
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:
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ınır. Daha sonra kasada devre dışı bırakılan veya güncelleştirilen gizli diziler yürütülene kadar Reload
uygulama tarafından dikkate alınmıyor.
Configuration.Reload();
Devre dışı bırakılmış ve süresi dolmuş gizli diziler
Süresi dolan gizli diziler 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 diziler Key Vault'tan alınamaz ve hiçbir zaman dahil edilemez.
Sorun giderme
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ış.
- Kasa Azure Key Vault'ta mevcut değildir.
- Uygulamanın kasaya erişme yetkisi yoktur.
- Erişim ilkesi ve
List
izinlerini içermezGet
. - 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