आप तकनीक है कि Azure ब्लॉब भंडारण बाकी (लिफाफा विधि) पर आंकड़ों को कूट का उपयोग करता है का उपयोग कर सकते हैं: https://docs.microsoft.com/en-us/azure/storage/storage-client-side-encryption
KeyVault लपेटें करने के लिए/खोलना (एन्क्रिप्ट/डिक्रिप्ट) सममित कुंजी तो वे के लिए सुरक्षित हैं की क्षमता है आप अपने एन्क्रिप्टेड डेटा के साथ स्टोर करने के लिए।
यहाँ सामान्य कदम हैं:
- Generaete एक एईएस कुंजी (256 बिट, सीबीसी मोड) RNGCryptoServiceProvider
- डेटा एन्क्रिप्ट (साख) का उपयोग कर
- सहेजें प्रारंभ वेक्टर (चतुर्थ)। जब आप डिक्रिप्ट करना चाहते हैं तो आप इसे पुनर्प्राप्ति के लिए सिफरटेक्स्ट बाइट सरणी में बस जोड़ सकते हैं - IV को संरक्षित की आवश्यकता नहीं है।
- कुंजीवॉल्ट में कुंजी का उपयोग करके जेनरेटेड एईएस सममित कुंजी को लपेटें (एन्क्रिप्ट करें)।
- स्टोर लपेटा हुआ एईएस कुंजी, IV, सिफर टेक्स्ट, और कुंजी संस्करण (KeyVault में यूआरआई के अंत में GUID)।
- सुनिश्चित करें कि आप 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();
कुंजी बैकअप/वसूली और कुंजी रोटेशन के बारे में सोचने के लिए अन्य विवरण हैं।
बस उत्सुक है, क्या आप 'सेवा खाता' के बारे में बात करते हैं, जो उनकी ओर से उपयोगकर्ता के Azure सदस्यता का प्रबंधन करने के लिए है? –
नोप @ गौरववंट्री। वे डायनेमिक्स सीआरएम सेवा खाते के लिए प्रमाण पत्र होंगे। खाते का उपयोग डायनेमिक्स सीआरएम में एक डेमॉन ऐप के माध्यम से इकाइयों को अपडेट करने के लिए किया जाएगा। बीटीडब्ल्यू, ब्लॉग और लेखों पर अच्छा काम है, मैं आपके ब्लॉग का पालन करता हूं ;-) –
सेवा खाता उपयोगकर्ता नाम और पासवर्ड व्यवस्थापक द्वारा दर्ज किया जाएगा, तो उन्हें फिर से एज़ूर कुंजी वॉल्ट में जोड़ने का क्या महत्व है? –