Руководство. Подключение к 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
- Java JDK
- Maven
- Azure CLI версии 2.46.0 или более поздней.
- Расширение azure CLI serviceconnector-passwordless версии 0.2.2 или более поздней.
- jq
Клонирование примера приложения и подготовка репозитория
Выполните следующие команды в терминале, чтобы клонировать репозиторий и настроить среду примера приложения.
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 подключается к этой базе данных и сохраняет данные при выполнении, сохраняя состояние приложения независимо от того, где выполняется приложение.
Войдите в Azure CLI и при необходимости задайте подписку, если у вас есть несколько подключений к учетным данным для входа.
az login az account set --subscription <subscription-ID>
Создайте группу ресурсов Azure.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Создайте сервер базы данных 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
Создайте базу данных для приложения.
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 с подключением к удостоверениям
Затем подключите базу данных с помощью соединителя службы.
Установите расширение без пароля соединителя службы для 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)
Попросите глобального администратора или администратора привилегированных ролей предоставить следующие разрешения новому удостоверению, назначаемого пользователем:
User.Read.All
иGroupMember.Read.All
Application.Read.ALL
. Дополнительные сведения см. в разделе "Разрешения" проверки подлинности Active Directory.Подключите приложение к базе данных MySQL с помощью управляемого удостоверения, назначаемого системой, с помощью соединителя службы. Чтобы сделать это подключение, выполните команду 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
, чтобы зарегистрировать поставщика ресурсов соединителя служб, а затем снова выполните команду подключения.
Развертывание приложения
Выполните следующие действия, чтобы подготовить данные в базе данных и развернуть приложение.
Создание схемы базы данных
Откройте брандмауэр, чтобы разрешить подключение с текущего 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}
Подключитесь к базе данных и создайте таблицы.
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
Удалите временное правило брандмауэра.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Развертывание приложения
Обновите строка подключения в параметрах приложения.
Получите строка подключения, созданную соединителем службы, и добавьте подключаемый модуль проверки подлинности без пароля. Эта строка подключения ссылается на скрипт запуска.
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}"
Пример приложения содержит файл pom.xml , который может создать WAR-файл. Выполните сборку приложения с помощью приведенной ниже команды.
mvn clean package -DskipTests
Разверните 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 см. в статье