0

看来我正在尝试首先以编程方式创建 Azure 应用程序,然后使用 Azure 管理 API 创建一些资源。我想向社区询问一个新问题,即如何使用基本的 PowerShell 命令New-AzureRmRoleAssignment -RoleDefinitionName Owner -ServicePrincipalName $adApp.ApplicationId.GuidHttpClient或使用 Microsoft Graph API 库具有确切所需权限的一些更智能的方法)。

这次试图成为一个更好的人(更多的人,提供代码),我在 GH 中准备了一个 repo,但问题基本上归结为应该使用什么样的 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 管理库进行部署。也就是说,从头到尾都在代码中。

(此外,代码具有一次性质量,仅提供功能更强大的示例。)

4

1 回答 1

2

New-AzureRmRoleAssignment 用于将指定的 RBAC 角色分配给指定的服务主体,您可以通过使用资源管理器创建角色分配 API来实现:

  1. 获取应用服务主体的 ObjectId。

    如果你之前有应用服务主体的objectId,你可以跳过这一步。如果没有,你可以使用Azure ad graph 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
    
  2. 获取 Azure RBAC 角色标识符

    要将适当的 RBAC 角色分配给您的服务主体,您必须知道 Azure RBAC 角色的标识符(您的场景中的所有者),您可以调用资源管理器角色定义 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 
    
  3. 将适当的 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。

请参阅以下文件了解更多详情:

使用资源管理器身份验证 API 访问订阅

于 2017-07-17T05:45:57.627 回答