4

リソースマネージャを使用して作成されたJava APIを使用して非古典的なVMのリストを取得する方法はありますか?なぜ、「com.microsoft.azure.management.compute.ComputeManagementClient」オブジェクトを作成するためにテナントID、クライアントID、クライアントキーが必要なのですか?Java APIを使用してAzure VMのリストを取得する方法

サブスクリプションIDとAzureポータルの資格情報を使用して行うことはできますか? Azure-mgmt-computeプロジェクトで提供されるサンプルには、これらのテナントID、クライアントIDが必要です。AzureポータルでVM(リソースマネージャーを選択)を作成するときにこれらの詳細は必要ありません。我々は 'com.microsoft.azure.management.compute.ComputeManagementClient' オブジェクトを作成するために、テナントID、クライアントIDとクライアントキーを必要とするのはなぜ

答えて

3

背景の背後で、com.microsoft.azure.management.compute.ComputeManagementClientは、仮想マシン関連の操作を実行するためにAzure Resource Manager (ARM) REST APIを消費します。 ARM APIは、認証と承認のためにAzure Active Directory (AD)を使用します。このためにAzure ADを使用するには、Azure ADにアプリケーションを作成し、そのアプリケーションにAzure Service Management APIを実行する許可を与える必要があります。その目的のためにTenant IdClient Idなどが必要です。したがって、ユーザーはアプリケーションをAzure ADにインストールできるようにしてアプリケーションを使用します。 Tenant Idは、ユーザーのAzure ADでのアプリケーションの一意のIDです。 Client Idはアプリケーションの一意のIDです。

すべてが正しく設定されたら、ライブラリユーザーを使用するために、ユーザーはAzure ADに対して認証されます。認証/認可フローの一部として、ユーザーはトークンを取得し、このライブラリはこのトークンを使用して、ARM APIに対して認証された要求を行って仮想マシンを管理します。

サブスクリプションIDとAzureポータルの資格情報を使用して行うことはできますか? azure-mgmt-computeプロジェクトで提供されたサンプルには、これらのテナントID クライアントIDが必要です。Azure PortalでVM (リソースマネージャを選択)を作成するときにこれらの詳細は必要ありません。

ご存じの場合は、まずMicrosoftアカウントまたは職場/学校のアカウントを使用してAzure Portalにログインする必要があります。ポータルソフトウェアは、トークンをログインプロセスの一部として取り出します。その後、テナントID、クライアントID、およびこのトークンを使用してすべての操作を実行します。だから本質的に同じことをしているのですが、あなたには見えません。

+0

お返事ありがとうございました。「この目的でAzure ADを使用するには、Azure ADにアプリケーションを作成し、そのアプリケーションにAzure Service Management APIを実行する権限を与える必要があります。この同じアプリケーションは、(Resource Managerを使用して作成された)すべてのVMをフェッチするために使用されますか?そしてそれはその単一のサブスクリプションの下のどのアカウントによっても作成されますか? – Prit

+0

'この同じアプリケーションは、(Resource Managerを使って作成された)すべてのVMをフェッチするために使用されますか? ' - >はい。 「それは単一のサブスクリプションの下でアカウントによって作成されますが? - >私はこれを理解しているかどうかわかりません。あなたは説明してもらえますか? –

+0

ありがとうGaurav!つまり、ADの下にユーザーを作成することができます。これらのユーザーがリソースマネージャーを使用してVMを作成できる場合、ADの下に作成されたこの1つのアプリケーションは、すべてのユーザーによって作成されたVMをフェッチできますか? – Prit

1

@GauravMantriの説明をお寄せいただきありがとうございます。

リソースマネージャを使用して作成されたJava APIを使用してVM(非古典的)のリストを取得する方法はありますか。

Virtual Machine RESTためAzureのリファレンスによると、あなたはcommon parameters and headersauthenticate Azure Resource Manager requestsに必要なthe REST APIを使用して、リソース・グループ内のすべての仮想マシンのリストを取得することができます。

以下は、Java APIを使用したサンプルコードです。

// The parameters include clientId, clientSecret, tenantId, subscriptionId and resourceGroupName. 
private static final String clientId = "<client-id>"; 
private static final String clientSecret = "<key>"; 
private static final String tenantId = "<tenant-id>"; 
private static final String subscriptionId = "<subscription-id>"; 
private static final String resouceGroupName = "<resource-group-name>"; 

// The function for getting the access token via Class AuthenticationResult 
private static AuthenticationResult getAccessTokenFromServicePrincipalCredentials() 
     throws ServiceUnavailableException, MalformedURLException, ExecutionException, InterruptedException { 
    AuthenticationContext context; 
    AuthenticationResult result = null; 
    ExecutorService service = null; 
    try { 
     service = Executors.newFixedThreadPool(1); 
     // TODO: add your tenant id 
     context = new AuthenticationContext("https://login.windows.net/" + tenantId, false, service); 
     // TODO: add your client id and client secret 
     ClientCredential cred = new ClientCredential(clientId, clientSecret); 
     Future<AuthenticationResult> future = context.acquireToken("https://management.azure.com/", cred, null); 
     result = future.get(); 
    } finally { 
     service.shutdown(); 
    } 

    if (result == null) { 
     throw new ServiceUnavailableException("authentication result was null"); 
    } 
    return result; 
} 

// The process for getting the list of VMs in a resource group 
Configuration config = ManagementConfiguration.configure(null, new URI("https://management.core.windows.net"), 
     subscriptionId, 
     getAccessTokenFromServicePrincipalCredentials().getAccessToken()); 
ComputeManagementClient client = ComputeManagementService.create(config); 
VirtualMachineListResponse listResponse = client.getVirtualMachinesOperations().list(resourceGroupName); 
ArrayList<VirtualMachine> list = listResponse.getVirtualMachines(); 
+0

このサンプルコードはPeterに感謝します。 – Prit

関連する問題