Краткое руководство. Клиентская библиотека ключей Azure Key Vault для Java
Начало работы с клиентской библиотекой ключей Azure Key Vault для Java. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.
Дополнительные ресурсы:
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Комплект SDK для Java (JDK) версии 8 или более поздней версии.
- Apache Maven
- Azure CLI
В этом кратком руководстве предполагается, что вы используете Azure CLI и Apache Maven в окне терминала Linux.
Установка
В этом кратком руководстве используется библиотека удостоверений Azure и Azure CLI для проверки подлинности пользователя в службах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для проверки подлинности своих вызовов. Дополнительные сведения см. в статье Проверка подлинности клиента с помощью клиентской библиотеки удостоверений Azure.
Вход в Azure
Выполните команду
login
.az login
Если в CLI можно запустить браузер по умолчанию, откроется браузер со страницей входа.
В противном случае самостоятельно откройте в браузере страницу https://aka.ms/devicelogin и введите код авторизации, отображаемый в терминале.
Выполните вход в браузере с помощью учетных данных.
Создание консольного приложения 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.2.3</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.2.0</version>
</dependency>
Создание группы ресурсов и хранилища ключей
В этом кратком руководстве используется предварительно созданное хранилище ключей Azure. Хранилище ключей можно создать, выполнив действия, описанные в кратких руководствах по Azure CLI, Azure PowerShell или порталу Azure.
Кроме того, можно выполнять эти команды Azure CLI или Azure PowerShell.
Внимание
Каждое хранилище ключей должно иметь уникальное имя. В следующих примерах замените <your-unique-keyvault-name> именем своего хранилища ключей.
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization
Предоставление доступа к хранилищу ключей
Чтобы получить разрешения для хранилища ключей с помощью контроль доступа на основе ролей (RBAC), назначьте роль имени участника-пользователя (UPN) с помощью команды Azure CLI az role assignment create.
az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Замените upn>, subscription-id>, <<resource-group-name и <your-unique-keyvault-name>> фактическими значениями.< Имя участника-участника обычно будет иметь формат адреса электронной почты (например, [email protected]).
Настройка переменных среды
Это приложение использует имя хранилища ключей в качестве переменной среды с именем KEY_VAULT_NAME
.
Windows
set KEY_VAULT_NAME=<your-key-vault-name>
Windows PowerShell
$Env:KEY_VAULT_NAME="<your-key-vault-name>"
macOS или Linux
export KEY_VAULT_NAME=<your-key-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://<your-key-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 <your-unique-key-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 <your-unique-key-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 и о том, как интегрировать его с приложениями, перейдите к этим статьям.