Azure Database for MySQL - 유연한 서버에 대한 Microsoft Entra 인증 설정

적용 대상: Azure Database for MySQL - 유연한 서버

이 자습서에서는 Azure Database for MySQL - 유연한 서버에 대한 Microsoft Entra 인증을 설정하는 방법을 보여 줍니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • Microsoft Entra 관리자를 구성합니다.
  • Microsoft Entra ID를 사용하여 Azure Database for MySQL 유연한 서버에 연결합니다.

필수 조건

Microsoft Entra 관리자 구성

Microsoft Entra 관리자 사용자를 만들려면 다음 단계를 수행합니다.

  • Azure Portal에서 Microsoft Entra ID에 사용하도록 설정하려는 Azure Database for MySQL - 유연한 서버의 인스턴스를 선택합니다.

  • 보안 창에서 인증: Microsoft Entra 인증을 구성하는 방법에 대한 다이어그램.을 선택합니다.

  • 사용할 수 있는 인증 유형 3가지는 다음과 같습니다.

    • MySQL 인증만 해당 – 기본적으로 MySQL은 네이티브 암호 해시 방법을 사용하여 인증을 수행하는 기본 제공 mysql_native_password 인증 플러그 인을 사용합니다.

    • Microsoft Entra 인증 전용 – Microsoft Entra 계정으로만 인증을 허용합니다. mysql_native_password 인증 비활성화 및 서버 매개 변수 aad_auth_only 켜기

    • MySQL 및 Microsoft Entra 인증 – 네이티브 MySQL 암호 또는 Microsoft Entra 계정을 사용하여 인증을 허용합니다. 서버 매개 변수 aad_auth_only 끄기

  • ID 선택 - 사용자 할당 관리 ID를 선택/추가합니다. UMI가 Microsoft Graph에서 서버 ID로 읽을 수 있도록 하려면 다음 권한이 필요합니다. 또는 사용자 할당 관리 ID에 디렉터리 읽기 권한자 역할을 제공합니다.

    • User.Read.All: Microsoft Entra 사용자 정보에 대한 액세스를 허용합니다.
    • User.Read.All: Microsoft Entra 그룹 정보에 대한 액세스를 허용합니다.
    • Application.Read.ALL: Azure AD 서비스 주체(애플리케이션) 정보에 대한 액세스를 허용합니다.

Important

권한 있는 역할 관리자 역할이 있는 사용자만 이러한 권한을 부여할 수 있습니다.

  • 고객 테넌트에서 유효한 Microsoft Entra 사용자 또는 Microsoft Entra 그룹을 Microsoft Entra 관리자로 선택합니다. Microsoft Entra 인증 지원을 사용 설정하면 Microsoft Entra 관리자를 MySQL 서버에 Microsoft Entra 사용자를 추가할 권한이 있는 보안 주체로 추가할 수 있습니다.

    참고 항목

    MySQL 서버당 하나의 Microsoft Entra 관리자만 만들 수 있으며 다른 관리자를 선택하면 서버에 구성된 기존 Microsoft Entra 관리자를 덮어씁니다.

사용자가 할당한 관리 ID에 권한 부여

다음 샘플 PowerShell 스크립트는 UMI에 필요한 권한을 부여합니다. 이 샘플은 UMI umiservertest에 권한을 할당합니다.

스크립트를 실행하려면 전역 관리자 또는 권한 있는 역할 관리자 역할이 있는 사용자로 로그인해야 합니다.

스크립트는 UMI에 Microsoft Graph에 액세스할 수 있는 User.Read.All, GroupMember.Read.AllApplication.Read.ALL 권한을 부여합니다.

# Script to assign permissions to the UMI "umiservertest"

import-module AzureAD
$tenantId = '<tenantId>' # Your Azure AD tenant ID

Connect-AzureAD -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI 
# The following Microsoft Graph permissions are required: 
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.ALL

# Search for Microsoft Graph
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]

#Output

#ObjectId                             AppId                                DisplayName
#--------                             -----                                -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change 

$MSIName = "<managedIdentity>";  # Name of your user-assigned
$MSI = Get-AzureADServicePrincipal -SearchString $MSIName 
if($MSI.Count -gt 1)
{ 
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"

# Choose the right UMI

Exit
} 

# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number

# Assign the app roles

$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id 
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id

스크립트의 마지막 단계에서 이름이 비슷한 UMI가 더 있는 경우 적절한 $MSI[ ]array 번호를 사용해야 합니다. 예제는 $AAD_SP.ObjectId[0]입니다.

사용자가 할당한 관리 ID에 대한 권한 확인

UMI에 대한 사용 권한을 확인하려면 Azure Portal로 이동합니다. Microsoft Entra ID 리소스에서 Enterprise 애플리케이션으로 이동합니다. 애플리케이션 유형에 대해 모든 애플리케이션을 선택하고 생성된 UMI를 검색합니다.

UMI를 선택하고 보안 아래의 권한 설정으로 이동합니다.

UMI에 권한을 부여하면 서버 ID로 할당된 UMI로 만들어진 모든 서버에 대해 권한이 사용하도록 설정됩니다.

Microsoft Entra ID를 사용하여 Azure Database for MySQL 유연한 서버에 연결

1 - Microsoft Entra ID로 인증

Azure CLI 도구를 사용하여 Microsoft Entra ID로 인증하는 것부터 시작합니다.
Azure Cloud Shell에서는 이 단계가 필요하지 않습니다.

  • az login 명령을 사용하여 Azure 계정에 로그인합니다. Azure 계정의 구독 ID를 나타내는 ID 속성에 유의합니다.

    az login
    

이 명령은 Microsoft Entra 인증 페이지에 대한 브라우저 창을 시작합니다. Microsoft Entra 사용자 ID와 암호를 제공해야 합니다.

  • 구독이 여러 개인 경우 az account set 명령을 사용하여 적절한 구독을 선택합니다.

    az account set --subscription \<subscription id\>
    

2 - Microsoft Entra 액세스 토큰 검색

Azure Database for MySQL - 유연한 서버에 액세스하려면 Azure CLI 도구를 호출하여 1단계에서 Microsoft Entra 인증된 사용자의 액세스 토큰을 가져옵니다.

  • 예(공용 클라우드의 경우):

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • 위의 리소스 값은 표시된 대로 정확하게 지정해야 합니다. 다른 클라우드의 경우 다음을 사용하여 리소스 값을 조회할 수 있습니다.

    az cloud show
    
  • Azure CLI 버전 2.0.71 이상은 모든 클라우드에 다음과 같은 더 편리한 버전으로 명령을 지정할 수 있습니다.

    az account get-access-token --resource-type oss-rdbms
    
  • PowerShell을 사용하면 다음 명령을 통해 액세스 토큰을 얻을 수 있습니다.

    $accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
    $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
    

인증이 성공하면 Microsoft Entra ID는 액세스 토큰을 반환합니다.

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

토큰은 Azure Database for MySQL 서비스를 대상으로 하고 인증된 사용자에 대한 모든 정보를 인코딩하는 Base 64 문자열입니다.

액세스 토큰의 유효 기간은 5분에서 60분 사이입니다. Azure Database for MySQL - 유연한 서버에 로그인을 시작하기 전에 액세스 토큰을 가져오는 것이 좋습니다.

  • 다음 PowerShell 명령을 사용하여 토큰 유효성을 확인할 수 있습니다.
   $accessToken.ExpiresOn.DateTime

3 - MySQL에 로그인하기 위한 암호로 토큰 사용

연결할 때 액세스 토큰을 MySQL 사용자 암호로 사용해야 합니다. 위에서 설명한 방법을 사용하여 MySQL 워크벤치와 같은 GUI 클라이언트를 사용하여 토큰을 검색할 수 있습니다.

MySQL CLI를 사용하여 Azure Database for MySQL - 유연한 서버에 연결

CLI를 사용하는 경우 다음 축약형을 사용하여 연결할 수 있습니다.

예(Linux/macOS):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

예제(PowerShell):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)


mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)

MySQL Workbench를 사용하여 Azure Database for MySQL - 유연한 서버에 연결

  • MySQL Workbench를 실행하고 데이터베이스 옵션을 선택한 다음 데이터베이스에 연결을 선택합니다.
  • 호스트 이름 필드에 MySQL FQDN(예: mysql.database.azure.com)을 입력합니다.
  • 사용자 이름 필드에 MySQL Microsoft Entra 관리자 이름을 입력합니다. 예: user@tenant.onmicrosoft.com.
  • 암호 필드에서 자격 증명 모음에 저장를 선택하고 파일(예: C:\temp\MySQLAccessToken.txt)의 액세스 토큰을 붙여넣습니다.
  • 고급 탭을 클릭하고 일반 텍스트 인증 플러그 인 사용을 선택합니다.
  • 확인을 선택하여 데이터베이스에 연결합니다.

연결 시 중요한 고려 사항은 다음과 같습니다.

  • user@tenant.onmicrosoft.com은 연결하는 데 사용하려는 Azure AD 사용자 또는 그룹의 이름입니다.
  • Microsoft Entra 그룹 이름의 철자를 정확하게 입력했는지 확인합니다.
  • Microsoft Entra 사용자 및 그룹 이름은 대/소문자를 구분합니다.
  • 그룹으로 연결할 때 그룹 이름만 사용합니다(예: GroupName).
  • 이름에 공백이 포함되어 있으면 각 공백 앞에 \를 사용하여 이스케이프합니다.

참고 항목

"enable-cleartext-plugin" 설정 - 다른 클라이언트와 유사한 구성을 사용하여 해시되지 않은 서버에 토큰이 전송되도록 해야 합니다.

이제 Microsoft Entra 인증을 사용하여 MySQL 유연한 서버에 인증되었습니다.

기타 Microsoft Entra 관리자 명령

  • 서버 Active Directory 관리자 관리

    az mysql flexible-server ad-admin
    
  • Active Directory 관리자 만들기

    az mysql flexible-server ad-admin create
    

    예: 사용자 'john@contoso.com', 관리자 ID '00000000-0000-0000-0000-000000000000' 및 ID 'test-identity'를 사용하여 Active Directory 관리자 만들기

    az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
    
  • Active Directory 관리자 삭제

    az mysql flexible-server ad-admin delete
    

    예: Active Directory 관리자 삭제

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • 모든 Active Directory 관리자 나열

    az mysql flexible-server ad-admin list
    

    예: Active Directory 관리자 나열

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • Active Directory 관리자 가져오기

    az mysql flexible-server ad-admin show
    

    예: Active Directory 관리자 가져오기

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • Active Directory 관리자가 특정 조건을 충족할 때까지 대기

    az mysql flexible-server ad-admin wait
    

    :

    • Active Directory 관리자가 있을 때까지 대기
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
    
    • Active Directory 관리자가 삭제될 때까지 대기
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
    

Azure Database for MySQL에서 Microsoft Entra 사용자 만들기

Azure Database for MySQL 데이터베이스에 Microsoft Entra 사용자를 추가하려면 연결 후 다음 단계를 수행합니다.

  1. 먼저 Microsoft Entra 사용자 <user>@yourtenant.onmicrosoft.com이 Microsoft Entra 테넌트의 유효한 사용자인지 확인합니다.
  2. Microsoft Entra 관리 사용자로 Azure Database for MySQL 인스턴스에 로그인합니다.
  3. Azure Database for MySQL에서 <user>@yourtenant.onmicrosoft.com 사용자를 만듭니다.

예제:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

32자를 초과하는 사용자 이름의 경우 연결할 때 별칭을 사용하는 것이 좋습니다.

예제:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

참고 항목

  1. MySQL은 선행 및 후행 공백을 무시하므로 사용자 이름에 선행 또는 후행 공백이 없어야 합니다.
  2. Microsoft Entra ID를 통해 사용자를 인증해도 사용자에게 Azure Database for MySQL 데이터베이스 내의 개체에 액세스할 수 있는 권한이 부여되지 않습니다. 사용자에게 필요한 권한을 수동으로 부여해야 합니다.

Azure Database for MySQL에서 Microsoft Entra 그룹 만들기

데이터베이스에 액세스하기 위해 Microsoft Entra 그룹을 사용하도록 설정하려면 사용자에 따라 정확한 메커니즘을 사용하되 대신 그룹 이름을 지정합니다.

예제:

CREATE AADUSER 'Prod_DB_Readonly';

로그인할 때 그룹 멤버는 개인용 액세스 토큰을 사용하지만 사용자 이름으로 지정된 그룹 이름으로 로그인합니다.

애플리케이션 드라이버와의 호환성

대부분의 드라이버가 지원되지만 암호를 일반 텍스트로 보내도록 설정해야 하므로 토큰을 수정하지 않고 보냅니다.

  • C/C++

    • libmysqlclient: 지원됨
    • mysql-connector-c++: 지원됨
  • Java

    • Connector/J(mysql-connector-java): 지원되며 useSSL 설정을 활용해야 함
  • Python

    • Connector/Python: 지원됨
  • Ruby

    • mysql2: 지원됨
  • .NET

    • mysql-connector-net: 지원됨, mysql_clear_password에 플러그인을 추가해야 함
    • mysql-net/MySqlConnector: 지원됨
  • Node.JS

    • mysqljs: 지원되지 않음(패치 없이 일반 텍스트로 토큰을 보내지 않음)
    • node-mysql2: 지원됨
  • Perl

    • DBD::mysql: 지원됨
    • Net::MySQL: 지원되지 않음
  • Go

    • go-sql-driver: 지원됨, 연결 문자열에 ?tls=true&allowCleartextPasswords=true 추가
  • PHP

    • mysqli 확장: 지원됨

    • PDO_MYSQL 드라이버: 지원됨

다음 단계