Да, вы можете сделать это из кода 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, чтобы предоставить необходимые разрешения (например, перечисление ключей, получение / получение секретов и т. Д.) Для приложения (идентификатор которого вы выделили на изображении)
Использовать класс 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
Использовать 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);
Использовать Rest API
https://docs.microsoft.com/en-us/rest/api/keyvault/vaults/updateaccesspolicy