2017-05-11 3 views
0

私は1つのストレージアカウントからブロブ(複数のGB以上)を取り出し、それをコピーして別のブロブストレージアカウントに入れる必要があるシナリオを持っています。 BlobEncryptionPolicyを設定し、StartCopyAsyncを実行することで、これを行うことができるようです。ただし、これにはKey Vaultアクセスが必要で、この暗号化BLOBをダウンロードするシステムはそのVaultにアクセスできません。また、受信者の秘密鍵にアクセスすることもできません(私たちのものではなく、自分のものであるため).pfxを私たちの金庫にロードすることはできません。Azureブロブのモーション暗号化

これ以外のオプションはどこにあるのかはわかりません: 1.ブロブをクラウドサービスのファイルシステム(またはアジレスファイルストレージアカウント)にダウンロードして暗号化します。 2.暗号化されたファイルを宛先BLOBストレージアカウントにアップロードします。 3.共有から暗号化されたファイルを削除します。

この場合、他の方法もありますか?

答えて

1

この場合、他の方法がありますか?

私が知る限り、紺碧のストレージには2つの暗号化があります。

1つはserver-side encryptionです。Azure Storageは、保存前にデータを自動的に暗号化し、取得前に復号化します。暗号化、復号化、および鍵管理は、ユーザーには完全に透過的です。

この方法を使用すると、Azureはストレージサーバーにアップロードするときにデータを暗号化します。 これは、ユーザーがアクセスしたいときにデータを復号化します。

あなたが直接、以下のようにポータルでそれを可能にすることができる:

enter image description here

もう一つは、クライアント側の暗号化では、我々はデータを暗号化するために、紺碧のキー値またはローカルキーの値を使用することができます。

クライアントサイドの暗号化を使用する場合は、BLOBからファイルをダウンロードし、暗号化して別のストレージアカウントにアップロードする必要があります。

This is the client-side Encryption without use azure key-value way.

私たちは、あなたがローカルでこのRSA鍵を格納することができ、それを暗号化するローカルのRSAキーを作成することができます。

BLOBから暗号化されたコンテンツを復号化する場合は、rsaキーを使用できます。

詳細は、あなたがサンプルの下を参照できます。

LocalResolver.cs

public class LocalResolver : IKeyResolver 
    { 
     private Dictionary<string, IKey> keys = new Dictionary<string, IKey>(); 

     public void Add(IKey key) 
     { 
      keys[key.Kid] = key; 
     } 

     public async Task<IKey> ResolveKeyAsync(string kid, CancellationToken token) 
     { 
      IKey result; 

      keys.TryGetValue(kid, out result); 

      return await Task.FromResult(result); 
     } 
    } 

アップロード暗号化ブロブとダウンロード復号化ブロブ(iKeyを格納するために使用されます):

static void Main(string[] args) 
     { 
      Console.WriteLine("Blob encryption sample"); 

      // Retrieve storage account information from connection string 
      // How to create a storage connection string - https://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ 
      CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
      "DefaultEndpointsProtocol=https;AccountName=brandofirststorage;AccountKey=4j8EjQzNtkzQ22Xp3NZcxvJz/+PUOOOQRTSZ9TieQg1lYM6eBCDpKoJgMcNWoG6p1GjMQhkYrxPKRBralzQoZA==;EndpointSuffix=core.windows.net"); 

      CloudBlobClient client = storageAccount.CreateCloudBlobClient(); 
      CloudBlobContainer container = client.GetContainerReference("example"); 


       container.CreateIfNotExists(); 
       int size = 5 * 1024 * 1024; 
       byte[] buffer = new byte[size]; 

       Random rand = new Random(); 
       rand.NextBytes(buffer); 

       CloudBlockBlob blob = container.GetBlockBlobReference("test"); 

       // Create the IKey used for encryption. 
       RsaKey key = new RsaKey("private:key1"); 

       // Create the encryption policy to be used for upload. 
       BlobEncryptionPolicy uploadPolicy = new BlobEncryptionPolicy(key, null); 

       // Set the encryption policy on the request options. 
       BlobRequestOptions uploadOptions = new BlobRequestOptions() { EncryptionPolicy = uploadPolicy }; 

       Console.WriteLine("Uploading the encrypted blob."); 

       // Upload the encrypted contents to the blob. 
       using (MemoryStream stream = new MemoryStream(buffer)) 
       { 
        blob.UploadFromStream(stream, size, null, uploadOptions, null); 
       } 





       // Download the encrypted blob. 
       // For downloads, a resolver can be set up that will help pick the key based on the key id. 
       LocalResolver resolver = new LocalResolver(); 
       resolver.Add(key); 

       BlobEncryptionPolicy downloadPolicy = new BlobEncryptionPolicy(null, resolver); 

       // Set the decryption policy on the request options. 
       BlobRequestOptions downloadOptions = new BlobRequestOptions() { EncryptionPolicy = downloadPolicy }; 

       Console.WriteLine("Downloading the encrypted blob."); 

       // Download and decrypt the encrypted contents from the blob. 
       using (MemoryStream outputStream = new MemoryStream()) 
       { 
        blob.DownloadToStream(outputStream, null, downloadOptions, null); 
       } 

       Console.WriteLine("Press enter key to exit"); 
       Console.ReadLine(); 


     } 

さらに、コピーブロブ操作では、単にサーバー側のソースからターゲットにバイトをコピーします。したがって、サーバーがファイルをコピーするときには暗号化されません。

+0

Hrm。それはうまくいくかもしれない。私はそれを試して、今日ここに報告します。 –

+0

これを読んだあと、これはまだ2部構成であるように見えます。まず、データをどこかで(ディスク上のファイルのように)ダウンロードして暗号化して保存する必要があります。次に、そのファイルを2番目のBLOB格納場所にアップロードする必要があります。 –

+0

答えを更新します。 –