似乎我on a journey首先以编程方式创建Azure应用程序,然后使用Azure Management API创建一些资源。我想向社群提出一个新问题,如何使用New-AzureRmRoleAssignment -RoleDefinitionName Owner -ServicePrincipalName $adApp.ApplicationId.Guid
基本上执行PowerShell命令HttpClient
(或者使用Microsoft Graph API库获得具有所需权限的智能方法)。 / p>
这次尝试成为一个更好的人(更多地提供代码),我prepared a repo in GH,但问题基本上归结为应该使用什么类型的URI(here)。代码是
var roleAssignment = $"{{something here}}";
var roleAssignementContent = new StringContent(roleAssignment, Encoding.UTF8, "application/json");
var roleAssignmentResponse = await client.PostAsync($"https://graph.windows.net/{tenants.value[0].tenantId}/applications/{createdApplication.appId}?api-version=1.6", roleAssignementContent).ConfigureAwait(false);
var roleAssignement = await roleAssignmentResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
如果使用它(或库)更容易,但运气不好,我也会摆弄Graph API Explorer。实际上,最终目标是以编程方式创建应用程序,以便可以使用Azure Management Libraries进行部署。也就是说,所有代码都是从开头到结尾。
(此外,代码质量一提,仅提供更多功能的示例。)
答案 0 :(得分:2)
New-AzureRmRoleAssignment用于将指定的RBAC角色分配给指定的服务主体,您可以使用Resource Manager create role assignment API来实现:
获取应用服务主体的ObjectId。
如果您之前有过应用服务主体的objectId,则可以跳过此步骤。如果没有,您可以使用Azure广告图API来按应用程序ID请求应用程序的服务主体:
GET https://graph.windows.net/<TenantID>/servicePrincipals?$filter=servicePrincipalNames/any(c:%20c%20eq%20'applicationID')&api-version=1.6
Authorization: Bearer eyJ0eXAiOiJK*****-kKorR-pg
获取Azure RBAC角色标识符
要为服务主体分配适当的RBAC角色,您必须知道Azure RBAC角色的标识符(方案中的所有者),您可以调用Resource Manager role definition API列出所有Azure RBAC角色并搜索然后迭代在结果上按名称找到所需的角色定义。:
GET https://management.azure.com/subscriptions/ed0caab7-c6d4-45e9-9289-c7e5997c9241/providers/Microsoft.Authorization/roleDefinitions?$filter=roleName%20eq%20'Owner'&api-version=2015-07-01
Authorization: Bearer
将相应的RBAC角色分配给服务主体:
PUT https://management.azure.com/subscriptions/ed0caab7-c6d4-45e9-9289-c7e5997c9241/providers/Microsoft.Authorization/roleAssignments/16fca587-013e-45f2-a03c-cfc9899a6ced?api-version=2015-07-01
Authorization: Bearer eyJ0eXAiOiJKV1QiL*****FlwO1mM7Cw6JWtfY2lGc5
Content-Type: application/json
{
"properties": {
"roleDefinitionId": "/subscriptions/XXXXXXXXXXXXXXX/providers/Microsoft.Authorization/roleDefinitions/XXXXXXXXXXXXXXXXX",
"principalId": "XXXXXXXXXXXXXXXXXXXXX"
}
}
roleDefinitionId
是您在第2步中获得的ID,principalId
是您在第1步中获得的objectId。 ed0caab7-c6d4-45e9-9289-c7e5997c9241
是订阅ID,16fca587-013e-45f2-a03c-cfc9899a6ced
是为新角色分配创建的新guid。
有关详细信息,请参阅以下文档:
Use Resource Manager authentication API to access subscriptions