KeyVaultは/アンラップをラップする能力を持っている(暗号化/復号化)対称鍵を暗号化されたデータと一緒に保存してください。初期化ベクトル(IV)のデータを暗号化RNGCryptoServiceProvider
を使用して
- Generaete AESキー(256ビット、CBCモード)(資格情報)
- 割引:ここ
は、一般的な手順です。後で解読したいときに検索のために暗号文のバイト配列に連結するだけで済みます.IVは保護する必要がありません。
- Key in Keyを使用して、生成されたAES対称鍵をラップ(暗号化)します。
- Wraped AES Key、IV、CipherText、およびKey Version(KeyVaultのURIの末尾にあるGUID)を格納します。
- Azure ADで作成されたアプリケーション登録に、KeyVaultでのラップ/アンラップ権限を付与していることを確認してください。 GetToken()でクライアントID /アプリケーションID +キーまたはpfxを使用してAzureに認証します。
あなたはこれらのnugetのパッケージが必要になります:
Install-Package Microsoft.Azure.KeyVault
Install-Package Microsoft.Azure.KeyVault.Extensions
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.16.204221202
は、あなたがKeyResolverを持っていたら、あなたはIKEYがあなたのAESのラップを解除/ラップするために取得することができます
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;
}
}
KeyVaultKeyResolver
へのREFを取得します。以下のように対称キーを使用してください。 ラップ/暗号化AESキー
鍵IDをキーVaultとaesKeyからURIは[]暗号化するために、あなたのAESキーのバイトである:
// 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();
バイトが[]タプルの対称鍵との暗号化されたバイトが含まれています使用されるアルゴリズムの名前。これらを暗号文でメタデータとして保存します。同じキー(鍵のバージョン事項)を使用して
アンラップ/復号化AESキー
コール、algoNameは、キー(例えば、「RSA-OAEP」)をラップするために使用されるアルゴリズムの名前です。
// Retrieve the IKey by Key ID
// Unwrap Key
byte[] aesKey = rsa.UnwrapKeyAsync(wrappedKeyBytes, algoName, CancellationToken.None).GetAwaiter().GetResult();
その他の詳細については、キーのバックアップ/復元とキーローテーションがあります。
あなたが話している「サービスアカウント」は、ユーザーのAzureサブスクリプションを管理するためのものですか? –
Nope @GauravMantriこれらはDynamics CRMサービスアカウントの資格情報になります。このアカウントは、デーモンアプリを使用してDynamics CRMのエンティティを更新するために使用されます。あなたのブログに従ってください;-) –
サービスアカウントのユーザ名とパスワードはadminによって入力されるため、Azure鍵保管庫に再び追加する価値は何ですか? –