2016-10-20 12 views
5

मैं ऐसे ऐप पर काम कर रहा हूं जहां मैं सेवा खाते के लिए उपयोगकर्ता नाम और पासवर्ड स्टोर करना चाहता हूं जिसका उपयोग डेमॉन सेवा द्वारा किया जाएगा।उपयोगकर्ता नाम और पासवर्ड संग्रहीत करने के लिए Azure Key Vault का उपयोग

विचार एप्लिकेशन व्यवस्थापक को एक डैशबोर्ड प्रदान करना है जहां वह सेवा खाते के लिए प्रमाण-पत्र दर्ज कर सकता है और बाद में इसे कहीं सुरक्षित रखा जा सकता है।

मैं इसे एज़ूर वॉल्ट जैसे सुरक्षित स्थान पर संग्रहीत करने के बारे में सोच सकता हूं और जब भी आवश्यक हो वहां से इसे प्राप्त कर सकता हूं। हालांकि, Azure वॉल्ट में कुंजी और रहस्य विभिन्न इकाइयां हैं। मैं उन्हें संयोजन के रूप में कहीं भी स्टोर नहीं कर सकता।

क्या किसी ने इससे पहले किया है? या Azure में क्रेडेंशियल स्टोर करने के लिए कोई बेहतर विकल्प है?

+0

बस उत्सुक है, क्या आप 'सेवा खाता' के बारे में बात करते हैं, जो उनकी ओर से उपयोगकर्ता के Azure सदस्यता का प्रबंधन करने के लिए है? –

+0

नोप @ गौरववंट्री। वे डायनेमिक्स सीआरएम सेवा खाते के लिए प्रमाण पत्र होंगे। खाते का उपयोग डायनेमिक्स सीआरएम में एक डेमॉन ऐप के माध्यम से इकाइयों को अपडेट करने के लिए किया जाएगा। बीटीडब्ल्यू, ब्लॉग और लेखों पर अच्छा काम है, मैं आपके ब्लॉग का पालन करता हूं ;-) –

+0

सेवा खाता उपयोगकर्ता नाम और पासवर्ड व्यवस्थापक द्वारा दर्ज किया जाएगा, तो उन्हें फिर से एज़ूर कुंजी वॉल्ट में जोड़ने का क्या महत्व है? –

उत्तर

4

आप तकनीक है कि Azure ब्लॉब भंडारण बाकी (लिफाफा विधि) पर आंकड़ों को कूट का उपयोग करता है का उपयोग कर सकते हैं: https://docs.microsoft.com/en-us/azure/storage/storage-client-side-encryption

KeyVault लपेटें करने के लिए/खोलना (एन्क्रिप्ट/डिक्रिप्ट) सममित कुंजी तो वे के लिए सुरक्षित हैं की क्षमता है आप अपने एन्क्रिप्टेड डेटा के साथ स्टोर करने के लिए।

यहाँ सामान्य कदम हैं:

  1. Generaete एक एईएस कुंजी (256 बिट, सीबीसी मोड) RNGCryptoServiceProvider
  2. डेटा एन्क्रिप्ट (साख) का उपयोग कर
  3. सहेजें प्रारंभ वेक्टर (चतुर्थ)। जब आप डिक्रिप्ट करना चाहते हैं तो आप इसे पुनर्प्राप्ति के लिए सिफरटेक्स्ट बाइट सरणी में बस जोड़ सकते हैं - IV को संरक्षित की आवश्यकता नहीं है।
  4. कुंजीवॉल्ट में कुंजी का उपयोग करके जेनरेटेड एईएस सममित कुंजी को लपेटें (एन्क्रिप्ट करें)।
  5. स्टोर लपेटा हुआ एईएस कुंजी, IV, सिफर टेक्स्ट, और कुंजी संस्करण (KeyVault में यूआरआई के अंत में GUID)।
  6. सुनिश्चित करें कि आप Azure AD में बनाए गए एप्लिकेशन पंजीकरण में KeyVault में लपेटें/अनवर्रप अनुमतियां दें। GetToken() में Azure के लिए क्लाइंट आईडी/एप्लिकेशन आईडी + कुंजी या पीएफएक्स का उपयोग करें।

आप इन nuget संकुल की आवश्यकता होगी:

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; 
    } 
} 

करने के लिए एक रेफरी जाओ एक बार जब आप KeyResolver है है, तो आप एक iKey लपेटें करने के लिए/खोलना अपने एईएस प्राप्त कर सकते हैं सममित कुंजी निम्नानुसार है ...

लपेटें/एईएस कुंजी एन्क्रिप्ट करें

Keyid कुंजी वॉल्ट से यूआरआई और aesKey बाइट [अपने एईएस कुंजी] एन्क्रिप्ट करने के लिए है:

// 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(); 

बाइट [] टपल में सममित कुंजी और की एन्क्रिप्टेड बाइट का है इस्तेमाल किए गए एल्गोरिदम का नाम। इन्हें अपने सिफरटेक्स्ट के साथ मेटा डेटा के रूप में सहेजें।

खोलना/डिक्रिप्ट एईएस कुंजी

एक ही कुंजी (कुंजी संस्करण मामलों) का उपयोग कर कॉल, algoName कुंजी (जैसे, "आरएसए-OAEP") रैप करने के लिए प्रयोग किया जाता एल्गोरिथ्म का नाम है।

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

कुंजी बैकअप/वसूली और कुंजी रोटेशन के बारे में सोचने के लिए अन्य विवरण हैं।

संबंधित मुद्दे

 संबंधित मुद्दे