#c# #azure #encryption #azure-blob-storage #azure-keyvault
Вопрос:
Я следую этому документу, чтобы зашифровать данные с помощью ключа в Azure Key Vault и загрузить в хранилище больших двоичных объектов Azure
Мне удалось зашифровать и загрузить с помощью ключа в azure key vault, но я получаю ошибку при расшифровке и загрузке данных
StorageCredentials dcreds = new StorageCredentials("storage-account-name", "storage-account-key");
CloudStorageAccount daccount = new CloudStorageAccount(dcreds, useHttps: true);
CloudBlobClient dclient = daccount.CreateCloudBlobClient();
CloudBlobContainer dcontain = dclient.GetContainerReference("container-name");
KeyVaultKeyResolver dcloudResolver = new KeyVaultKeyResolver(GetToken);
var drsa = dcloudResolver.ResolveKeyAsync(
"https://my-key-vault.vault.azure.net/keys/my-key",
CancellationToken.None).GetAwaiter().GetResult();
BlobEncryptionPolicy dpolicy = new BlobEncryptionPolicy(null, dcloudResolver);
BlobRequestOptions doptions = new BlobRequestOptions() { EncryptionPolicy = dpolicy };
CloudBlockBlob dblob = dcontain.GetBlockBlobReference("Data.txt");
using (var np = File.Open(@"Data.txt", FileMode.Create))
dblob.DownloadToStream(np, null, doptions, null);
Data.txt зашифрованный большой двоичный объект находится в контейнере
Трассировка стека ниже
Microsoft.Azure.Storage.StorageException: "Decryption logic threw error. Please check the inner exception for more details."--->System.AggregateException:
"One or more errors occurred. (Operation returned an invalid status code 'Forbidden')"--->Microsoft.Azure.KeyVault.Models.KeyVaultErrorException:
"Operation returned an invalid status code 'Forbidden'"
at at Microsoft.Azure.KeyVault.KeyVaultClient.<UnwrapKeyWithHttpMessagesAsync>d__58.MoveNext()n
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()n
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)n
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)n
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()n
at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.<UnwrapKeyAsync>d__5.MoveNext()
---End of inner exception stack trace ---
at at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)n
at System.Threading.Tasks.Task`1.get_Result()n
at Microsoft.Azure.KeyVault.KeyVaultKey.<>c.<UnwrapKeyAsync>b__14_0(Task`1 result)n
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()n
at System.Threading.Tasks.Task.<>c.<.cctor>b__277_0(Object obj)n
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)n--
- End of stack trace from previous location ---n
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()n
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)n
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Taskamp; currentTaskSlot, Thread threadPoolThread)n-- - End of stack trace from previous location ---n
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()n
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)n
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)n
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()n
at Microsoft.Azure.Storage.Blob.BlobEncryptionPolicy.<>c__DisplayClass13_1.<DecryptBlob>b__2()n
at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func`1 actionToRun)n
at Microsoft.Azure.Storage.Blob.BlobEncryptionPolicy.DecryptBlob(Stream userProvidedStream, IDictionary`2 metadata, ICryptoTransformamp; transform, Nullable`1 requireEncryption, Byte[] iv,
Boolean noPadding)
---End of inner exception stack trace ---
at Microsoft.Azure.Storage.Core.Executor.Executor.<ExecuteAsync>d__1`1.MoveNext()n
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()n
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)n
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)n
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()n
at Microsoft.Azure.Storage.Core.Executor.Executor.<>c__DisplayClass0_0`1.<ExecuteSync>b__0()n
at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func`1 actionToRun)n
at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)n
at Microsoft.Azure.Storage.Blob.CloudBlob.DownloadRangeToStream(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options,OperationContext operationContext)n
at Microsoft.Azure.Storage.Blob.CloudBlob.DownloadToStream(Stream target, AccessCondition accessCondition, BlobRequestOptions options, OperationContextoperationContext)n
at decryptBlobUsingVaultKey.Program.Main(String[] args) in / Users / takeatu / Projects / decryptBlobUsingVaultKey / decryptBlobUsingVaultKey / Program.cs:127
Ответ №1:
Я попытался в своей системе получить возможность шифрования токена и дешифрования большого двоичного объекта
попробуйте предоставить разрешение Get
ВЫВОД:
Комментарии:
1. Существует две конфигурации: 1) разрешенная операция с ключом 2) Разрешение ключа в политике доступа. Мне не хватало 2-й части, я предоставил правильные операции в разрешении ключа в политике доступа, и я смог расшифровать Спасибо