Поделиться через


Руководство. Подключение к Postgre База данных SQL из Java Tomcat Служба приложений без секретов с помощью управляемого удостоверения

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

  • Создайте базу данных PostgreSQL.
  • Разверните пример приложения для приложение Azure Service в Tomcat с помощью упаковки WAR.
  • Настройте веб-приложение Tomcat для использования проверки подлинности Microsoft Entra с postgre База данных SQL.
  • Подключитесь к Postgre База данных SQL с помощью управляемого удостоверения с помощью соединителя службы.

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

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

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

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

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

Создание базы данных Azure для PostgreSQL

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

  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 для PostgreSQL. Сервер создается с учетной записью администратора, но он не используется, так как мы будем использовать учетную запись администратора Microsoft Entra для выполнения административных задач.

    export POSTGRESQL_ADMIN_USER=azureuser
    # PostgreSQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database.
    export POSTGRESQL_ADMIN_PASSWORD=<admin-password>
    export POSTGRESQL_HOST=<postgresql-host-name>
    
    # Create a PostgreSQL server.
    az postgres flexible-server create \
        --resource-group $RESOURCE_GROUP \
        --name $POSTGRESQL_HOST \
        --location $LOCATION \
        --admin-user $POSTGRESQL_ADMIN_USER \
        --admin-password $POSTGRESQL_ADMIN_PASSWORD \
        --public-access 0.0.0.0 \
        --sku-name Standard_D2s_v3
    
  4. Создайте базу данных для приложения.

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

Развертывание приложения в Служба приложений

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

  1. Пример приложения содержит файл pom.xml , который может создать WAR-файл. Выполните сборку приложения с помощью приведенной ниже команды.

    mvn clean package -f pom.xml
    
  2. Создайте ресурс службы приложение Azure в Linux с помощью Tomcat 9.0.

    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 B1 \
        --is-linux
    
    # Create an App Service resource.
    az webapp create \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --plan $APPSERVICE_PLAN \
        --runtime "TOMCAT:10.0-java11"
    
  3. Разверните пакет WAR в Служба приложений.

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path target/app.war \
        --type war
    

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

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

Установите расширение без пароля соединителя службы для Azure CLI:

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

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

Чтобы сделать это подключение, выполните команду az webapp connection create .

az webapp connection create postgres-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $POSTGRESQL_HOST \
    --database $DATABASE_NAME \
    --system-identity \
    --client-type java

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

Затем обновите параметры приложения и добавьте подключаемый модуль в строка подключения

export AZURE_POSTGRESQL_CONNECTIONSTRING=$(\
    az webapp config appsettings list \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
    | jq -c -r '.[] \
    | select ( .name == "AZURE_POSTGRESQL_CONNECTIONSTRING" ) \
    | .value')

az webapp config appsettings set \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --settings 'CATALINA_OPTS=-DdbUrl="'"${AZURE_POSTGRESQL_CONNECTIONSTRING}"'&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"'

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

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

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 см. в статье

Узнайте, как защитить приложение с помощью личного домена и сертификата.