.NET için Azure Key Vault anahtar istemci kitaplığı - sürüm 4.5.0
Azure Key Vault, verilerinizi şifrelemek için anahtarların güvenli bir şekilde depolanmasını sağlayan bir bulut hizmetidir. Birden çok anahtar ve aynı anahtarın birden çok sürümü Azure Key Vault tutulabilir. Azure Key Vault'daki şifreleme anahtarları JSON Web Anahtarı (JWK) nesneleri olarak temsil edilir.
Azure Key Vault Yönetilen HSM, FIPS 140-2 Düzey 3 doğrulanmış HSM'leri kullanarak bulut uygulamalarınız için şifreleme anahtarlarını korumanızı sağlayan, tam olarak yönetilen, yüksek oranda kullanılabilir, tek kiracılı, standartlara uyumlu bir bulut hizmetidir.
Azure Key Vault anahtarları kitaplığı istemcisi, her birinde donanım güvenlik modülleri (HSM) desteği bulunan RSA anahtarlarını ve Elips Eğrisi (EC) anahtarlarını destekler. Anahtarları ve sürümlerini oluşturma, alma, güncelleştirme, silme, temizleme, yedekleme, geri yükleme ve listeleme işlemleri sunar.
Kaynak kodu | Paket (NuGet) | API başvuru belgeleri | Ürün belgeleri | Örnekleri | Geçiş kılavuzu
Başlarken
Paketi yükleme
NuGet ile .NET için Azure Key Vault anahtarları istemci kitaplığını yükleyin:
dotnet add package Azure.Security.KeyVault.Keys
Önkoşullar
- Bir Azure aboneliği.
- Mevcut bir Azure Key Vault. Azure Key Vault oluşturmanız gerekiyorsa Azure Portal'ı veya Azure CLI'yı kullanabilirsiniz.
- RBAC (önerilen) veya erişim denetimi kullanarak mevcut bir Azure Key Vault yetkilendirme.
Standart bir Key Vault kaynağı oluşturuyorsanız ve yerine kendi benzersiz adlarınızı koyarak <your-resource-group-name>
<your-key-vault-name>
aşağıdaki CLI komutunu çalıştırın:
az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>
Yönetilen HSM kaynağı oluşturuyorsanız aşağıdaki CLI komutunu çalıştırın:
az keyvault create --hsm-name <your-key-vault-name> --resource-group <your-resource-group-name> --administrators <your-user-object-id> --location <your-azure-location>
Almak <your-user-object-id>
için aşağıdaki CLI komutunu çalıştırabilirsiniz:
az ad user show --id <your-user-principal> --query id
İstemcinin kimliğini doğrulama
Azure Key Vault hizmetiyle etkileşim kurmak için KeyClient sınıfının bir örneğini oluşturmanız gerekir. Portalda "DNS Adı" olarak görebileceğiniz bir kasa URL'sine ve istemci nesnesinin örneğini oluşturmak için kimlik bilgilerine ihtiyacınız vardır.
Aşağıda gösterilen örneklerde, yönetilen kimlik kimlik doğrulaması kullanan yerel geliştirme ve üretim ortamları dahil olmak üzere çoğu senaryo için uygun olan bir DefaultAzureCredential
kullanılır.
Ayrıca, üretim ortamlarında kimlik doğrulaması için yönetilen kimlik kullanmanızı öneririz.
Farklı kimlik doğrulama yöntemleri ve bunların ilgili kimlik bilgileri türleri hakkında daha fazla bilgiyi Azure Kimliği belgelerinde bulabilirsiniz.
Aşağıda gösterilen sağlayıcıyı DefaultAzureCredential
veya Azure SDK ile sağlanan diğer kimlik bilgisi sağlayıcılarını kullanmak için önce Azure.Identity paketini yüklemeniz gerekir:
dotnet add package Azure.Identity
Yönetilen HSM'nizi etkinleştirme
Bu bölüm yalnızca Yönetilen HSM oluşturuyorsanız geçerlidir. HSM etkinleştirilene kadar tüm veri düzlemi komutları devre dışı bırakılır. Anahtar oluşturamaz veya rol atayamazsınız. HSM'yi yalnızca oluşturma komutu sırasında atanan atanan yöneticiler etkinleştirebilir. HSM'yi etkinleştirmek için güvenlik etki alanını indirmeniz gerekir.
HSM'nizi etkinleştirmek için ihtiyacınız olan:
- En az 3 RSA anahtar çifti (en fazla 10)
- Güvenlik etki alanının şifresini çözmek için gereken en az anahtar sayısını belirtin (çekirdek)
HSM'yi etkinleştirmek için HSM'ye en az 3 (en fazla 10) RSA ortak anahtarı gönderirsiniz. HSM, güvenlik etki alanını bu anahtarlarla şifreler ve geri gönderir. Bu güvenlik etki alanı başarıyla indirildikten sonra HSM'niz kullanıma hazırdır. Güvenlik etki alanının şifresini çözmek için gereken en az özel anahtar sayısı olan çekirdeği de belirtmeniz gerekir.
Aşağıdaki örnekte, otomatik olarak imzalanan 3 sertifika oluşturmak için openssl'nin nasıl kullanılacağı gösterilmektedir.
openssl req -newkey rsa:2048 -nodes -keyout cert_0.key -x509 -days 365 -out cert_0.cer
openssl req -newkey rsa:2048 -nodes -keyout cert_1.key -x509 -days 365 -out cert_1.cer
openssl req -newkey rsa:2048 -nodes -keyout cert_2.key -x509 -days 365 -out cert_2.cer
az keyvault security-domain download
Güvenlik etki alanını indirmek ve yönetilen HSM'nizi etkinleştirmek için komutunu kullanın.
Aşağıdaki örnekte 3 RSA anahtar çifti kullanılır (bu komut için yalnızca ortak anahtarlar gereklidir) ve çekirdeği 2 olarak ayarlar.
az keyvault security-domain download --hsm-name <your-key-vault-name> --sd-wrapping-keys ./certs/cert_0.cer ./certs/cert_1.cer ./certs/cert_2.cer --sd-quorum 2 --security-domain-file ContosoMHSM-SD.json
KeyClient Oluşturma
İstemciye geçirmek için bir DefaultAzureCredential
örneği oluşturun.
Aynı kimlikle kimlik doğrulaması yapacaklarsa, belirteç kimlik bilgilerinin aynı örneği birden çok istemcide kullanılabilir.
// Create a new key client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
var client = new KeyClient(vaultUri: new Uri(vaultUrl), credential: new DefaultAzureCredential());
// Create a new key using the key client.
KeyVaultKey key = client.CreateKey("key-name", KeyType.Rsa);
// Retrieve a key using the key client.
key = client.GetKey("key-name");
CryptographyClient Oluşturma
Azure Key Vault oluşturduktan KeyVaultKey
sonra CryptographyClient'ı da oluşturabilirsiniz:
// Create a new cryptography client using the same Key Vault or Managed HSM endpoint, service version,
// and options as the KeyClient created earlier.
CryptographyClient cryptoClient = client.GetCryptographyClient(key.Name, key.Properties.Version);
Önemli kavramlar
KeyVaultKey
Azure Key Vault birden çok anahtar türünü ve algoritmayı destekler ve yüksek değerli anahtarlar için donanım güvenlik modüllerinin (HSM) kullanılmasını sağlar.
KeyClient
SDK'da KeyClient
hem zaman uyumlu hem de zaman uyumsuz işlemler sağlayan ve bir uygulamanın kullanım örneğine göre istemci seçimine olanak sağlayan bir. bir KeyClient
uygulamasını başlatdıktan sonra Azure Key Vault'daki birincil kaynak türleriyle etkileşim kurabilirsiniz.
CryptographyClient
SDK'da CryptographyClient
hem zaman uyumlu hem de zaman uyumsuz işlemler sağlayan ve bir uygulamanın kullanım örneğine göre istemci seçimine olanak sağlayan bir. bir CryptographyClient
'i başlatdıktan sonra, Azure Key Vault'de depolanan anahtarlarla şifreleme işlemleri gerçekleştirmek için bunu kullanabilirsiniz.
İş parçacığı güvenliği
Tüm istemci örneği yöntemlerinin iş parçacığı açısından güvenli ve birbirinden bağımsız olduğunu garanti ediyoruz (kılavuz). Bu, istemci örneklerini yeniden kullanma önerisinin iş parçacıkları arasında bile her zaman güvenli olmasını sağlar.
Ek kavramlar
İstemci seçenekleri | Yanıta | erişme Uzun süre çalışan işlemler | | Hataları işlemeTanılama | Alaycı | İstemci ömrü
Örnekler
Azure.Security.KeyVault.Keys paketi zaman uyumlu ve zaman uyumsuz API'leri destekler.
Aşağıdaki bölümde, yukarıda oluşturulan kullanılarak client
azure Key Vault temel hizmetle ilgili en yaygın görevlerden bazılarını kapsayan birkaç kod parçacığı verilmiştir:
Eşitleme örnekleri
- Bir anahtar oluşturma
- Anahtar alma
- Mevcut anahtarı güncelleştirme
- Bir anahtarı silme
- Anahtarı silme ve temizleme
- Liste anahtarları
- Şifreleme ve Şifre Çözme
Zaman uyumsuz örnekler
- Zaman uyumsuz olarak anahtar oluşturma
- Anahtarları zaman uyumsuz olarak listeleme
- Anahtarı zaman uyumsuz olarak silme
Bir anahtar oluşturma
Azure Key Vault depolanacak bir anahtar oluşturun. Aynı ada sahip bir anahtar zaten varsa, anahtarın yeni bir sürümü oluşturulur.
// Create a key. Note that you can specify the type of key
// i.e. Elliptic curve, Hardware Elliptic Curve, RSA
KeyVaultKey key = client.CreateKey("key-name", KeyType.Rsa);
Console.WriteLine(key.Name);
Console.WriteLine(key.KeyType);
// Create a software RSA key
var rsaCreateKey = new CreateRsaKeyOptions("rsa-key-name", hardwareProtected: false);
KeyVaultKey rsaKey = client.CreateRsaKey(rsaCreateKey);
Console.WriteLine(rsaKey.Name);
Console.WriteLine(rsaKey.KeyType);
// Create a hardware Elliptic Curve key
// Because only premium Azure Key Vault supports HSM backed keys , please ensure your Azure Key Vault
// SKU is premium when you set "hardwareProtected" value to true
var echsmkey = new CreateEcKeyOptions("ec-key-name", hardwareProtected: true);
KeyVaultKey ecKey = client.CreateEcKey(echsmkey);
Console.WriteLine(ecKey.Name);
Console.WriteLine(ecKey.KeyType);
Anahtar alma
GetKey
daha önce Azure Key Vault depolanan bir anahtarı alır.
KeyVaultKey key = client.GetKey("key-name");
Console.WriteLine(key.Name);
Console.WriteLine(key.KeyType);
Mevcut anahtarı güncelleştirme
UpdateKeyProperties
daha önce Azure Key Vault depolanan bir anahtarı güncelleştirir.
KeyVaultKey key = client.CreateKey("key-name", KeyType.Rsa);
// You can specify additional application-specific metadata in the form of tags.
key.Properties.Tags["foo"] = "updated tag";
KeyVaultKey updatedKey = client.UpdateKeyProperties(key.Properties);
Console.WriteLine(updatedKey.Name);
Console.WriteLine(updatedKey.Properties.Version);
Console.WriteLine(updatedKey.Properties.UpdatedOn);
Bir anahtarı silme
StartDeleteKey
daha önce Azure Key Vault depolanan bir anahtarı silmek için uzun süre çalışan bir işlem başlatır.
İşlemin tamamlanmasını beklemeden anahtarı hemen alabilirsiniz.
Azure Key Vault için geçici silme etkinleştirilmediğinde, bu işlem anahtarı kalıcı olarak siler.
DeleteKeyOperation operation = client.StartDeleteKey("key-name");
DeletedKey key = operation.Value;
Console.WriteLine(key.Name);
Console.WriteLine(key.DeletedOn);
Anahtarı silme ve temizleme
Anahtarı temizlemeye veya kurtarmaya çalışmadan önce uzun süre çalışan işlemin tamamlanmasını beklemeniz gerekir.
DeleteKeyOperation operation = client.StartDeleteKey("key-name");
// You only need to wait for completion if you want to purge or recover the key.
while (!operation.HasCompleted)
{
Thread.Sleep(2000);
operation.UpdateStatus();
}
DeletedKey key = operation.Value;
client.PurgeDeletedKey(key.Name);
Liste Anahtarları
Bu örnek, belirtilen Azure Key Vault tüm anahtarları listeler.
Pageable<KeyProperties> allKeys = client.GetPropertiesOfKeys();
foreach (KeyProperties keyProperties in allKeys)
{
Console.WriteLine(keyProperties.Name);
}
Şifreleme ve Şifre Çözme
Bu örnek, CryptographyClient
azure Key Vault bir anahtarla şifrelemek ve şifresini çözmek için bir oluşturur ve kullanır.
// Create a new cryptography client using the same Key Vault or Managed HSM endpoint, service version,
// and options as the KeyClient created earlier.
var cryptoClient = client.GetCryptographyClient(key.Name, key.Properties.Version);
byte[] plaintext = Encoding.UTF8.GetBytes("A single block of plaintext");
// encrypt the data using the algorithm RSAOAEP
EncryptResult encryptResult = cryptoClient.Encrypt(EncryptionAlgorithm.RsaOaep, plaintext);
// decrypt the encrypted data.
DecryptResult decryptResult = cryptoClient.Decrypt(EncryptionAlgorithm.RsaOaep, encryptResult.Ciphertext);
Zaman uyumsuz olarak anahtar oluşturma
Zaman uyumsuz API'ler, zaman uyumlu karşılıklarıyla aynıdır, ancak zaman uyumsuz yöntemler için tipik "Zaman uyumsuz" soneki ile geri döner ve bir Görev döndürür.
// Create a key of any type
KeyVaultKey key = await client.CreateKeyAsync("key-name", KeyType.Rsa);
Console.WriteLine(key.Name);
Console.WriteLine(key.KeyType);
// Create a software RSA key
var rsaCreateKey = new CreateRsaKeyOptions("rsa-key-name", hardwareProtected: false);
KeyVaultKey rsaKey = await client.CreateRsaKeyAsync(rsaCreateKey);
Console.WriteLine(rsaKey.Name);
Console.WriteLine(rsaKey.KeyType);
// Create a hardware Elliptic Curve key
// Because only premium Azure Key Vault supports HSM backed keys , please ensure your Azure Key Vault
// SKU is premium when you set "hardwareProtected" value to true
var echsmkey = new CreateEcKeyOptions("ec-key-name", hardwareProtected: true);
KeyVaultKey ecKey = await client.CreateEcKeyAsync(echsmkey);
Console.WriteLine(ecKey.Name);
Console.WriteLine(ecKey.KeyType);
Anahtarları zaman uyumsuz olarak listeleme
Listeleme anahtarları yöntemini beklemeye GetPropertiesOfKeysAsync
dayanmaz, ancak deyimiyle await foreach
kullanabileceğiniz bir AsyncPageable<KeyProperties>
döndürür:
AsyncPageable<KeyProperties> allKeys = client.GetPropertiesOfKeysAsync();
await foreach (KeyProperties keyProperties in allKeys)
{
Console.WriteLine(keyProperties.Name);
}
Anahtarı zaman uyumsuz olarak silme
Temizlemeden önce bir anahtarı zaman uyumsuz olarak silerken, işlemde WaitForCompletionAsync
yöntemini bekleyebilirsiniz.
Varsayılan olarak, bu döngü süresiz olarak döngüye geçer, ancak bir CancellationToken
geçirerek iptal edebilirsiniz.
DeleteKeyOperation operation = await client.StartDeleteKeyAsync("key-name");
// You only need to wait for completion if you want to purge or recover the key.
await operation.WaitForCompletionAsync();
DeletedKey key = operation.Value;
await client.PurgeDeletedKeyAsync(key.Name);
Sorun giderme
Çeşitli hata senaryolarını tanılama hakkında ayrıntılı bilgi için sorun giderme kılavuzumuza bakın.
Genel
.NET SDK'sını kullanarak Azure Key Vault anahtar istemci kitaplığıyla etkileşime geçtiğiniz zaman, hizmet tarafından döndürülen hatalar REST API istekleri için döndürülen aynı HTTP durum kodlarına karşılık gelir.
Örneğin, Azure Key Vault'nizde bulunmayan bir anahtarı almaya çalışırsanız, "Bulunamadı" hatasını belirten bir 404
hata döndürülür.
try
{
KeyVaultKey key = client.GetKey("some_key");
}
catch (RequestFailedException ex)
{
Console.WriteLine(ex.ToString());
}
İşlemin istemci istek kimliği gibi ek bilgilerin günlüğe kaydedildiğini fark edeceksiniz.
Message:
Azure.RequestFailedException : Service request failed.
Status: 404 (Not Found)
Content:
{"error":{"code":"KeyNotFound","message":"Key not found: some_key"}}
Headers:
Cache-Control: no-cache
Pragma: no-cache
Server: Microsoft-IIS/10.0
x-ms-keyvault-region: westus
x-ms-request-id: 625f870e-10ea-41e5-8380-282e5cf768f2
x-ms-keyvault-service-version: 1.1.0.866
x-ms-keyvault-network-info: addr=131.107.174.199;act_addr_fam=InterNetwork;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000;includeSubDomains
X-Content-Type-Options: nosniff
Date: Tue, 18 Jun 2019 16:02:11 GMT
Content-Length: 75
Content-Type: application/json; charset=utf-8
Expires: -1
Sonraki adımlar
Bu GitHub deposunda çeşitli Azure Key Vault anahtarları istemci kitaplığı örnekleri sağlanır. Bu örnekler, Azure Key Vault çalışırken yaygın olarak karşılaşılan ek senaryolar için örnek kod sağlar:
Sample1_HelloWorld.md - Azure Key Vault ile çalışmak için:
- Bir anahtar oluşturma
- Var olan bir anahtarı alma
- Mevcut anahtarı güncelleştirme
- Bir anahtarı silme
Sample2_BackupAndRestore.md - Azure Key Vault anahtarlarıyla çalışan kod parçacıklarını içerir; örneğin:
- Anahtarı yedekleme ve kurtarma
Sample3_GetKeys.md - Azure Key Vault anahtarlarıyla çalışmaya yönelik örnek kod:
- Anahtar oluşturma
- Key Vault tüm anahtarları listeleme
- Key Vault anahtarları güncelleştirme
- Belirtilen anahtarın sürümlerini listeleme
- anahtarları Key Vault silme
- Key Vault silinen anahtarları listeleme
Sample4_EncryptDecrypt.md - Azure Key Vault anahtarlarıyla şifreleme işlemleri gerçekleştirmeye yönelik örnek kod:
- CryptographyClient ile verileri şifreleme ve şifre çözme
Sample5_SignVerify.md - Azure Key Vault anahtarlarıyla çalışmaya yönelik örnek kod:
- Önceden hesaplanmış özet imzalama ve İmzala ve Doğrula ile imzayı doğrulama
- Ham verileri imzalama ve SignData ve VerifyData ile imzayı doğrulama
Sample6_WrapUnwrap.md - Azure Key Vault anahtarlarıyla çalışmaya yönelik örnek kod:
- Simetrik anahtarı sarmalama ve sarmalama
Diğer Belgeler
- Azure Key Vault hakkında daha kapsamlı belgeler için API başvuru belgelerine bakın.
- Gizli diziler istemci kitaplığı için bkz . Gizli diziler istemci kitaplığı.
- Sertifikalar istemci kitaplığı için bkz. Sertifikalar istemci kitaplığı.
Katkıda bulunma
Bu kitaplıkları oluşturma, test etme ve bunlara katkıda bulunma hakkında ayrıntılı bilgi için CONTRIBUTING.md bakın.
Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için bkz. https://cla.microsoft.com.
Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.
Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları SSS bölümüne bakın veya ek sorular veya yorumlarla iletişime geçin opencode@microsoft.com .
Azure SDK for .NET