Azure Database for MySQL MySQL 커뮤니티 버전에서 제공하는 관계형 데이터베이스 서비스입니다. 단일 서버 또는 유연한 서버를 사용하여 Azure에서 MySQL 데이터베이스를 호스트할 수 있습니다. 예측 가능한 성능과 동적 확장성으로 중요 업무용 워크로드를 처리할 수 있는 완전히 관리되는 서비스로서의 데이터베이스 제품입니다.
버전 4.5.0Spring Cloud Azure는 Azure Database for MySQL 유연한 서버에 대한 인증을 위해 다양한 유형의 자격 증명을 지원합니다.
지원되는 MySQL 버전
현재 버전의 시작에서는 Azure Database for MySQL 유연한 서버 버전 5.7 또는 8.0사용해야 합니다.
핵심 기능
암호 없는 연결
암호 없는 연결은 애플리케이션, 해당 구성 파일 또는 환경 변수에 자격 증명을 저장하지 않고 Azure 서비스에 연결하는 데 Microsoft Entra 인증을 사용합니다. Microsoft Entra 인증은 Microsoft Entra ID에 정의된 ID를 사용하여 Azure Database for MySQL에 연결하는 메커니즘입니다. Microsoft Entra 인증을 사용하면 중앙 위치에서 데이터베이스 사용자 ID 및 기타 Microsoft 서비스를 관리할 수 있으므로 권한 관리가 간소화됩니다.
작동 방식
Spring Cloud Azure는 먼저 애플리케이션 인증 구성에 따라 다음 유형의 자격 증명 중 하나를 빌드합니다.
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredentialDefaultAzureCredential
이러한 유형의 자격 증명을 찾을 수 없는 경우 애플리케이션 속성, 환경 변수, 관리 ID 또는 IDE에서 DefaultAzureCredential 자격 증명을 가져옵니다. 자세한 내용은 Spring Cloud Azure 인증참조하세요.
다음 상위 수준 다이어그램에서는 Azure Database for MySQL에서 OAuth 자격 증명 인증을 사용하여 인증이 작동하는 방식을 요약합니다. 화살표는 통신 경로를 나타냅니다.
MySQL에 대한 Microsoft Entra 인증을 보여 주는
구성
Spring Cloud Azure for MySQL은 다음 두 가지 수준의 구성 옵션을 지원합니다.
credential접두사를 사용하여profile및spring.cloud.azure전역 인증 구성 옵션입니다.Spring Cloud Azure for MySQL 일반 구성 옵션
다음 표에서는 Spring Cloud Azure for MySQL 일반 구성 옵션을 보여 줍니다.
| 이름 | 묘사 |
|---|---|
| spring.datasource.azure.passwordless 지원 | OAuth2 Microsoft Entra 토큰 자격 증명을 사용하여 Azure 데이터베이스에 암호 없는 연결을 사용하도록 설정할지 여부입니다. |
| spring.datasource.azure.credential.client-certificate-password | 인증서 파일의 암호입니다. |
| spring.datasource.azure.credential.client-certificate-path | Azure에서 서비스 주체 인증을 수행할 때 사용할 PEM 인증서 파일의 경로입니다. |
| spring.datasource.azure.credential.client-id | Azure에서 서비스 주체 인증을 수행할 때 사용할 클라이언트 ID입니다. 레거시 속성입니다. |
| spring.datasource.azure.credential.client-secret | Azure에서 서비스 주체 인증을 수행할 때 사용할 클라이언트 암호입니다. 레거시 속성입니다. |
| spring.datasource.azure.credential.managed-identity 지원 | 관리 ID가 Azure로 인증되도록 설정할지 여부입니다.
true
client-id 설정된 경우 클라이언트 ID를 사용자 할당 관리 ID 클라이언트 ID로 사용합니다. 기본값은 false. |
| spring.datasource.azure.credential.password | Azure에서 사용자 이름/암호 인증을 수행할 때 사용할 암호입니다. |
| spring.datasource.azure.credential.username | Azure에서 사용자 이름/암호 인증을 수행할 때 사용할 사용자 이름입니다. |
| spring.datasource.azure.profile.cloud 형식 | 연결할 Azure 클라우드의 이름입니다. |
| spring.datasource.azure.profile.environment.active-directory-endpoint | 연결할 Microsoft Entra 엔드포인트입니다. |
| spring.datasource.azure.profile.테넌트 ID | Azure 리소스에 대한 테넌트 ID입니다.
tenant-id 허용되는 값은 common, organizations, consumers또는 테넌트 ID입니다. |
종속성 설정
프로젝트에 다음 종속성을 추가합니다. 프로젝트에 spring-boot-starter 종속성이 전이적으로 자동으로 포함됩니다.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
메모
버전 4.5.0이후 암호 없는 연결이 지원되었습니다.
위의 종속성과 함께 BOM spring-cloud-azure-dependencies 추가해야 합니다. 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.
기본 사용량
다음 섹션에서는 클래식 Spring Boot 애플리케이션 사용 시나리오를 보여 줍니다.
중요하다
암호 없는 연결은 Microsoft Entra 인증을 사용합니다. Microsoft Entra 인증을 사용하려면 먼저 Microsoft Entra 관리 사용자를 설정해야 합니다. Microsoft Entra 관리자 사용자만 Microsoft Entra ID 기반 인증에 대한 사용자를 만들고 사용하도록 설정할 수 있습니다. 자세한 내용은 Azure Database for MySQLSpring Data JDBC를 사용합니다.
암호 없이 로컬로 Azure MySQL에 연결
사용자를 만들고 권한을 부여하려면
MySQL 비관리자 만들기 및 Azure Database for MySQLSpring Data JDBC 사용 섹션을 참조하세요.권한 application.yml 파일에서 다음 속성을 구성합니다.
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_NON_ADMIN_USERNAME} azure: passwordless-enabled: true
서비스 주체를 사용하여 Azure MySQL에 연결
서비스 주체에 대한 Microsoft Entra 사용자를 만들고 권한을 부여합니다.
먼저 다음 명령을 사용하여 일부 환경 변수를 설정합니다.
export AZURE_MYSQL_AZURE_AD_SP_USERID=$(az ad sp list \ --display-name <service_principal-name> \ --query '[0].appId' --output tsv) export AZURE_MYSQL_AZURE_AD_SP_USERNAME=<YOUR_MYSQL_AZURE_AD_USERNAME> export AZURE_MYSQL_SERVER_NAME=<YOUR_MYSQL_SERVER_NAME> export AZURE_MYSQL_DATABASE_NAME=<YOUR_MYSQL_DATABASE_NAME> export CURRENT_USERNAME=$(az ad signed-in-user show \ --query userPrincipalName \ --output tsv)그런 다음 관리자가 아닌 사용자를 만들기 위해 create_ad_user_sp.sql이라는 SQL 스크립트를 만듭니다. 다음 내용을 추가하고 로컬로 저장합니다.
cat << EOF > create_ad_user_sp.sql SET aad_auth_validate_oids_in_tenant = OFF; CREATE AADUSER '$AZURE_MYSQL_AZURE_AD_SP_USERNAME' IDENTIFIED BY '$AZURE_MYSQL_AZURE_AD_SP_USERID'; GRANT ALL PRIVILEGES ON $AZURE_MYSQL_DATABASE_NAME.* TO '$AZURE_MYSQL_AZURE_AD_SP_USERNAME'@'%'; FLUSH privileges; EOF다음 명령을 사용하여 SQL 스크립트를 실행하여 Microsoft Entra 비관리 사용자를 만듭니다.
mysql -h $AZURE_MYSQL_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_sp.sql이제 다음 명령을 사용하여 임시 SQL 스크립트 파일을 제거합니다.
rm create_ad_user_sp.sql
application.yml 파일에서 다음 속성을 구성합니다.
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_SP_USERNAME} azure: passwordless-enabled: true
메모
tenant-id 허용되는 값은 common, organizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은
Azure Spring Apps에서 관리 ID를 사용하여 Azure MySQL에 연결
관리 ID를 사용하도록 설정하려면
Azure Database for MySQL암호 없는 연결을 사용하도록 애플리케이션 마이그레이션 섹션을 사용하여 관리 ID 할당을 참조하세요.Azure Portal 권한을 부여하려면
Azure Database for MySQL암호 없는 연결을 사용하도록 애플리케이션 마이그레이션 섹션에 역할 할당을 참조하세요.관리 ID application.yml 파일에서 다음 속성을 구성합니다.
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_MI_USERNAME} azure: passwordless-enabled: true
샘플
GitHub에서 azure-spring-boot-samples 리포지토리를 참조하세요.