Как я могу предоставить доступ к хранилищу ключей назначенному пользователю идентификатору? - PullRequest
0 голосов
/ 11 марта 2019

Можно ли предоставить доступ к хранилищу ключей назначенному пользователю идентификатору?

В разделе «Управляемые удостоверения» на портале Azure я создал новое удостоверение «KeyVaultIdentity», которое назначил его веб-приложению (в разделе «Удостоверение», вкладка «Назначенные пользователем удостоверения»). В политиках доступа из хранилища ключей я добавил новую созданную идентификацию «KeyVaultIdentity» и предложил разрешения для доступа к секретам.

Я использую следующий код для доступа к хранилищу ключей:

try
        {
            /* The below 4 lines of code shows you how to use AppAuthentication library to fetch secrets from your Key Vault*/
            AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
            KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            var secret = await keyVaultClient.GetSecretAsync("https://play9VaultDemo.vault.azure.net/secrets/AppSecret")
                .ConfigureAwait(false);
            Message = secret.Value;

            /* The below do while logic is to handle throttling errors thrown by Azure Key Vault. It shows how to do exponential backoff which is the recommended client side throttling*/
            do
            {
                long waitTime = Math.Min(getWaitTime(retries), 2000000);
                secret = await keyVaultClient.GetSecretAsync("https://play9VaultDemo.vault.azure.net/secrets/AppSecret")
                    .ConfigureAwait(false);
                retry = false;
            }
            while (retry && (retries++ < 10));
        }
        /// <exception cref="KeyVaultErrorException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        catch (KeyVaultErrorException keyVaultException)
        {
            Message = keyVaultException.Message;
            if ((int)keyVaultException.Response.StatusCode == 429)
                retry = true;
        }

Но там говорится, что доступ запрещен, когда я пытаюсь получить доступ к секрету. Однако, если в Key Vault я предоставляю доступ к системному назначению веб-приложения, я могу получить доступ к секрету,

Есть ли у вас какие-либо идеи, как я могу заставить эту работу работать с назначенным пользователем удостоверением личности?

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

У меня была та же проблема, и мне приходилось делать две вещи, чтобы постепенно становиться «запрещенными» каждый раз, когда я пытался получить доступ к KeyVault с назначенным пользователем идентификатором:

  1. Обновлениеверсия Microsoft.Azure.Services.AppAuthentication, которую я использовал для 1.2.0-preview2.В более ранних версиях нет поддержки назначенных пользователем удостоверений.

  2. Передайте строку подключения в конструктор AzureServiceTokenProvider, чтобы сообщить службе, какой идентификатор использовать.Это бит, который опущены во всех ссылках выше.Итак, у меня было:

    var connectionString = "RunAs = App; AppId =";
    var azureServiceTokenProvider = new AzureServiceTokenProvider (connectionString);

вместо:

var azureServiceTokenProvider = new AzureServiceTokenProvider();

Чтобы найти значение для своего clientId, откройте управляемую идентификационную информацию на портале Azure.Вы должны увидеть поле с пометкой «Идентификатор клиента».Это тот, который вы хотите.

0 голосов
/ 12 марта 2019

Есть ли у вас какие-либо идеи, как я могу заставить эту работу работать с назначенным пользователем удостоверением личности?

Вы можете выполнить шаги из Как использовать управляемые удостоверения для службы приложений и функций Azure .

Вот шаги:

1.В веб-приложении Identity, нажмите User Assigned(preview) и добавьте свой назначенный пользователем управляемый идентификатор.

2.Добавление назначенного пользователем типа и cotells Azure для создания и управления удостоверением для вашего приложения с помощью шаблона Azure Resource Manager.

"identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]": {}
        }
    }

3.Если вы запрашиваете токен для Key Vault, вам необходимо убедиться, что вы добавили политику доступа, которая включает идентификацию вашего приложения . В противном случае ваши звонки в Key Vault будут отклонены, даже если они содержат токен.

enter image description here

4.Использование библиотеки Microsoft.Azure.Services.AppAuthentication для .NET для получения секрета.

var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var keyVaultClient = new KeyVaultClient(
               new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

            var secret = keyVaultClient.GetSecretAsync("https://yourkeyvaultname.vault.azure.net/secrets/secretname").Result.Value;

5. Вывод, как показано ниже: enter image description here

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