2016-10-20 14 views
5

Bir hizmet programı tarafından kullanılacak hizmet hesabı için kullanıcı adı ve parola kaydetmek istediğim bir uygulama üzerinde çalışıyorum. Bu fikir, uygulama yöneticisine servis hesabı için kimlik bilgilerini girebileceği ve daha sonra güvenli bir yerde saklanabileceği bir gösterge panosu sağlamaktır.Kullanıcı adı ve parolayı saklamak için Azure Key Vault özelliğini kullanma

Azure Kasası gibi güvenli bir yerde depolamayı ve gerektiğinde onu buradan alabileceğinizi düşünüyorum. Ancak, anahtar ve gizli Azure Vault'ta farklı varlıklardır. Onları bir arada bir arada saklayamıyorum.

Bunu daha önce yapmış olan var mı? Ya da Azure'da kimlik bilgilerini saklamak için daha iyi bir alternatif var mı? https://docs.microsoft.com/en-us/azure/storage/storage-client-side-encryption

KeyVault sarılı (şifrelemek/deşifre)/onlar için güvenli olacak şekilde simetrik anahtar sarın yeteneğine sahiptir: Azure damla depolama desteği (kaplama yöntemi) verileri şifreler için kullandığı teknik kullanabilir

+0

Sadece merak ediyorum, konuştuğunuz "hizmet hesabı", kullanıcının Azure Aboneliğini kendi adlarına yönetmek için mi? –

+0

Nope @GauravMantri. Dynamics CRM hizmet hesabı için kimlik bilgileri. Hesap, Dynamics CRM'deki varlıkları bir daemon uygulamasıyla güncellemek için kullanılacaktır. Btw, Bloglar ve makaleler üzerinde iyi çalışmalar var, bloglarınızı takip ediyorum ;-) –

+0

Servis hesabı kullanıcı adı ve şifresi yönetici tarafından girilecek, bu yüzden onları tekrar azure anahtar kasasına ekleme değeri nedir? –

cevap

4

Şifrelenmiş verilerinizle birlikte saklamak için. İşte

genel adımlar şunlardır:
  1. Generaete RNGCryptoServiceProvider
  2. kakmak verileri (kimlik) kullanılarak AES anahtarı (256 bit, CBC modu)
  3. kaydet Başlatma Vektör (IV). Sadece şifresini çözmek istediğinizde erişim için ciphertext bayt dizisine katılabilirsiniz - IV korumalı gerekmez.
  4. KeyVault'daki Anahtarı kullanarak, orijinal AES Simetrik Anahtarını sarın (şifreleyin).
  5. Sarılmış AES Anahtarı, IV, CipherText ve Anahtar Sürümünü (KeyVault'da URI'nın sonunda bulunan GUID) saklayın.
  6. KeyVault'da Wrap/Unwrap izinlerini Azure AD'de oluşturulan Uygulama Kaydı için sağladığınızdan emin olun. GetToken() içindeki Azure'a auth için Client Id/Application ID + Key veya pfx kullanın.

Bu Nuget paketleri gerekir:

Install-Package Microsoft.Azure.KeyVault 
Install-Package Microsoft.Azure.KeyVault.Extensions 
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.16.204221202 

KeyVaultKeyResolver

KeyVaultKeyResolver cloudResolver = new KeyVaultKeyResolver(Utils.GetToken); 

// Example GetToken implementation 
public class Utils { 
    // Retrive JWT token to be used for KeyVault access. 
    internal async static Task<string> GetToken(string authority, string resource, string scope) 
    { 
     var authContext = new AuthenticationContext(authority); 
     // Could use pfx instead 
     ClientCredential clientCred = new ClientCredential(
      ConfigurationManager.AppSettings["clientId"], 
      ConfigurationManager.AppSettings["clientSecret"]); 

     AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred); 

     if (result == null) 
      throw new InvalidOperationException("Failed to obtain the JWT token."); 

     return result.AccessToken; 
    } 
} 

bir ref alın size KeyResolver bana ulaştıktan sonra, bir Ikey sizin AES/sarın kakışıyor alabilirsiniz aşağıdaki gibi simetrik anahtar ...

AES Tuşu Sarma/Şifrele

KeyID Anahtar Kasası'ndan URI ve aesKey byte [] AES anahtarı şifrelemek için geçerli:

// Resolve an IKey by Key ID from URI in KeyVault 
var keyEncryptionKey = cloudResolver.ResolveKeyAsync(keyId, CancellationToken.None).GetAwaiter().GetResult(); 

// Take our gen'ed AES Key and wrap (encrypt) it. 
Tuple<byte[], string> wrappedKey = keyEncryptionKey.WrapKeyAsync(aeskey, null /* algorithm */, CancellationToken.None).GetAwaiter().GetResult(); 

kayıt düzeni içinde bayt [] simetrik anahtar ve şifrelenmiş bayt içerir Kullanılan algoritmanın adı. Bunları meta metninizle meta verileri olarak kaydedin.aynı anahtarı (anahtar sürüm konularda) kullanılarak

Unwrap/azalmak AES anahtar

Çağrı, algoName tuşuna (örneğin, "RSA-OAEP") sarmak için kullanılan algoritmanın adıdır.

// Retrieve the IKey by Key ID 
// Unwrap Key 
byte[] aesKey = rsa.UnwrapKeyAsync(wrappedKeyBytes, algoName, CancellationToken.None).GetAwaiter().GetResult(); 

Düşünülmesi gereken diğer detaylar Anahtar yedekleme/kurtarma ve anahtar rotasyonudır.

İlgili konular