Краткое руководство по быстрому старту: клиентская библиотека ключей Azure Key Vault для Java

Начало работы с клиентской библиотекой ключей Azure Key Vault для Java. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.

Дополнительные ресурсы:

Prerequisites

В этом кратком руководстве предполагается, что вы используете Azure CLI и Apache Maven в окне терминала Linux.

Настройка

В этом руководстве по быстрому старту используется библиотека Azure Identity и Azure CLI для аутентификации пользователя в службах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для проверки подлинности своих вызовов. Дополнительные сведения см. в статье Проверка подлинности клиента с помощью клиентской библиотеки удостоверений Azure.

Вход в Azure

  1. Запустите команду login.

    az login
    

    Если CLI может открыть ваш браузер по умолчанию, он откроет его и загрузит страницу входа в Azure.

    В противном случае откройте страницу в браузере по адресу https://aka.ms/devicelogin и введите код авторизации, отображаемый в вашем терминале.

  2. Выполните вход в браузере с помощью учетных данных.

Создание консольного приложения Java

В окне консоли используйте команду mvn для создания нового консольного приложения Java с именем akv-keys-java.

mvn archetype:generate -DgroupId=com.keyvault.keys.quickstart
                       -DartifactId=akv-keys-java
                       -DarchetypeArtifactId=maven-archetype-quickstart
                       -DarchetypeVersion=1.4
                       -DinteractiveMode=false

Примерный результат создания проекта показан ниже:

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.keys.quickstart
[INFO] Parameter: artifactId, Value: akv-keys-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.keys.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.keys.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.keys.quickstart
[INFO] Parameter: artifactId, Value: akv-keys-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-keys-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------

Измените каталог на вновь созданную папку akv-keys-java/.

cd akv-keys-java

Установка пакета

Откройте файл pom.xml в текстовом редакторе. Добавьте приведенные ниже элементы зависимости в группу зависимостей.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-security-keyvault-keys</artifactId>
      <version>4.10.6</version>
    </dependency>

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.18.2</version>
    </dependency>

Создание группы ресурсов и хранилища ключей

В этом кратком руководстве используется предварительно созданное хранилище ключей Azure. Вы можете создать хранилище ключей, выполнив действия, описанные в следующих кратких руководствах.

Кроме того, вы можете выполнять эти команды Azure CLI.

Important

Каждое хранилище ключей должно иметь уникальное имя. Замените <vault-name> именем хранилища ключей в следующих примерах.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Предоставление доступа к хранилищу ключей

Чтобы получить разрешения для хранилища ключей с помощью контроля доступа на основе ролей (RBAC), назначьте роль для "User Principal Name" (UPN) с помощью команды Azure CLI az role assignment create.

az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Замените <upn>, <subscription-id>а <vault-name> также фактическими значениями. Если вы использовали другое имя группы ресурсов, замените myResourceGroup. UPN обычно имеет формат адреса электронной почты (например, username@domain.com).

Настройка переменных среды

Это приложение использует имя хранилища ключей в качестве переменной среды под названием KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<vault-name>"

macOS или Linux

export KEY_VAULT_NAME=<vault-name>

Объектная модель

Клиентская библиотека ключей Azure Key Vault для Java позволяет управлять ключами. В разделе Примеры кода показано, как создать клиент, создать ключ, получить ключ и удалить ключ.

Все консольное приложение поставляется в Пример кода.

Примеры кода

Добавление директив

Добавьте в верхнюю часть кода следующие директивы:

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.keys.KeyClient;
import com.azure.security.keyvault.keys.KeyClientBuilder;
import com.azure.security.keyvault.keys.models.DeletedKey;
import com.azure.security.keyvault.keys.models.KeyType;
import com.azure.security.keyvault.keys.models.KeyVaultKey;

Аутентификация и создание клиента

Запросы приложений к большинству служб Azure должны быть авторизованы. Использование класса DefaultAzureCredential является рекомендуемым подходом для реализации подключений без паролей к службам Azure в вашем коде. DefaultAzureCredential поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.

В этом кратком руководстве DefaultAzureCredential аутентифицируется в хранилище ключей с помощью учетных данных локального пользователя разработки, вошедшего в Azure CLI. При развертывании приложения в Azure один и тот же DefaultAzureCredential может автоматически обнаруживать и использовать управляемое удостоверение, назначенное Службе приложений, виртуальной машине или другим службам. Дополнительные сведения см. в статье Что такое управляемые удостоверения для ресурсов Azure?.

В этом примере имя вашего хранилища ключей расширяется до URI хранилища ключей в формате https://<vault-name>.vault.azure.net. Дополнительные сведения об аутентификации в хранилище ключей см. в руководстве для разработчиков.

String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

KeyClient keyClient = new KeyClientBuilder()
    .vaultUrl(keyVaultUri)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

Создание ключа

Теперь, когда приложение аутентифицировано, можно создать ключ в хранилище ключей, используя метод keyClient.createKey. Для этого требуется имя ключа и типа ключа. Мы назначили переменной keyName значение myKey и используйте RSA KeyType в этом примере.

keyClient.createKey(keyName, KeyType.RSA);

С помощью команды az keyvault key show можно проверить, что ключ установлен.

az keyvault key show --vault-name <vault-name> --name myKey

Получение ключа

Теперь вы можете получить ранее созданный ключ с помощью метода keyClient.getKey.

KeyVaultKey retrievedKey = keyClient.getKey(keyName);

Теперь вы можете получить доступ к сведениям об извлечённом ключе с помощью таких операций, как retrievedKey.getProperties, retrievedKey.getKeyOperations и т. д.

Удаление ключа

Наконец, удалим ключ из вашего хранилища ключей с помощью метода keyClient.beginDeleteKey.

Удаление ключа — это длительная операция, ход которой можно отслеживать или дождаться ее завершения.

SyncPoller<DeletedKey, Void> deletionPoller = keyClient.beginDeleteKey(keyName);
deletionPoller.waitForCompletion();

Шаг для проверки удаления ключа: используйте команду az keyvault key show.

az keyvault key show --vault-name <vault-name> --name myKey

Очистка ресурсов

Если ресурсы больше не нужны, вы можете использовать интерфейс командной строки Azure или Azure PowerShell, чтобы удалить хранилище ключей и соответствующую группу ресурсов.

az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"

Пример кода

package com.keyvault.keys.quickstart;

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.keys.KeyClient;
import com.azure.security.keyvault.keys.KeyClientBuilder;
import com.azure.security.keyvault.keys.models.DeletedKey;
import com.azure.security.keyvault.keys.models.KeyType;
import com.azure.security.keyvault.keys.models.KeyVaultKey;

public class App {
    public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

        System.out.printf("key vault name = %s and key vault URI = %s \n", keyVaultName, keyVaultUri);

        KeyClient keyClient = new KeyClientBuilder()
             .vaultUrl(keyVaultUri)
             .credential(new DefaultAzureCredentialBuilder().build())
             .buildClient();

        String keyName = "myKey";

        System.out.print("Creating a key in " + keyVaultName + " called '" + keyName + " ... ");

        keyClient.createKey(keyName, KeyType.RSA);

        System.out.print("done.");
        System.out.println("Retrieving key from " + keyVaultName + ".");

        KeyVaultKey retrievedKey = keyClient.getKey(keyName);

        System.out.println("Your key's ID is '" + retrievedKey.getId() + "'.");
        System.out.println("Deleting your key from " + keyVaultName + " ... ");

        SyncPoller<DeletedKey, Void> deletionPoller = keyClient.beginDeleteKey(keyName);
        deletionPoller.waitForCompletion();

        System.out.print("done.");
    }
}

Дальнейшие шаги

В этом кратком руководстве вы создали хранилище ключей, создали ключ, извлекли его и удалили. Чтобы узнать больше о Key Vault и о том, как интегрировать его с приложениями, перейдите к этим статьям.