Невозможно получить секрет keyvault с назначенной пользователем управляемой идентификацией - PullRequest
0 голосов
/ 09 января 2019

Это кросс-пост от git .
У меня есть консольное приложение, использующее "Microsoft.Azure.Services.AppAuthentication" Version = "1.2.0-preview" и "Microsoft.Azure.KeyVault" Version = "3.0.2".

На виртуальной машине Windows 2019 назначен управляемый идентификатор пользователя.

Управляемому идентификатору было присвоено роль участника на моем keyvault, и он прочитан группе ресурсов, в которой он находится.

Я использую назначенный пользователем управляемый идентификатор, поскольку намерение состоит в том, чтобы запустить подобное приложение в модуле kubernetes (с идентификатором aad-pod). У меня есть переменная среды строки подключения, установленная как AzureServicesAuthConnectionString RunAs = App; ; TenantId =

Когда я пытаюсь подключиться к keyvault, чтобы получить секрет, я получаю Запрещенное исключение:

Необработанное исключение: System.AggregateException: одна или несколько ошибок произошло. (Операция вернула недопустимый код состояния «Запрещено») ---> Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: операция вернул неверный код состояния «Запрещено» в Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretWithHttpMessagesAsync (String vaultBaseUrl, String secretName, String secretVersion, Dictionary`2 customHeaders, CancellationToken cancellationToken) в Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretAsync (IKeyVaultClient операции, String secretIdentifier, CancellationToken cancellationToken) в msiauth.AzureStuff.Run () в C: \ Users \ aiadmin \ src \ azure \ msiauth \ tests.cs: строка 50 --- Конец внутренней трассировки стека исключений --- в System.Threading.Tasks.Task.Wait (Int32 millisecondsTimeout, Отмена взята Отмена взята) в System.Threading.Tasks.Task.Wait () в msiauth.Program.Main (String [] args) в C: \ Users \ aiadmin \ src \ azure \ msiauth \ Program.cs: строка 10

Когда я пытаюсь создать группу ресурсов, используя "Microsoft.Azure.Management.ResourceManager" Version = "2.0.0-preview", она работает нормально, поэтому для этого работает назначенный пользователем MI.

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

Кто-нибудь мог сделать это в ядре .net?

1 Ответ

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

Чтение или запись секретов из или в KeyVault является операцией в самом хранилище ключей и разрешается (или не разрешается) на основании набора политик доступа.

Роль участника, на которую вы ссылаетесь, принадлежит системе RBAC Azure Resource Manager и позволяет управлять KeyVault (например, назначать политики доступа).

Скорее всего, работающая идентификация имеет как назначение RBAC, так и политику доступа. Для того, кто не работает, потребуется политика доступа (и не требуется назначение RBAC)

Подробнее о политиках доступа см .: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-get-started#authorize

...