web-dev-qa-db-ja.com

オブジェクトIDを持つクライアントには、スコープに対してアクション 'Microsoft.DataFactory / datafactories / datapipelines / read'を実行する権限がありません

Azure関数からプログラムでデータファクトリパイプラインを呼び出そうとしていました。次のエラーをスローします。

リンク: http://eatcodelive.com/2016/02/24/starting-an-Azure-data-factory-pipeline-from-c-net/

AuthorizationFailed:オブジェクトID 'XXX829e05'XXXX-XXXXX'のクライアント 'XXXX-XXXXX-XXXX'には、スコープに対してアクション 'Microsoft.DataFactory/datafactories/datapipelines/read'を実行する権限がありません'/subscriptions/XXXXXX-4bf5-84c6-3a352XXXXXX/resourcegroups/fffsrg/providers/Microsoft.DataFactory/datafactories/ADFTestFFFS/datapipelines/ADFTutorialPipelineCustom'.

同様の問題を検索しようとしましたが、検索結果のいずれも私の問題の解決策を提供しませんでした。問題の可能性を教えてください。

目的は、ファイルがblobに追加されるたびにデータファクトリパイプラインを実行することです。結果を達成するために、blobトリガーを使用してAzure関数からデータファクトリパイプラインを呼び出そうとしています。

13
ravibhat

ステップ1:Azureポータルにログインする
ステップ2:左側のメニューバーでサブスクリプションを見つけてクリックします。
enter image description here

ステップ3:[アクセス制御IAM]をクリックし、[追加]をクリックします。 enter image description here

ステップ4:[権限の追加]ウィンドウで、役割の投稿者を選択します。 [選択]入力ボックスに、Azure ADで作成した(Azure Active Directoryで作成した)アプリ名を入力して選択します。私の場合、Azure Resource Managementを作成しました。 enter image description here

ステップ5:許可が成功した後、サブスクリプションウィンドウで[更新]をクリックすると、リストにアプリが表示されます。以下の例を参照してください。 enter image description here

11
shebin c babu

データファクトリに関連する権限がないため、パイプラインのスコープに対してアクション 'Microsoft.DataFactory/datafactories/datapipelines/read'を実行する権限がないというエラーが表示されます。

データファクトリリソースまたは子リソースを作成および管理するには、「Contributor」/「DataFactoryContributor」権限が必要です。次のリンクのAzure RBACロールの詳細:

https://docs.Microsoft.com/en-us/Azure/active-directory/role-based-access-built-in-roles

お客様はAzure Function内からADFクライアントを使用しようとしているため、ADFクライアントの認証にはAADアプリケーションとサービスプリンシパルを使用することをお勧めします。 AADアプリケーションとサービスプリンシパルを作成する手順については、次を参照してください。

https://docs.Microsoft.com/en-us/Azure/azure-resource-manager/resource-group-authenticate-service-principal

Active Directoryアプリケーション、サービスプリンシパルを作成する方法の手順に従い、次のリンクのData Factory Contributorロールと、ADFクライアントでサービスプリンシパルを使用するためのコードサンプルに割り当てます。

6
SharmM

AzureリソースグループとRBACを使用する場合の一般的な問題を参照してください https://blogs.msdn.Microsoft.com/Azure4fun/2016/10/20/common-problem-when-using-Azure-resource-groups-rbac/

この問題は、新しいサブスクリプションで発生する可能性が高く、通常、そのサブスクリプションで特定のリソースタイプが一度も作成されていない場合に発生します。

サブスクリプション管理者は、サブスクリプションレベルではなくリソースグループレベルのレベルまでアクセスを分離するという戦略と矛盾するサブスクリプションレベルで、リソースグループの所有者にコントリビューター権限を付与することにより、この問題を修正することがよくあります。

根本的な原因

一部の管理者は、一部のリソースはこれらのリソースを作成するためにサブスクリプションレベルにアクセスする必要があり、リソースグループレベルの「所有者」権限では不十分であると言います。それは真実ではありません。

最初に戻って、これがどのように機能するかを理解しましょう。

Azureのリソースを(リソースマネージャーモデルを使用して)プロビジョニングするには、そのリソースの作成をサポートするリソースプロバイダーが必要です。たとえば、仮想マシンをプロビジョニングする場合、「Microsoft.Compute」リソースプロバイダーをサブスクリプションで最初に使用可能にしてから、それを実行する必要があります。

リソースプロバイダーは、サブスクリプションのレベルでのみ登録されます。

幸いなことに、Azure Resource Manager(ARM)はそれを把握できるほどインテリジェントです。新しいAzureリソースがプロビジョニングされたときに、そのリソースタイプに必要なリソースプロバイダーがサブスクリプションにまだ登録されていない場合、ARMはそれを登録しようとします。そのアクション(リソースプロバイダーの登録)サブスクリプションレベルへのアクセスが必要です。

既定では、新しいAzureサブスクリプションは一般的に使用されるリソースプロバイダーのリストに事前登録されます。たとえば、IoTHubのリソースプロバイダーはそれらの1つではありません。

ユーザーに特定のリソースグループの所有者権限のみが付与されている場合、そのユーザーがリソースプロバイダーの初回登録が必要なリソースをプロビジョニングしようとすると、その操作は失敗します。これが、IoThubをプロビジョニングしようとしたときに上記のケースで発生したことです。

結論として、ユーザーがHDInsight、IotHub、SQLDWなどのリソースを作成できるようにするには、サブスクリプションレベルへのアクセス許可を付与する必要がありますDO NOT…などこれらのリソースのリソースプロバイダーが既に登録されている限り、所有者権限があります。

3
Michael Hunter

最近、同じメッセージでこの問題が発生し、ユーザーが別のサブスクリプションでログインしていることが原因であることがわかりました(2つあります)。 az login --subscriptionを使用して、問題を解決しました。

2
Rob Targosz

私はこの投稿に従うことで解決しました: https://www.nwcadence.com/blog/resolving-authorizationfailed-2016 PowerShellのコマンドで:

Get-AzureRmResourceProvider -ListAvailable | Select-Object ProviderNamespace | Foreach-Object { Register-AzureRmResourceProvider -ProviderName $_.ProviderNamespace}
0
geliz zhang

この投稿に従ってください: https://docs.Microsoft.com/en-us/Azure/azure-resource-manager/resource-group-create-service-principal-portal

この投稿では、ロールは「リーダー」として提供されます。「リーダー」は代わりに「所有者」である必要があります。

0
user3828102

溶液:

  1. 手順1:Azure Active Directoryにアプリを登録します。
  2. ステップ2:同じアプリに「Data Factory Contributor」ロールを割り当てます。 Power Shellを使用してこれを実現できます。

以下のコードは私のために機能します。 Azure資格情報でログインした後、Power Shellで試してください。
実装:

  1. ステップ1: $azureAdApplication = New-AzureRmADApplication -DisplayName <AppName> -HomePage <URL> -IdentifierUris <URL with domain> -Password <Password>
  2. ステップ2: New-AzureRmRoleAssignment -RoleDefinitionName "Data Factory Contributor" -ServicePrincipalName $azureAdApplication.ApplicationId
0
Jeyachandran