Получить идентификатор приложения службы идентификации фабрики данных Azure - PullRequest
0 голосов
/ 31 августа 2018

Я создал одну фабрику данных и хранилище ключей с использованием кода C #, я хотел бы установить политику доступа к хранилищу ключей. Для этого я хочу, чтобы фабрика данных «Идентификатор приложения службы идентификации» (выделена красным на прикрепленном изображении) с использованием кода C #. Как я мог это сделать?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Да, вы можете сделать это из кода C #.

Вот небольшой пример кода, который я написал, чтобы получить идентификатор приложения службы идентификации из кода C #.

Предварительным условием является установка следующих пакетов из консоли диспетчера пакетов (Инструменты -> Диспетчер пакетов NuGet -> Консоль диспетчера пакетов):

Install-Package Microsoft.Azure.Management.DataFactory -Prerelease
Install-Package Microsoft.Azure.Management.ResourceManager -Prerelease
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory

После установки пакетов используйте код ниже

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

namespace GetDataFactory
{
    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.>";

            // Authenticate and create a data factory management client
            var context = new AuthenticationContext("https://login.windows.net/" + 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 };

            var myFactory = client.Factories.Get(resourceGroup, dataFactoryName);

            //Getting principal Id as you mentioned in question, but you can get more information from the Identity object as per your need.
            Guid? principalId = myFactory.Identity.PrincipalId;

        }
    }
}

Как только вы получите всю идентификационную информацию, вы можете обновить политику доступа к keyvault, чтобы предоставить необходимые разрешения (например, перечисление ключей, получение / получение секретов и т. Д.) Для приложения (идентификатор которого вы выделили на изображении)

  1. Использовать класс KeyVaultManagementClient -

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.keyvault.keyvaultmanagementclient?view=azure-dotnet

    https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.keyvault.vaultsoperationsextensions.updateaccesspolicy?view=azure-dotnet

  2. Использовать Fluent API -

    Посмотрите на этот пример на Github - https://github.com/Azure-Samples/key-vault-dotnet-manage-key-vaults

            Utilities.Log("Authorizing the application associated with the current service principal...");
    
            vault1 = vault1.Update()
                    .DefineAccessPolicy()
                        .ForServicePrincipal(SdkContext.AzureCredentialsFactory.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")).ClientId)
                        .AllowKeyAllPermissions()
                        .AllowSecretPermissions(SecretPermissions.Get)
                        .AllowSecretPermissions(SecretPermissions.List)
                        .Attach()
                    .Apply();
    
            Utilities.Log("Updated key vault");
            Utilities.PrintVault(vault1);
    
            //============================================================
            // Update a key vault
    
            Utilities.Log("Update a key vault to enable deployments and add permissions to the application...");
    
            vault1 = vault1.Update()
                    .WithDeploymentEnabled()
                    .WithTemplateDeploymentEnabled()
                    .UpdateAccessPolicy(vault1.AccessPolicies[0].ObjectId)
                        .AllowSecretAllPermissions()
                        .Parent()
                    .Apply();
    
            Utilities.Log("Updated key vault");
            // Print the network security group
            Utilities.PrintVault(vault1);
    
  3. Использовать Rest API

    https://docs.microsoft.com/en-us/rest/api/keyvault/vaults/updateaccesspolicy

0 голосов
/ 13 ноября 2018

Если вы хотите получить идентификатор приложения существующего АПД, вам необходимо выполнить 2 поездки.

Первым является получение идентификатора службы для менеджера ресурсов. Первый кодовый блок @ rohit делает это в c #. При этом извлекается идентификатор объекта принципала, а не идентификатор приложения, который является атрибутом этого объекта.

Вторым является получение идентификатора приложения из активного каталога через RM. Затем вы можете использовать это для назначения политики доступа. Например, в powershell вы бы сделали это:

Первый шаг:

$principal = (Get-AzureRmDataFactoryV2 -ResourceGroupName "yourRG" -Name yourADF).identity.PrincipalId

затем второй шаг ...

$appId = (Get-AzureRmADServicePrincipal -ObjectId $principal).ApplicationId

C # -эквивалент должен быть легко понять из этого.

0 голосов
/ 01 сентября 2018

Если вы хотите получить токен доступа с идентификатором приложения, надеюсь, этот документ может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...