Как назначить RBAC для ARM для управляемой идентификации

#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, я выбрал хранилище в качестве области действия.