Home > OS >  What permissions are needed to run the adf pipeline api
What permissions are needed to run the adf pipeline api

Time:12-07

What permissions are needed to run the azure data factory management apis. For instance I am trying to execute the Pipeline runs, Query by factory api in a web activity.

Error:

User configuration issue
{"error":{"code":"AuthorizationFailed","message":"The client with object id does not have authorization to perform action 'Microsoft.DataFactory/factories/pipelineruns/read' over scope '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}/pipelineruns/{runId}' or the scope is invalid. If access was recently granted, please refresh your credentials."}}

Could you please guide me on how to pass the credentials and get the token for GET and POST methods.

CodePudding user response:

You need to create an Azure Active Directory Application that can access your Data factory.

  1. Create an Azure Active Directory application, For the sign-on URL, you can provide a dummy URL (https://contoso.org/exampleapp).
  2. Get values for signing in, get the application ID and tenant ID, and note down these values that you use later.
  3. Certificates and secrets, get the authentication key, and note down this value that you use later in this tutorial.
  4. Assign the application to a role, assign the application to the Contributor role at the subscription level so that the application can create data factories in the subscription.

After you do the above steps, you need to create the DataFactoryManagementClient and authenticate your application using the below code snippet:

var context = new AuthenticationContext("https://login.microsoftonline.com/"   tenantID);
ClientCredential cc = new ClientCredential(applicationId, authenticationKey);
AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
var client = new DataFactoryManagementClient(cred) {
    SubscriptionId = subscriptionId };

Once you've authenticated your application, you can start the Pipeline run using the below code snippet:

// Create a pipeline run
Console.WriteLine("Creating pipeline run...");

CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
    resourceGroup, dataFactoryName, pipelineName, parameters: parameters
).Result.Body;
Console.WriteLine("Pipeline run ID: "   runResponse.RunId);

Below is the complete code of a console application to run an Azure Data Factory Pipeline:

using Microsoft.Azure.Management.DataFactory;
using Microsoft.Azure.Management.DataFactory.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Rest;
using System;

namespace ADF
{
    class Program
    {
        static void Main(string[] args)
        {
            // Set variables
            string tenantID = "<your tenant ID>";
            string applicationId = "<your application ID>";
            string authenticationKey = "<your authentication key for the application>";
            string subscriptionId = "<your subscription ID where the data factory resides>";
            string resourceGroup = "<your resource group where the data factory resides>";
            string dataFactoryName ="<specify the name of data factory to create. It must be globally unique.>";
            string pipelineName = "<specify the name of pipeline to run. It must be globally unique.>";

            // Authenticate and create a data factory management client
            var context = new AuthenticationContext("https://login.microsoftonline.com/"   tenantID);
            ClientCredential cc = new ClientCredential(applicationId, authenticationKey);
            AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
            ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
            
            var client = new DataFactoryManagementClient(cred)
            {
                SubscriptionId = subscriptionId
            };

            // Create a pipeline run
            Console.WriteLine("Creating pipeline run...");

            CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
                resourceGroup, dataFactoryName, pipelineName
            ).Result.Body;

            Console.WriteLine("Pipeline run ID: "   runResponse.RunId);
        }
    }
}

Don't forget to add the Nuget Packages:

Install-Package Microsoft.Azure.Management.DataFactory
Install-Package Microsoft.Azure.Management.ResourceManager -IncludePrerelease
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
  • Related