2017-07-16 5 views
0

私はon a journeyのようですが、最初にAzureアプリケーションをプログラムで作成し、Azure管理APIを使用してリソースを作成しているようです。コミュニティから聞きたいことがあり、基本的にはPowerShellコマンドNew-AzureRmRoleAssignment -RoleDefinitionName Owner -ServicePrincipalName $adApp.ApplicationId.GuidHttpClient(またはMicrosoft Graph APIライブラリを使用して正確に必要なアクセス許可を持つよりスマートな方法)を使用して行う方法があります。.NET CoreコンソールアプリケーションでNew-AzureRmRoleAssignmentを使用する

今回はより良い人にしようとしています(コードを提供しています)。prepared a repo in GHですが、この問題は基本的にどんな種類のURI(here)を使うべきかで決まります。コードは、物事は簡単にそれ(またはライブラリ)を使用したが、あまり運にされた場合、私はあまりにもGraph API Explorerいじっ

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); 

です。実際、究極の目的は、アプリケーションをプログラムで作成して、Azure Management Librariesを使用して展開を行うことが可能になるようにすることです。つまり、すべてのコードが最初から最後までです。

(また、コードが唯一のより多くの機能の一例を提供するために、使い捨ての品質である。)新AzureRmRoleAssignmentが指定したサービスプリンシパルに指定されたRBACの役割を割り当てるために使用され

答えて

2

、あなたが使用してそれを達成できましたResource Manager create role assignment API

  1. アプリケーションサービスプリンシパルのObjectIdを取得します。

    あなたは.IFはない、あなたがアプリケーションIDにより、アプリケーションのサービスプリンシパルを要求するために、Azureの広告グラフAPIを使用することができ、このステップを省略でき、前にアプリケーション・サービス・プリンシパルのOBJECTIDを持っている場合:

    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ロールIDを取得する

    サービスプリンシパルに適切なRBACロールを割り当てるには、Azure RBACロール(シナリオではOwner)のIDを知っている必要があります。Resource Manager role definition APIを呼び出して、すべてのAzure RBACロールと検索結果を反復処理して目的のロールを見つけますdef名前でinition:

    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" 
        } 
    } 
    

    roleDefinitionIdprincipalIdは、手順1で取得OBJECTIDで、手順2で取得するIDです。 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

roleAssignments APIを実行する際に、内部エラーメッセージが何であるかを確認するために、フィドラーまたはデベロッパーツールを使用してみてください。 –

関連する問題