Перенос приложения Java для использования бессерверных подключений с База данных SQL Azure

В этой статье объясняется, как перенести традиционные методы проверки подлинности на более безопасные, без пароля подключения с База данных SQL Azure.

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

Сравнение параметров проверки подлинности

Когда приложение проходит проверку подлинности с помощью База данных SQL Azure, он предоставляет пару имени пользователя и пароля для подключения к базе данных. В зависимости от того, где хранятся удостоверения, существует два типа проверки подлинности: проверка подлинности Microsoft Entra и проверка подлинности База данных SQL Azure.

Проверка подлинности Microsoft Entra

Проверка подлинности Microsoft Entra — это механизм подключения к База данных SQL Azure с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службы Майкрософт в центральном расположении, что упрощает управление разрешениями.

Использование идентификатора Microsoft Entra для проверки подлинности обеспечивает следующие преимущества:

  • Проверка подлинности пользователей в службах Azure в единообразном режиме.
  • Управление политиками паролей и сменой паролей в одном месте.
  • Несколько форм проверки подлинности, поддерживаемых идентификатором Microsoft Entra, что может устранить необходимость хранения паролей.
  • Клиенты могут управлять разрешениями базы данных с помощью внешних групп (Идентификатор Microsoft Entra).
  • Проверка подлинности Microsoft Entra использует пользователей базы данных SQL Azure для проверки подлинности удостоверений на уровне базы данных.
  • Поддержка проверки подлинности на основе маркеров для приложений, подключающихся к База данных SQL Azure.

Проверка подлинности в Базе данных SQL Azure

Учетные записи можно создавать в База данных SQL Azure. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные будут храниться в sys.database_principals таблице. Так как эти пароли хранятся в База данных SQL Azure, вам нужно самостоятельно управлять сменой паролей.

Хотя можно подключиться к База данных SQL Azure с паролями, их следует использовать с осторожностью. Вы должны быть старательными, чтобы никогда не предоставлять пароли в небезопасном расположении. Любой, кто получает доступ к паролям, может пройти проверку подлинности. Например, существует риск того, что злоумышленник может получить доступ к приложению, если строка подключения случайно проверка в систему управления версиями, отправленную через небезопасную электронную почту, вставленную в неправильный чат или просматриваемую кем-то, кто не должен иметь разрешения. Вместо этого рекомендуется обновить приложение для использования подключений без пароля.

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

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

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

DefaultAzureCredential поддерживает несколько способов проверки подлинности и автоматически определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы аутентификации в разных средах (локальная среда разработки и рабочая среда) без реализации кода для конкретной среды.

Порядок и расположения, в которых DefaultAzureCredential можно найти учетные данные, можно найти в обзоре библиотеки удостоверений Azure. Например, при локальной работе обычно будет проходить проверку подлинности с помощью учетной записи разработчика, DefaultAzureCredential используемой для входа в Visual Studio. При развертывании приложения в Azure DefaultAzureCredential автоматически переключается на использование управляемого удостоверения. Для такого перехода не требуется изменять код.

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

В локальной среде разработки можно пройти проверку подлинности с помощью Azure CLI, Azure PowerShell, Visual Studio или подключаемых модулей Azure для Visual Studio Code или IntelliJ. В этом случае вы можете использовать эти учетные данные в приложении вместо настройки свойств.

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

Примечание.

Управляемое удостоверение предоставляет удостоверение безопасности для представления приложения или службы. Удостоверения управляются платформой Azure, и для них не нужно подготавливать или изменять секреты. Дополнительные сведения об управляемых удостоверениях см. в обзорной документации.

Примечание.

Так как драйвер JDBC для База данных SQL Azure еще не поддерживает подключения без пароля из локальных сред, эта статья будет сосредоточена только на приложениях, развернутых в средах размещения Azure, и о том, как перенести их на использование без пароля подключений.

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

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

0) Подготовка рабочей среды

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

export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)

Замените заполнители следующими значениями, которые используются в этой статье:

  • <YOUR_RESOURCE_GROUP>: имя группы ресурсов, в которые находятся ваши ресурсы.
  • <YOUR_DATABASE_SERVER_NAME>: Имя сервера Базы данных SQL Azure. Оно должно быть уникальным в Azure.

1) Настройка База данных SQL Azure

1.1) Включение проверки подлинности на основе идентификатора Microsoft Entra

Чтобы использовать доступ к идентификатору Microsoft Entra с База данных SQL Azure, сначала необходимо задать пользователя администратора Microsoft Entra. Только пользователь Microsoft Entra Администратор может создавать и включать пользователей для проверки подлинности на основе идентификаторов Microsoft Entra.

Если вы используете Azure CLI, выполните следующую команду, чтобы убедиться, что у вас достаточно разрешений:

az login --scope https://graph.microsoft.com/.default

Затем выполните следующую команду, чтобы задать администратора Microsoft Entra:

az sql server ad-admin create \
    --resource-group $AZ_RESOURCE_GROUP \
    --server $AZ_DATABASE_SERVER_NAME \
    --display-name $CURRENT_USERNAME \
    --object-id $CURRENT_USER_OBJECTID

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

Примечание.

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

2) Перенос кода приложения на использование бессерверных подключений

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

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

    <dependency>
         <groupId>com.azure</groupId>
         <artifactId>azure-identity</artifactId>
         <version>1.5.4</version>
    </dependency>
    
  2. Включите проверку подлинности управляемого удостоверения Microsoft Entra в URL-адресе JDBC.v. Определите расположения в коде, которые в настоящее время создают java.sql.Connection подключение к База данных SQL Azure. Обновите свой код, чтобы он соответствовал следующему примеру:

    String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;"   
    Connection con = DriverManager.getConnection(url);
    
  3. Замените две $AZ_DATABASE_SERVER_NAME переменные и одну $AZ_DATABASE_NAME переменную значениями, настроенными в начале этой статьи.

  4. user Удалите URL-адрес JDBC и password из него.

3) Настройка среды размещения Azure

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

В этом разделе описано, как разрешить приложению выполняться в среде размещения Azure без пароля:

  • Назначьте управляемое удостоверение для среды размещения Azure.
  • Назначьте роли управляемому удостоверению.

Примечание.

Azure также предоставляет службу Подключение or, которая поможет вам подключить службу размещения к SQL Server. С помощью службы Подключение or для настройки среды размещения можно опустить шаг назначения ролей управляемому удостоверению, так как служба Подключение or сделает это для вас. В следующем разделе описывается, как настроить среду размещения Azure двумя способами: одну через службу Подключение or и другую, настроив каждую среду размещения напрямую.

Важно!

Для команд Подключение службы требуется Azure CLI 2.41.0 или более поздней версии.

Назначение управляемого удостоверения с помощью портал Azure

Ниже показано, как назначить управляемое удостоверение, назначаемое системой, для различных веб-служб размещения. Управляемое удостоверение может безопасно подключаться к другим службам Azure с помощью конфигураций приложений, настроенных ранее.

  1. На главной странице обзора экземпляра службы приложение Azure выберите Удостоверение в области навигации.

  2. На вкладке "Назначаемая системой" убедитесь, что поле "Состояние" включено. Назначаемое системой удостоверение управляется Azure внутренним образом и обслуживает административные задачи. Сведения об удостоверении и его идентификаторы ни в коем случае не раскрываются в коде.

    Screenshot of Azure portal Identity page of App Service resource with System assigned tab showing and Status field highlighted.

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

Управляемое удостоверение можно назначить экземпляру службы приложение Azure с помощью команды az webapp identity assign, как показано в следующем примере:

export AZ_MI_OBJECT_ID=$(az webapp identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --name <service-instance-name> \
    --query principalId \
    --output tsv)

Назначение роли управляемому удостоверению

Затем предоставьте разрешения управляемому удостоверению, созданному для доступа к базе данных SQL.

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

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

После внесения этих изменений в код можно создать и повторно развернуть приложение. Затем перейдите к размещенное приложение в браузере. Приложение должно успешно подключиться к базе данных SQL Azure. Помните, что на распространение назначений ролей в среде Azure может потребоваться несколько минут. Теперь приложение настроено для запуска в локальной и в рабочей средах без необходимости управлять секретами в самом приложении.

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

Из этого учебника вы узнали, как выполнить переход приложения на подключение без пароля.

Дополнительные сведения о понятиях, описанных в этой статье, см. в следующих ресурсах: