#azure-active-directory #azure-resource-manager #azure-managed-identity
#azure-active-каталог #azure-менеджер ресурсов #управляемая azure идентификация
Вопрос:
Приложению необходимо указать назначение роли RBAC для данного ресурса. Это работает локально, используя мои собственные учетные данные ( AzureCliCredential
), но не при развертывании в Azure с использованием ManagedIdentityCredential
. Я полагаю, это потому, что я являюсь владельцем подписки.
Как бы я разрешил MSI иметь разрешения на чтение/список в отношении самого ARM?
Используется следующий код.
public static async Tasklt;RoleAssignmentsResultgt; GetRoleAssignmentsFor(string resource) { const string VERSION = "2018-01-01-preview"; string url = $"https://management.azure.com/{resource}/providers/Microsoft.Authorization/roleAssignments?$filter=atScope()amp;api-version={VERSION}"; Stream respBody = await _request(url); var result = await JsonSerializer.DeserializeAsynclt;RoleAssignmentsResultgt;(respBody); return result; } private static async Tasklt;Streamgt; _request(string url) { HttpRequestMessage req = new(HttpMethod.Get, new Uri(url)); string[] scopes = { "https://management.azure.com" }; ManagedIdentityCredential cred = new(); TokenRequestContext ctx = new(scopes); return await cred.GetTokenAsync(ctx); req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", jwt.Token); HttpResponseMessage res = await new HttpClient.SendAsync(req); return await res.Content.ReadAsStreamAsync(); }
Комментарии:
1. Я думаю, что Управляемая личность нуждается в роли читателя. Попробуйте назначить ему роль читателя на ресурсе.
2. Во избежание сомнений, ресурсом будет подписка, верно?
3. Вы должны иметь возможность установить его на уровне ресурсов/групп ресурсов/подписки.
Ответ №1:
Спасибо @juunas. Как вы предложили в комментариях к вопросу, назначение Reader
роли ресурса MSI сделало свое дело. Поскольку меня интересовал список назначений ролей для отдельных секретов KeyVault, я выбрал хранилище в качестве области действия.