Клиентское шифрование на стороне хранилища Azure - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь проверить шифрование на стороне клиента с помощью учетной записи хранения Azure. До сих пор я создал группу ресурсов и поместил свое KeyVault, зарегистрированное приложение в Active Directory, а внутри своего keyVault я создал секрет.

Я думаю, что мне не удается сопоставить мой секрет с моей учетной записью хранения, но я решил, что они должны работать, если они находятся в одной группе ресурсов.

enter image description here

$key = "qwertyuiopasdfgh"
$b = [System.Text.Encoding]::UTF8.GetBytes($key)
$enc = [System.Convert]::ToBase64String($b)
$secretvalue = ConvertTo-SecureString $enc -AsPlainText -Force

$secret = Set-AzureKeyVaultSecret -VaultName 'ectotecStorageKeyVault' -Name 'ectotecSecret' -SecretValue $secretvalue -ContentType "application/octet-stream"

![enter image description here

Проблема в том, что я получаю недопустимый секрет при условии ошибки со следующим кодом:

namespace cifradoApp

{

class Program

    {

    private async static Task<string> GetToken(string authority, string resource, string scope)
    {
        var authContext = new AuthenticationContext(authority);
        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;
    }

    static void Main(string[] args)
    {





        // This is standard code to interact with Blob storage.
        StorageCredentials creds = new StorageCredentials(
           ConfigurationManager.AppSettings["accountName"],
           ConfigurationManager.AppSettings["accountKey"]
        );

        CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
        CloudBlobClient client = account.CreateCloudBlobClient();
        CloudBlobContainer contain = client.GetContainerReference(ConfigurationManager.AppSettings["container"]);
        contain.CreateIfNotExists();

        // The Resolver object is used to interact with Key Vault for Azure Storage.
        // This is where the GetToken method from above is used.
        KeyVaultKeyResolver cloudResolver = new KeyVaultKeyResolver(GetToken);


        // Retrieve the key that you created previously.
        // The IKey that is returned here is an RsaKey.
        // Remember that we used the names contosokeyvault and testrsakey1.
        var rsa = cloudResolver.ResolveKeyAsync("https://ectotecstoragekeyvault.vault.azure.net/secrets/ectotecSecret/dee97a40c78a4638bbb3fa0d3e13f75e", CancellationToken.None).GetAwaiter().GetResult();

        // Now you simply use the RSA key to encrypt by setting it in the BlobEncryptionPolicy.
        BlobEncryptionPolicy policy = new BlobEncryptionPolicy(rsa, null);
        BlobRequestOptions options = new BlobRequestOptions() { EncryptionPolicy = policy };

        // Reference a block blob.
        CloudBlockBlob blob = contain.GetBlockBlobReference("BlobPruebaEncrypted.txt");

        // Upload using the UploadFromStream method.
        using (var stream = System.IO.File.OpenRead(@"C:\Users\moise\Desktop\ectotec stuff\Visual Studio\azureStorageSample\container\BlobPrueba.txt"))
        blob.UploadFromStream(stream, stream.Length, null, options, null);



    }







}
}

Настройки моего приложения, кажется, работают нормально, так как раньше я действовал только с моей учетной записью и ключом для доступа к учетной записи хранения, так как я проводил тесты, не пытаясь выполнить шифрование на стороне клиента, все работало просто отлично. Кажется, проблема в секрете.

ОШИБКА, КОГДА Я ПЫТАЮСЯ ЗАГРУЗИТЬ ЧТО-ТО В МОЙ КОНТЕЙНЕР УЧЕТА ХРАНИЛИЩА (BLOB)

AdalException: {"error": "invalid_client", "error_description": "AADSTS70002: Ошибка при проверке учетных данных. AADSTS50012: Предоставлен неверный секретный ключ клиента. \ R \ nTrace ID: 52047a12-b950-4d8a-9206-120e383feb00 \ r \ nКорреляционный идентификатор: e2ad8afe-4272-49aa-94c0-5dad435ffc45 \ r \ nTimestamp: 2019-01-02 17: 10: 32Z "," error_codes ": [70002,50012]," timestamp ":" 2019-01-02 17: 10: 32Z "," trace_id ":" 52047a12-b950-4d8a-9206-120e383feb00 "," correlation_id ":" e2ad8afe-4272-49aa-94c0-5dad435ffc45 "}: неизвестная ошибка

<appSettings>
  <add key="accountName" value="sampleExample"/>
  <add key="accountKey" value="KeyForMyApp"/>
  <add key="clientId" value="app-id"/>
  <add key="clientSecret" value="qwertyuiopasdfgh"/>
  <add key="container" value="ectotec-sample2"/>
</appSettings>

Я пытаюсь повторить пример из этого урока:

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-encrypt-decrypt-blobs-key-vault

1 Ответ

0 голосов
/ 02 января 2019

Вы должны убедиться, что вы предоставили свои права на чтение ключей.Это отдельно от разрешений RBAC для хранилища ключей.

Для этого перейдите к хранилищу ключей на портале, в меню слева вы увидите раздел настроек, а под ним элемент под названием«Политики доступа», нажмите на это.

Access Policies

Затем вы хотите нажать кнопку «Добавить новый».В открывшемся окне щелкните раздел «Выбор участника» и введите имя или идентификатор приложения, к которому вы хотите получить доступ.Выберите соответствующие разрешения для ключей, секретов или сертификатов и нажмите кнопку ОК.

Это вернет вас к списку авторизованных пользователей, обязательно нажмите «Сохранить» в левом верхнем углу (не очевидно, что вам нужнодля этого) ваше приложение должно иметь доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...