Руководство по Использование ссылок Key Vault в приложении Java Spring

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

Служба "Конфигурация приложений Azure" упрощает их использование, позволяя создавать ключи, ссылающиеся на значения, хранящиеся в Key Vault. Когда служба "Конфигурация приложений Azure" создает такие ключи, она сохраняет URI значений Key Vault, а не сами значения.

С помощью поставщика клиента "Конфигурация приложений Azure" ваше приложение получает ссылки на Key Vault так же, как и любые другие ключи, хранящиеся в службе "Конфигурация приложений Azure". В этом случае значения, хранящиеся в службе "Конфигурация приложений Azure", являются URI, которые ссылаются на значения в Key Vault. Это не значения или учетные данные Key Vault. Так как поставщик клиента распознает ключи как ссылки на Key Vault, для получения их значений он использует Key Vault.

Приложение отвечает за правильную проверку подлинности как в службе "Конфигурация приложений", так и в Key Vault. Две службы не обмениваются данными напрямую.

В этом учебнике показано, как можно реализовать ссылки на Key Vault в коде. При этом в качестве основы используется код веб-приложения, представленный в кратких руководствах. Прежде чем продолжить, прочитайте краткое руководство Создание приложения Java Spring с помощью службы "Конфигурация приложений Azure".

Вы можете выполнять шаги в этом учебнике с помощью любого редактора кода. Например, Visual Studio Code — это кроссплатформенный редактор кода, доступный для операционных систем Windows, macOS и Linux.

В этом руководстве описано следующее:

  • создание ключа службы "Конфигурация приложений Azure", который ссылается на значение, хранящееся в Key Vault;
  • доступ к значению этого ключа из веб-приложения Java Spring.

Предварительные требования

Создание хранилища

  1. Выберите параметр Создать ресурс в верхнем левом углу окна портала Azure.

    Снимок экрана: вариант

  2. В поле поиска введите Key Vault.

  3. В списке результатов выберите Key Vault слева.

  4. В разделе Хранилища ключей выберите Добавить.

  5. Справа в разделе Создать Key Vault введите приведенные ниже сведения.

    • Выберите Подписка, чтобы выбрать подписку.
    • В разделе Группа ресурсов выберите Создать и введите имя группы ресурсов.
    • В поле Имя Key Vault укажите уникальное имя. Для работы с этим учебником введите Contoso-vault2.
    • В раскрывающемся списке Регион выберите расположение.
  6. Для других свойств раздела создания Key Vault оставьте значения по умолчанию.

  7. Нажмите кнопку создания.

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

Снимок экрана: ваше хранилище ключей.

Добавление секрета в Key Vault

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

  1. На странице свойств Key Vault выберите Секреты.
  2. Выберите Создать или импортировать.
  3. В области Создание секрета выберите следующие значения:
    • Параметры отправки. Введите Вручную.
    • Name (Имя). Введите Message.
    • Value (Значение): Введите Hello from Key Vault.
  4. Для других свойств раздела Создание секрета оставьте значения по умолчанию.
  5. Нажмите кнопку создания.

Добавление ссылки на Key Vault в службу "Конфигурация приложений Azure"

  1. Войдите на портал Azure. Щелкните Все ресурсы и выберите экземпляр хранилища "Конфигурация приложений Azure", который вы создали по инструкциям из краткого руководства.

  2. Выберите Обозреватель конфигураций.

  3. Выберите + Создать>Ссылка на хранилище ключей и укажите следующие значения:

    • Ключ: Выберите /application/config.keyvaultmessage
    • Метка — оставьте это значение пустым.
    • Подписка, Группа ресурсов и Хранилище ключей: введите значения, соответствующие значениям хранилища ключей, созданного в предыдущем разделе.
    • Секрет: выберите секрет с именем Message, созданный в предыдущем разделе.

Подключение к Key Vault

  1. В этом учебнике вы используете субъект-службу для проверки подлинности в KeyVault. Создайте субъект-службу с помощью команды az ad sp create-for-rbac Azure CLI:

    az ad sp create-for-rbac -n "http://mySP" --role Contributor --scopes /subscriptions/{subscription-id} --sdk-auth
    

    Эта операция возвращает ряд пар "ключ — значение".

    {
    "clientId": "7da18cae-779c-41fc-992e-0527854c6583",
    "clientSecret": "b421b443-1669-4cd7-b5b1-394d5c945002",
    "subscriptionId": "443e30da-feca-47c4-b68f-1636b75e16b3",
    "tenantId": "35ad10f1-7799-4766-9acf-f2d946161b77",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
    }
    
  2. Выполните следующую команду, чтобы предоставить субъекту-службе доступ к хранилищу ключей:

    az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get
    
  3. Выполните следующую команду, чтобы получить идентификатор объекта, затем добавьте его в Конфигурацию приложений.

    az ad sp show --id <clientId-of-your-service-principal>
    az role assignment create --role "App Configuration Data Reader" --scope /subscriptions/<subscriptionId>/resourceGroups/<group-name> --assignee-principal-type --assignee-object-id <objectId-of-your-service-principal> --resource-group <your-resource-group>
    
  4. Создайте переменные среды AZURE_CLIENT_ID, AZURE_CLIENT_SECRET и AZURE_TENANT_ID. Для этого используйте значения для субъекта-службы, которые были показаны на предыдущих шагах. В командной строке выполните следующие команды и перезапустите командную строку, чтобы изменения вступили в силу:

    setx AZURE_CLIENT_ID "clientId"
    setx AZURE_CLIENT_SECRET "clientSecret"
    setx AZURE_TENANT_ID "tenantId"
    

    Если вы используете Windows PowerShell, выполните следующую команду:

    $Env:AZURE_CLIENT_ID = "clientId"
    $Env:AZURE_CLIENT_SECRET = "clientSecret"
    $Env:AZURE_TENANT_ID = "tenantId"
    

    Если вы используете macOS или Linux, выполните следующую команду:

    export AZURE_CLIENT_ID ='clientId'
    export AZURE_CLIENT_SECRET ='clientSecret'
    export AZURE_TENANT_ID ='tenantId'
    

Примечание

Эти учетные данные Key Vault используются только в вашем приложении. Приложение выполняет проверку подлинности напрямую с Key Vault, используя эти учетные данные без привлечения службы "Конфигурация приложений". Key Vault обеспечивает проверку подлинности как для приложения, так и для службы "Конфигурация приложений" без общего доступа или предоставления ключей.

Обновление кода для использования ссылки Key Vault

  1. Создайте переменную среды с именем APP_CONFIGURATION_ENDPOINT. Задайте в качестве значения конечную точку хранилища Конфигурации приложений. Конечную точку можно найти в колонке Ключи доступа на портале Azure. Перезапустите командную строку, чтобы изменение вступило в силу.

  2. Откройте файл конфигурации в папке resources . Обновите этот файл, чтобы использовать значение APP_CONFIGURATION_ENDPOINT. Удалите все ссылки на строку подключения в этом файле.

spring:
    cloud:
        azure:
            appconfiguration:
                stores:
                    - endpoint: ${APP_CONFIGURATION_ENDPOINT}

Примечание

Вы также можете использовать глобальные конфигурации Azure Spring Cloud для подключения к Key Vault.

  1. Откройте MessageProperties.java. Добавьте новую переменную с именем keyVaultMessage:

    private String keyVaultMessage;
    
    public String getKeyVaultMessage() {
        return keyVaultMessage;
    }
    
    public void setKeyVaultMessage(String keyVaultMessage) {
        this.keyVaultMessage = keyVaultMessage;
    }
    
  2. Откройте HelloController.java. Обновите метод getMessage, чтобы включить сообщение, полученное от Key Vault.

    @GetMapping
    public String getMessage() {
        return "Message: " + properties.getMessage() + "\nKey Vault message: " + properties.getKeyVaultMessage();
    }
    
  3. Создайте приложение Spring Boot с помощью Maven и запустите его, например, следующим образом:

    mvn clean package
    mvn spring-boot:run
    
  4. После запуска приложение можно протестировать с помощью средства curl, например:

    curl -X GET http://localhost:8080/
    

    Вы увидите сообщение, которое указали в хранилище конфигураций приложений. Вы также увидите сообщение, которое ввели в Key Vault.

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

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

Важно!

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Дальнейшие действия

В этом учебнике вы создали ключ службы "Конфигурация приложений Azure", который ссылается на значение, хранящееся в Key Vault. Если возникнут дополнительные вопросы, см. справочную документацию, в ней подробно описан принцип работы библиотеки Spring Cloud для Конфигурации приложений Azure. Чтобы узнать, как использовать флаги функций в приложении Java Spring, перейдите к следующему руководству.