2017-07-16 181 views
0

看起來我是on a journey首先以編程方式創建Azure應用程序,然後使用Azure Management API創建一些資源。我想問一個新的問題,如何基本上使用HttpClient(或者使用Microsoft Graph API庫確切需要的權限的更聰明的方法)來執行PowerShell命令New-AzureRmRoleAssignment -RoleDefinitionName Owner -ServicePrincipalName $adApp.ApplicationId.Guid以編程方式在.NET Core控制檯應用程序中的新AzureRmRoleAssignment

這次嘗試成爲一個更好的人(更多地提供代碼),我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進行部署。也就是說,所有代碼都是從開始到結束。

(另外,該代碼是一次性的質量,只有提供更功能的例子。)

回答

2

新AzureRmRoleAssignment用於分配指定RBAC角色到指定的服務主體,您可以通過使用實現這一Resource Manager create role assignment API

  1. 獲取應用服務主體的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 
    
  2. 獲取Azure RBAC角色標識

    要爲您的服務主體分配適當的RBAC角色,您必須知道Azure RBAC角色的標識符(您的方案中的所有者),您可以調用Resource Manager role definition API來列出所有Azure RBAC角色並進行搜索然後迭代結果以找到期望的角色def從頭按名稱:

    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。

請參考以下文檔瞭解詳情:

Use Resource Manager authentication API to access subscriptions

+0

我試圖按照您的指示,但我必須在https://github.com/veikkoeeva/AppCreator失去了一些東西作爲/blob/master/AppCreator/Program.cs#L300「步驟3」的結果是_Bad Request_。這是我錯過了一些理由的原因,但我無法理解這可能是什麼。你願意借你的眼睛嗎? – Veksi

+0

要添加到前一個,它似乎沒有錯誤的URL,有效負載似乎是好的,它也不是授權問題。所以,我似乎無法理解(目前)的呼叫中的某些內容。 – Veksi

+0

請嘗試使用fiddler或開發人員工具來檢查執行roleAssignments api時內部錯誤消息的內容。 –

相關問題