Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начало работы с клиентской библиотекой секретов Azure Key Vault для Java. Выполните приведенные здесь действия, чтобы установить пакет и протестировать пример кода для выполнения базовых задач.
Tip
Если вы работаете с ресурсами секретов Azure Key Vault в приложении Spring, рекомендуется рассмотреть Spring Cloud Azure в качестве альтернативы. Spring Cloud Azure — это проект с открытым исходным кодом, который обеспечивает простую интеграцию Spring со службами Azure. Чтобы узнать больше о Spring Cloud Azure и увидеть пример использования секретов Key Vault, см. статью Загрузка секрета из Azure Key Vault в приложении Spring Boot.
Дополнительные ресурсы:
- исходный код.
- Справочная документация по API
- Документация продукта
- Samples
Prerequisites
- Подписка Azure — создайте бесплатную учетную запись.
- Комплект SDK для Java (JDK) версии 8 или более поздней версии.
- Apache Maven
- Azure CLI
В этом кратком руководстве предполагается, что вы используете Azure CLI и Apache Maven в окне терминала Linux.
Настройка
В этом руководстве по быстрому старту используется библиотека Azure Identity и Azure CLI для аутентификации пользователя в службах Azure. Разработчики также могут использовать Visual Studio или Visual Studio Code для проверки подлинности своих вызовов. Дополнительные сведения см. в статье Проверка подлинности клиента с помощью клиентской библиотеки удостоверений Azure.
Вход в Azure
Запустите команду
login.az loginЕсли CLI может открыть ваш браузер по умолчанию, он откроет его и загрузит страницу входа в Azure.
В противном случае откройте страницу в браузере по адресу https://aka.ms/devicelogin и введите код авторизации, отображаемый в вашем терминале.
Выполните вход в браузере с помощью учетных данных.
Создание консольного приложения Java
В окне консоли используйте команду mvn, чтобы создать новое консольное приложение Java с именем akv-secrets-java.
mvn archetype:generate -DgroupId=com.keyvault.secrets.quickstart
-DartifactId=akv-secrets-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.secrets.quickstart
[INFO] Parameter: artifactId, Value: akv-secrets-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: artifactId, Value: akv-secrets-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-secrets-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------
Измените каталог на вновь созданную папку akv-secrets-java/.
cd akv-secrets-java
Установка пакета
Откройте файл pom.xml в текстовом редакторе. Добавьте приведенные ниже элементы зависимости в группу зависимостей.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-secrets</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.
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 Secrets 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.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.DeletedSecret;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
Аутентификация и создание клиента
Запросы приложений к большинству служб 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";
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Сохранение секрета
Теперь, когда приложение прошло проверку подлинности, можно добавить секрет в хранилище ключей с помощью метода secretClient.setSecret. Для этого требуется имя для секрета — в этом примере мы присвоили переменной secretName значение "mySecret".
secretClient.setSecret(new KeyVaultSecret(secretName, secretValue));
Вы можете проверить, что секрет установлен, с помощью команды az keyvault secret show:
az keyvault secret show --vault-name <vault-name> --name mySecret
Получение секрета
Теперь вы можете получить ранее заданный секрет с помощью метода secretClient.getSecret.
KeyVaultSecret retrievedSecret = secretClient.getSecret(secretName);
Теперь вы можете получить доступ к значению полученного секрета с помощью retrievedSecret.getValue().
Удаление секрета.
Наконец, давайте удалим данные из ключевого хранилища с помощью метода secretClient.beginDeleteSecret.
Удаление секрета является длительной операцией, ход выполнения которой можно отслеживать или дождаться её завершения.
SyncPoller<DeletedSecret, Void> deletionPoller = secretClient.beginDeleteSecret(secretName);
deletionPoller.waitForCompletion();
Вы можете убедиться в том, что секрет был удалён, с помощью команды аз keyvault secret show:
az keyvault secret show --vault-name <vault-name> --name mySecret
Очистка ресурсов
Если ресурсы больше не нужны, вы можете использовать интерфейс командной строки Azure или Azure PowerShell, чтобы удалить хранилище ключей и соответствующую группу ресурсов.
az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"
Пример кода
package com.keyvault.secrets.quickstart;
import java.io.Console;
import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.DeletedSecret;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
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);
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Console con = System.console();
String secretName = "mySecret";
System.out.println("Please provide the value of your secret > ");
String secretValue = con.readLine();
System.out.print("Creating a secret in " + keyVaultName + " called '" + secretName + "' with value '" + secretValue + "' ... ");
secretClient.setSecret(new KeyVaultSecret(secretName, secretValue));
System.out.println("done.");
System.out.println("Forgetting your secret.");
secretValue = "";
System.out.println("Your secret's value is '" + secretValue + "'.");
System.out.println("Retrieving your secret from " + keyVaultName + ".");
KeyVaultSecret retrievedSecret = secretClient.getSecret(secretName);
System.out.println("Your secret's value is '" + retrievedSecret.getValue() + "'.");
System.out.print("Deleting your secret from " + keyVaultName + " ... ");
SyncPoller<DeletedSecret, Void> deletionPoller = secretClient.beginDeleteSecret(secretName);
deletionPoller.waitForCompletion();
System.out.println("done.");
}
}
Дальнейшие шаги
В этом кратком руководстве вы создали хранилище ключей, сохранили секрет, извлекли его и удалили. Чтобы узнать больше о Key Vault и о том, как интегрировать его с приложениями, перейдите к этим статьям.
- Прочитайте обзор Azure Key Vault
- См. руководство разработчика Azure Key Vault
- Защита доступа к хранилищу ключей
- Ознакомьтесь с рекомендациями по обеспечению безопасности для определенных секретов