Руководство. Подключение в my База данных SQL из Java JBoss EAP Служба приложений с подключением без пароля

Служба приложений Azure — это служба веб-размещения с самостоятельной установкой исправлений и высоким уровнем масштабируемости в Azure. Он также предоставляет управляемое удостоверение для приложения, которое является решением для защиты доступа к База данных Azure для MySQL и другим службам Azure. Управляемые удостоверения в Служба приложений делают приложение более безопасным, устраняя секреты из приложения, например учетные данные в переменных среды. В этом руководстве описано следующее:

  • Создайте базу данных MySQL.
  • Разверните пример приложения JBoss EAP для приложение Azure service с помощью пакета WAR.
  • Настройте веб-приложение Spring Boot для использования проверки подлинности Microsoft Entra с my База данных SQL.
  • Подключение в My База данных SQL с управляемым удостоверением с помощью Подключение службы.

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

Необходимые компоненты

Клонирование примера приложения и подготовка репозитория

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

git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/

Создание Базы данных Azure для MySQL

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

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

    az login
    az account set --subscription <subscription-ID>
    
  2. Создайте группу ресурсов Azure, указав ее имя.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Создайте сервер базы данных Azure для MySQL. Сервер создается с учетной записью администратора, но он не используется, так как мы будем использовать учетную запись администратора Microsoft Entra для выполнения административных задач.

    export MYSQL_ADMIN_USER=azureuser
    # MySQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database.
    export MYSQL_ADMIN_PASSWORD=<admin-password>
    export MYSQL_HOST=<mysql-host-name>
    
    # Create a MySQL server.
    az mysql flexible-server create \
        --name $MYSQL_HOST \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --admin-user $MYSQL_ADMIN_USER \
        --admin-password $MYSQL_ADMIN_PASSWORD \
        --public-access 0.0.0.0 \
        --tier Burstable \
        --sku-name Standard_B1ms \
        --storage-size 32
    
  4. Создайте базу данных для приложения.

    export DATABASE_NAME=checklist
    
    az mysql flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $MYSQL_HOST \
        --database-name $DATABASE_NAME
    

Создание службы приложений

Создайте ресурс службы приложение Azure в Linux. Для JBoss EAP требуется номер SKU premium.

export APPSERVICE_PLAN=<app-service-plan>
export APPSERVICE_NAME=<app-service-name>
# Create an App Service plan
az appservice plan create \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_PLAN \
    --location $LOCATION \
    --sku P1V3 \
    --is-linux

# Create an App Service resource.
az webapp create \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --plan $APPSERVICE_PLAN \
    --runtime "JBOSSEAP:7-java8"

Подключение базе данных MySQL с подключением к удостоверениям

Затем подключите базу данных с помощью службы Подключение or.

Установите расширение service Подключение or без пароля для Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Затем используйте следующую команду, чтобы создать управляемое удостоверение, назначаемое пользователем для проверки подлинности Microsoft Entra. Дополнительные сведения см. в статье Настройка проверки подлинности Microsoft Entra для База данных Azure для MySQL — гибкий сервер.

export USER_IDENTITY_NAME=<your-user-assigned-managed-identity-name>
export IDENTITY_RESOURCE_ID=$(az identity create \
    --name $USER_IDENTITY_NAME \
    --resource-group $RESOURCE_GROUP \
    --query id \
    --output tsv)

Важно!

После создания удостоверения, назначаемого пользователем, попросите глобального Администратор istrator или привилегированного Администратор istrator предоставить следующие разрешения для этого удостоверения: User.Read.Allи GroupMember.Read.AllApplication.Read.ALL. Дополнительные сведения см. в разделе "Разрешения" проверки подлинности Active Directory.

Затем подключите приложение к базе данных MySQL с управляемым удостоверением, назначаемое системой, с помощью службы Подключение or. Чтобы сделать это подключение, выполните команду az webapp connection create .

az webapp connection create mysql-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $MYSQL_HOST \
    --database $DATABASE_NAME \
    --system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
    --client-type java

Эта команда Подключение службы выполняет следующие задачи в фоновом режиме:

  • Включите управляемое удостоверение, назначаемое системой, для приложения$APPSERVICE_NAME, размещенного службой приложение Azure.

  • Задайте администратору Microsoft Entra текущий пользователь, выполнившего вход.

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

  • Добавьте строка подключения в приложение Параметры в именованном AZURE_MYSQL_CONNECTIONSTRINGприложении.

    Примечание.

    Если появится сообщение The subscription is not registered to use Microsoft.ServiceLinkerоб ошибке, выполните командуaz provider register --namespace Microsoft.ServiceLinker, чтобы зарегистрировать поставщика ресурсов службы Подключение or, а затем снова выполните команду подключения.

Развертывание приложения

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

Создание схемы базы данных

  1. Откройте брандмауэр, чтобы разрешить подключение с текущего IP-адреса.

    # Create a temporary firewall rule to allow connections from your current machine to the MySQL server
    export MY_IP=$(curl http://whatismyip.akamai.com)
    az mysql flexible-server firewall-rule create \
        --resource-group $RESOURCE_GROUP \
        --name $MYSQL_HOST \
        --rule-name AllowCurrentMachineToConnect \
        --start-ip-address ${MY_IP} \
        --end-ip-address ${MY_IP}
    
  2. Подключение в базу данных и создайте таблицы.

    export DATABASE_FQDN=${MYSQL_HOST}.mysql.database.azure.com
    export CURRENT_USER=$(az account show --query user.name --output tsv)
    export RDBMS_ACCESS_TOKEN=$(az account get-access-token \
        --resource-type oss-rdbms \
        --output tsv \
        --query accessToken)
    mysql -h "${DATABASE_FQDN}" --user "${CURRENT_USER}" --enable-cleartext-plugin --password="$RDBMS_ACCESS_TOKEN" < azure/init-db.sql
    
  3. Удалите временное правило брандмауэра.

    az mysql flexible-server firewall-rule delete \
        --resource-group $RESOURCE_GROUP \
        --name $MYSQL_HOST \
        --rule-name AllowCurrentMachineToConnect
    

Развертывание приложения

  1. Обновите строка подключения в приложении Параметры.

    Получите строка подключения, созданные службой Подключение or, и добавьте подключаемый модуль проверки подлинности без пароля. Эта строка подключения ссылается на скрипт запуска.

    export PASSWORDLESS_URL=$(\
        az webapp config appsettings list \
            --resource-group $RESOURCE_GROUP \
            --name $APPSERVICE_NAME \
        | jq -c '.[] \
        | select ( .name == "AZURE_MYSQL_CONNECTIONSTRING" ) \
        | .value' \
        | sed 's/"//g')
    # Create a new environment variable with the connection string including the passwordless authentication plugin
    export PASSWORDLESS_URL=${PASSWORDLESS_URL}'&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin'
    az webapp config appsettings set \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --settings "AZURE_MYSQL_CONNECTIONSTRING_PASSWORDLESS=${PASSWORDLESS_URL}"
    
  2. Пример приложения содержит файл pom.xml, который может создать WAR-файл . Выполните сборку приложения с помощью приведенной ниже команды.

    mvn clean package -DskipTests
    
  3. Разверните WAR и скрипт запуска в службе приложений.

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path target/ROOT.war \
        --type war
    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path src/main/webapp/WEB-INF/createMySQLDataSource.sh \
        --type startup
    

Тестирование примера веб-приложения

Выполните следующую команду, чтобы протестировать приложение.

export WEBAPP_URL=$(az webapp show \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --query defaultHostName \
    --output tsv)

# Create a list
curl -X POST -H "Content-Type: application/json" -d '{"name": "list1","date": "2022-03-21T00:00:00","description": "Sample checklist"}' https://${WEBAPP_URL}/checklist

# Create few items on the list 1
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/checklist/1/item

# Get all lists
curl https://${WEBAPP_URL}/checklist

# Get list 1
curl https://${WEBAPP_URL}/checklist/1

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

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:

az group delete --name myResourceGroup

Ее выполнение может занять до минуты.

Следующие шаги

Дополнительные сведения о запуске приложений Java в Службе приложений Azure в Linux см. в статье