4

Как получить список виртуальных машин (неклассических) с использованием Java API, которые создаются с помощью диспетчера ресурсов? Для чего нужен идентификатор арендатора, идентификатор клиента и клиентский ключ для создания объекта «com.microsoft.azure.management.compute.ComputeManagementClient»?Как получить список лазурных виртуальных машин (не классический/управляемый ресурсами) с использованием Java API

Можно ли использовать идентификатор подписки и учетные данные Azure Portal? Образец, предоставленный с проектом azure-mgmt-compute, нуждается в этом идентификаторе арендатора, идентификаторе клиента, где нам не нужны эти данные, когда мы создаем виртуальную машину (выбрав Resource Manager) на Azure Portal.

ответ

3

Зачем нам нужен арендатор идентификатор, идентификатор клиента и ключ клиента для создания «» com.microsoft.azure.management.compute.ComputeManagementClient объекта?

За кулисами 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 Id, Client Id и другие вещи для этой цели. Таким образом, пользователь использует ваше приложение, позволяя устанавливать приложение в своем Azure AD. Tenant Id - уникальный идентификатор вашего приложения в Azure AD вашего пользователя. Client Id - уникальный идентификатор вашего приложения.

Как только все настроено правильно, для использования пользователя библиотеки аутентифицируется против их Azure AD. В рамках потока аутентификации/авторизации пользователь получает токен, и эта библиотека использует этот токен, чтобы сделать аутентифицированный запрос от ARM API для управления виртуальными машинами.

Можно ли использовать идентификатор подписки и учетные данные Azure Portal? Образец, предоставленный с проектом azure-mgmt-compute, нуждается в этом идентификаторе арендатора, идентификаторе клиента , где нам не нужны эти данные, когда мы создаем VM (выбрав Resource Manager) на Azure Portal.

Если вы заметили, вам сначала нужно войти в Azure Portal, используя учетную запись Microsoft или учетную запись «Работа/Школа». Программное обеспечение портала извлекает токен как часть процесса входа в систему. После этого он использует идентификатор арендатора, идентификатор клиента и этот токен для выполнения всех операций. Таким образом, по сути, он делает то же самое, но он не виден вам.

+0

Спасибо Gaurav за подробный ответ.Когда вы говорите: «Чтобы использовать Azure AD для этой цели, вам нужно будет создать приложение в вашем Azure AD и предоставить этому приложению разрешение на выполнение Azure Service Management API». будет ли это же приложение использоваться для извлечения всех виртуальных машин (созданных с помощью диспетчера ресурсов)? И хотя он будет создан любой учетной записью в рамках этой единой подписки? – Prit

+0

'будет ли это же приложение использоваться для извлечения всех виртуальных машин (созданных с помощью диспетчера ресурсов)?' -> Да. 'И хотя он будет создан любой учетной записью под этой единственной подпиской?' -> Я не уверен, что понимаю это. Не могли бы вы объяснить. –

+0

Еще раз спасибо Гаурав! Я имел в виду, что мы можем создавать пользователей под AD, и если эти пользователи могут создавать виртуальные машины с помощью диспетчера ресурсов, может ли это одно приложение, созданное под AD, получить виртуальные машины, созданные этими всеми пользователями? – Prit

1

Спасибо за разъяснение @GauravMantri.

Как получить список виртуальных машин (неклассических) с использованием Java API, которые создаются с помощью диспетчера ресурсов?

Согласно Reference Azure для Virtual Machine REST, вы можете получить список всех виртуальных машин в группе ресурсов с использованием the REST API, что нужно authenticate Azure Resource Manager requests в common parameters and headers.

Вот пример кода с использованием 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

Спасибо, Питер за этот образец кода. – Prit

Смежные вопросы