Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как перенести традиционные методы проверки подлинности на более безопасные, без пароля подключения к Базе данных Azure для MySQL.
Запросы приложений к Базе данных Azure для MySQL должны проходить проверку подлинности. База данных Azure для MySQL предоставляет несколько различных способов безопасного подключения приложений. Одним из способов является использование паролей. Однако по возможности следует определить приоритеты подключений без пароля в приложениях.
Сравнение параметров проверки подлинности
Когда приложение проходит проверку подлинности с помощью Базы данных Azure для MySQL, оно предоставляет пару имени пользователя и пароля для подключения к базе данных. В зависимости от места хранения удостоверений существует два типа проверки подлинности: проверка подлинности Microsoft Entra и проверка подлинности MySQL.
Аутентификация Microsoft Entra
Проверка подлинности Microsoft Entra — это механизм подключения к базе данных Azure для MySQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службами Майкрософт в центральном расположении, что упрощает управление разрешениями.
Использование идентификатора Microsoft Entra для проверки подлинности обеспечивает следующие преимущества:
- Проверка подлинности пользователей в службах Azure в единообразном режиме.
- Управление политиками паролей и сменой паролей в одном месте.
- Несколько форм проверки подлинности, поддерживаемых идентификатором Microsoft Entra, что может устранить необходимость хранения паролей.
- Клиенты могут управлять разрешениями базы данных с помощью внешних групп (Microsoft Entra ID).
- Аутентификация Microsoft Entra использует пользователей базы данных MySQL для аутентификации на уровне базы данных.
- Поддержка проверки подлинности на основе маркеров для приложений, подключающихся к Базе данных Azure для MySQL.
Проверка подлинности MySQL
Вы можете создавать учетные записи в MySQL. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные будут храниться в user таблице. Так как эти пароли хранятся в MySQL, вам нужно самостоятельно управлять сменой паролей.
Хотя можно подключиться к Базе данных Azure для MySQL с паролями, их следует использовать с осторожностью. Вы должны быть старательными, чтобы никогда не предоставлять пароли в небезопасном расположении. Любой, кто получает доступ к паролям, может пройти проверку подлинности. Например, существует риск того, что злоумышленник может получить доступ к приложению, если строка подключения случайно загружена в систему управления версиями, отправлена через незащищенное сообщение электронной почты, вставлена в неправильный чат или просмотрена кем-то, кому не разрешено. Вместо этого попробуйте обновить приложение для использования бессерверных подключений.
Знакомство с бессерверными подключениями
С помощью бессерверного подключения можно подключиться к службам Azure, не сохраняя учетные данные в коде приложения, его файлах конфигурации или переменных среды.
Многие службы Azure поддерживают безпарольные подключения, например с помощью управляемого удостоверения Azure. Эти методы предоставляют надежные функции безопасности, которые можно реализовать с помощью DefaultAzureCredential из клиентских библиотек удостоверений Azure. В этом руководстве вы узнаете, как обновить существующее приложение для использования DefaultAzureCredential вместо альтернативных вариантов, таких как строки подключения.
DefaultAzureCredential поддерживает несколько методов проверки подлинности и автоматически определяет, какие из них следует использовать во время выполнения. Этот подход позволяет приложению использовать различные методы проверки подлинности в разных средах (локальная среда разработки и рабочая среда) без реализации кода для конкретной среды.
Порядок и места, где DefaultAzureCredential ищет учетные данные, содержится в обзоре библиотеки Azure Identity. Например, при локальной работе DefaultAzureCredential обычно выполняет проверку подлинности с использованием учетной записи, которую разработчик использовал для входа в Visual Studio. При развертывании приложения в Azure DefaultAzureCredential автоматически переключается на использование управляемого удостоверения. Для этого перехода изменения кода не требуются.
Чтобы обеспечить без пароля подключения, необходимо учитывать как локальную разработку, так и рабочую среду. Если строка подключения требуется в любом месте, приложение не является парольным.
В локальной среде разработки можно пройти проверку подлинности с помощью Azure CLI, Azure PowerShell, Visual Studio или подключаемых модулей Azure для Visual Studio Code или IntelliJ. В этом случае вы можете использовать эти учетные данные в приложении вместо настройки свойств.
При развертывании приложений в среде размещения Azure, такой как виртуальная машина, можно назначить управляемое удостоверение в этой среде. Затем вам не потребуется предоставить учетные данные для подключения к службам 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 AZ_MYSQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_MYSQL_AD_MI_USERNAME=<YOUR_AZURE_AD_MI_DISPLAY_NAME>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
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>: имя сервера MySQL, который должен быть уникальным в Azure. -
<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: отображаемое имя пользователя Microsoft Entra, отличного от администратора. Убедитесь, что имя является допустимым пользователем в клиенте Microsoft Entra. -
<YOUR_AZURE_AD_MI_DISPLAY_NAME>: отображаемое имя пользователя Microsoft Entra для управляемого удостоверения. Убедитесь, что имя является допустимым пользователем в клиенте Microsoft Entra. -
<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: имя назначаемого пользователем управляемого сервера удостоверений, которое должно быть уникальным в Azure.
1) Настройка базы данных Azure для MySQL
1.1) Включение проверки подлинности на основе идентификатора Microsoft Entra
Чтобы использовать доступ к идентификатору Microsoft Entra с базой данных Azure для MySQL, сначала необходимо задать пользователя администратора Microsoft Entra. Только пользователь Microsoft Entra Admin может создавать и включать пользователей для проверки подлинности на основе идентификаторов Майкрософт.
Если вы используете Azure CLI, выполните следующую команду, чтобы убедиться, что у вас достаточно разрешений:
az login --scope https://graph.microsoft.com/.default
Выполните следующую команду, чтобы создать удостоверение пользователя для назначения:
az identity create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_USER_IDENTITY_NAME
Это важно
После создания удостоверения, назначаемого пользователем, попросите глобального администратора или администратора привилегированных ролей предоставить следующие разрешения для этого удостоверения: User.Read.Allи GroupMember.Read.AllApplication.Read.ALL. Дополнительные сведения см. в разделе "Разрешения"проверки подлинности Active Directory.
Выполните следующую команду, чтобы назначить идентификацию серверу MySQL для создания администратора Microsoft Entra.
az mysql flexible-server identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--server-name $AZ_DATABASE_SERVER_NAME \
--identity $AZ_USER_IDENTITY_NAME
Затем выполните следующую команду, чтобы задать администратора Microsoft Entra:
az mysql flexible-server ad-admin create \
--resource-group $AZ_RESOURCE_GROUP \
--server-name $AZ_DATABASE_SERVER_NAME \
--display-name $CURRENT_USERNAME \
--object-id $CURRENT_USER_OBJECTID \
--identity $AZ_USER_IDENTITY_NAME
Эта команда установит администратора Microsoft Entra текущему пользователю, вошедшему в систему.
Замечание
На сервере MySQL можно создать только одного администратора Microsoft Entra. Выбор другого перезаписывает существующий администратор Microsoft Entra, настроенный для сервера.
2) Настройка базы данных Azure для MySQL для локальной разработки
2.1) Настройка правила брандмауэра для локального IP-адреса
По умолчанию экземпляры Базы данных Azure для MySQL защищены. У них есть брандмауэр, который не разрешает входящие подключения.
Этот шаг можно пропустить, если вы используете Bash, так как команда flexible-server create уже обнаружила локальный IP-адрес и настроила его на сервере MySQL.
Если вы подключаетесь к серверу MySQL из подсистемы Windows для Linux (WSL) на компьютере Windows, необходимо добавить идентификатор узла WSL в брандмауэр. Получите IP-адрес хост-компьютера, выполнив следующую команду в WSL:
cat /etc/resolv.conf
Скопируйте IP-адрес после термина nameserver, а затем используйте следующую команду, чтобы задать переменную среды для IP-адреса WSL:
export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Затем используйте следующую команду, чтобы открыть брандмауэр сервера в приложении на основе WSL:
az mysql server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip-wsl \
--server $AZ_DATABASE_SERVER_NAME \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
2.2) Создание пользователя, отличного от администратора MySQL, и предоставление разрешения
Затем создайте пользователя Microsoft Entra без администратора и предоставьте ему все разрешения для $AZ_DATABASE_NAME базы данных. Имя базы данных $AZ_DATABASE_NAME можно изменить в соответствии с вашими потребностями.
Создайте скрипт SQL с именем create_ad_user.sql для создания пользователя без администратора. Добавьте следующее содержимое и сохраните его локально:
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_NON_ADMIN_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_NON_ADMIN_USERNAME'@'%';
FLUSH privileges;
EOF
Затем выполните следующую команду, чтобы запустить скрипт SQL для создания пользователя, не являющегося администратором Microsoft Entra.
mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Теперь используйте следующую команду, чтобы удалить временный файл скрипта SQL:
rm create_ad_user.sql
Замечание
Дополнительные сведения о создании пользователей MySQL см. в статье "Создание пользователей в Базе данных Azure для MySQL".
3) Войдите в систему и перенесите код приложения для использования безпарольных подключений
Для локальной разработки убедитесь, что вы прошли проверку подлинности с той же учетной записью Microsoft Entra, назначенной вами для роли в MySQL. Вы можете пройти проверку подлинности с помощью Azure CLI, Visual Studio, Azure PowerShell или других средств, таких как IntelliJ.
Войдите в Azure с помощью Azure CLI, выполнив следующую команду:
az login
Затем выполните следующие действия, чтобы обновить код для использования подключений без пароля. Хотя и концептуально аналогично, каждый язык использует различные сведения о реализации.
В проекте добавьте следующую ссылку на
azure-identity-extensionsпакет. Эта библиотека содержит все сущности, необходимые для реализации подключений без пароля.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.0.0</version> </dependency>Включите плагин аутентификации Azure MySQL в URL JDBC. Определите расположения в коде, создающие
java.sql.Connectionдля подключения к базе данных Azure для MySQL. Обновитеurlиuserв файле application.properties , чтобы соответствовать следующим значениям:url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin user=$AZ_MYSQL_AD_NON_ADMIN_USERNAMEЗамечание
Если вы используете
MysqlConnectionPoolDataSourceкласс в качестве источника данных в приложении, обязательно удалитеdefaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPluginего из URL-адреса.url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin user=$AZ_MYSQL_AD_NON_ADMIN_USERNAMEЗамените одну переменную, одну
$AZ_DATABASE_SERVER_NAME$AZ_DATABASE_NAMEпеременную и одну$AZ_MYSQL_AD_NON_ADMIN_USERNAMEпеременную значениями, настроенными в начале этой статьи.Удалите элемент
passwordиз URL-адреса JDBC.
Локальное выполнение приложения
После внесения этих изменений в код запустите приложение локально. Новая конфигурация должна получить локальные учетные данные, если вы вошли в совместимую интегрированную среду разработки или средство командной строки, например Azure CLI, Visual Studio или IntelliJ. Роли, назначенные локальному пользователю разработки в Azure, позволяют приложению подключаться к службе Azure локально.
4) Настройка среды размещения Azure
После настройки использования подключения без пароля и выполнения приложения локально, тот же код может аутентифицироваться в службах Azure после его развертывания в Azure. Например, приложение, развернутое в экземпляре Службы приложений Azure с назначенным управляемым удостоверением, может подключиться к службе хранилища Azure.
В этом разделе описано, как разрешить приложению выполняться в среде размещения Azure без пароля:
- Назначьте управляемую идентификацию для хостинга в Azure.
- Назначьте роли управляемому удостоверению.
Замечание
Azure также предоставляет соединитель служб, который поможет вам подключить службу размещения к PostgreSQL. С помощью модуля Service Connector для настройки среды размещения, можно пропустить шаг назначения ролей управляемой идентификации, поскольку модуль Service Connector сделает это за вас. В следующем разделе описывается, как настроить среду размещения Azure двумя способами: один через соединитель службы и другой путем настройки каждой среды размещения напрямую.
Это важно
Для команд соединителя служб требуется Azure CLI 2.41.0 или более поздней версии.
Назначение управляемого удостоверения с помощью портала Azure
Ниже показано, как назначить управляемое удостоверение, назначаемое системой, для различных веб-служб размещения. Управляемое удостоверение может безопасно подключаться к другим службам Azure с помощью конфигураций приложений, настроенных ранее.
- Служба приложений
- Соединитель служб
- Контейнерные приложения
- Azure Spring Apps
- виртуальные машины
- AKS
На главной странице обзора экземпляра Службы приложений Azure выберите Удостоверение в области навигации.
На вкладке "Назначено системой" убедитесь, что поле "Состояние" установлено в включено. Назначенное системой удостоверение внутренне управляется Azure и выполняет административные задачи за вас. Сведения и идентификаторы идентичности никогда не раскрываются в вашем коде.
Вы также можете назначить управляемое удостоверение в среде размещения Azure с помощью Azure CLI.
- Служба приложений
- Соединитель служб
- Контейнерные приложения
- Azure Spring Apps
- виртуальные машины
- AKS
Управляемое удостоверение можно назначить экземпляру службы приложений 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)
Назначьте роли управляемому удостоверению
Затем предоставьте разрешения управляемой учетной записи, назначенной для доступа к экземпляру MySQL.
Эти действия создадут пользователя Microsoft Entra для управляемого удостоверения и предоставят ему все разрешения для базы данных $AZ_DATABASE_NAME . Имя базы данных $AZ_DATABASE_NAME можно изменить в соответствии с вашими потребностями.
Сначала создайте скрипт SQL с именем create_ad_user.sql для создания пользователя, отличного от администратора. Добавьте следующее содержимое и сохраните его локально:
export AZ_MYSQL_AD_MI_USERID=$(az ad sp show --id $AZ_MI_OBJECT_ID --query appId --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_MI_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_MI_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_MI_USERNAME'@'%';
FLUSH privileges;
EOF
Затем выполните следующую команду, чтобы запустить скрипт SQL для создания пользователя, не являющегося администратором Microsoft Entra.
mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Теперь используйте следующую команду, чтобы удалить временный файл скрипта SQL:
rm create_ad_user.sql
Тестирование приложения
Перед развертыванием приложения в среде размещения необходимо внести еще одно изменение в код, так как приложение будет подключаться к MySQL с помощью пользователя, созданного для управляемого удостоверения.
Переработайте код, чтобы использовать пользователя, созданного для управляемой учетной записи.
properties.put("user", "$AZ_MYSQL_AD_MI_USERNAME");
После внесения этих изменений в код можно создать и повторно развернуть приложение. Затем перейдите на размещённое приложение в браузере. Приложение должно успешно подключиться к базе данных MySQL. Помните, что для распространения назначений ролей через среду Azure может потребоваться несколько минут. Ваше приложение теперь настроено для работы как локально, так и в продуктивной среде, без необходимости для разработчиков управлять секретами в самом приложении.
Дальнейшие шаги
Из этого руководства вы узнали, как перенести приложение в бессерверные подключения.
Дополнительные сведения о концепциях, описанных в этой статье, см. в следующих ресурсах: