Share via


PostgreSQL 인증에 Microsoft Entra ID 사용

적용 대상: Azure Database for PostgreSQL - 단일 서버

Important

Azure Database for PostgreSQL - 단일 서버는 곧 사용 중지됩니다. Azure Database for PostgreSQL - 유연한 서버로 업그레이드하는 것이 좋습니다. Azure Database for PostgreSQL - 유연한 서버로 마이그레이션하는 방법에 대한 자세한 내용은 Azure Database for PostgreSQL 단일 서버에 대한 새로운 소식을 참조하세요.

이 문서에서는 Azure Database for PostgreSQL을 사용하여 Microsoft Entra ID 액세스를 구성하는 방법과 Microsoft Entra 토큰을 사용하여 연결하는 방법을 단계별로 안내합니다.

Microsoft Entra 관리 사용자 설정

Microsoft Entra 관리자 사용자만 Microsoft Entra ID 기반 인증을 위한 사용자를 만들거나 사용하도록 설정할 수 있습니다. Microsoft Entra 관리자는 사용자 권한(예: CREATEDB)이 높기 때문에 일반 데이터베이스 작업에는 사용하지 않는 것이 좋습니다.

Microsoft Entra 관리자(사용자 또는 그룹 사용 가능)를 설정하려면 다음 단계를 따릅니다.

  1. Azure Portal에서 Microsoft Entra ID에 사용하려는 Azure Database for PostgreSQL 인스턴스를 선택합니다.
  2. 설정에서 Active Directory 관리자를 선택합니다.

Microsoft Entra 관리자 설정

  1. 고객 테넌트에서 유효한 Microsoft Entra 사용자를 Microsoft Entra 관리자로 선택합니다.

Important

관리자를 설정하면 Azure Database for PostgreSQL 서버에 전체 관리자 권한이 있는 새 사용자가 추가됩니다. Azure Database for PostgreSQL의 Microsoft Entra 관리 사용자는 azure_ad_admin 역할을 갖게 됩니다. PostgreSQL 서버당 하나의 Microsoft Entra 관리자만 만들 수 있으며 다른 관리자를 선택하면 서버에 대해 구성된 기존 Microsoft Entra 관리자를 덮어씁니다. 개별 사용자 대신 Microsoft Entra 그룹을 지정하여 여러 관리자를 보유할 수 있습니다.

PostgreSQL 서버당 하나의 Microsoft Entra 관리자만 만들 수 있으며 다른 관리자를 선택하면 서버에 대해 구성된 기존 Microsoft Entra 관리자를 덮어씁니다. 개별 사용자 대신 Microsoft Entra 그룹을 지정하여 여러 관리자를 보유할 수 있습니다. 그러면 관리 목적으로 그룹 이름으로 로그인됩니다.

Microsoft Entra ID를 사용하여 Azure Database for PostgreSQL에 연결

다음 개략적인 다이어그램은 Azure Database for PostgreSQL에서 Microsoft Entra 인증을 사용하는 워크플로를 요약합니다.

인증 흐름

Microsoft Entra를 인식하지 않고 PostgreSQL에 연결할 때 사용자 이름과 암호 지정만 지원하는 psql과 같은 일반적인 PostgreSQL 도구와 함께 작동하도록 Microsoft Entra 통합을 설계했습니다. 위 그림과 같이 Microsoft Entra 토큰을 암호로 전달합니다.

현재 다음 클라이언트를 테스트했습니다.

  • psql 명령줄(PGPASSWORD 변수를 사용하여 토큰 전달, 자세한 내용은 3단계 참조)
  • Azure Data Studio(PostgreSQL 확장 사용)
  • 기타 libpq 기반 클라이언트(예: 일반적인 애플리케이션 프레임워크 및 ORM)
  • PgAdmin(지금 서버 생성 시 연결 선택 취소. 자세한 내용은 4단계 참조)

사용자/애플리케이션이 아래에 설명된 Microsoft Entra ID를 사용하여 인증해야 하는 단계는 다음과 같습니다.

필수 조건

Azure Cloud Shell, Azure VM 또는 로컬 머신에서 수행할 수 있습니다. Azure CLI가 설치되어 있는지 확인합니다.

Microsoft Entra ID로 단일 사용자로 인증

1단계: 사용자의 Azure 구독에 로그인

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

az login

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

2단계: Microsoft Entra 액세스 토큰 검색

Azure CLI 도구를 호출하여 1단계에서 Microsoft Entra 인증 사용자에 대한 액세스 토큰을 획득하여 Azure Database for PostgreSQL에 액세스합니다.

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

az account get-access-token --resource https://server-name.database.windows.net

위의 리소스 값은 표시된 대로 정확하게 지정해야 합니다. 다른 클라우드의 경우 다음을 사용하여 리소스 값을 조회할 수 있습니다.

az cloud show

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

az account get-access-token --resource-type oss-rdbms

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

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

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

3단계: client psql로 로그인하는 데 암호로 토큰 사용

연결할 때 액세스 토큰을 PostgreSQL 사용자 암호로 사용해야 합니다.

액세스 토큰은 psql이 직접 수락할 수 있는 암호 길이를 초과하므로 psql 명령줄 클라이언트를 사용하는 경우 PGPASSWORD 환경 변수를 통해 액세스 토큰을 전달해야 합니다.

Windows 예제:

set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'

Linux/macOS 예제:

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

이제 일반적인 방식으로 Azure Database for PostgreSQL과 연결을 시작할 수 있습니다.

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com@mydb dbname=postgres sslmode=require"

4단계: PgAdmin으로 로그인하는 데 암호로 토큰 사용

pgAdmin과 함께 Microsoft Entra 토큰을 사용하여 연결하려면 다음 단계를 따라야 합니다.

  1. 서버 생성 시 지금 연결 옵션을 선택 취소합니다.
  2. 연결 탭에 서버 세부 정보를 입력하고 저장합니다.
  3. 브라우저 메뉴에서 Azure Database for PostgreSQL 서버에 연결을 선택합니다.
  4. 메시지가 표시되면 AD 토큰 암호를 입력합니다.

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

  • user@tenant.onmicrosoft.com은 Microsoft Entra 사용자의 이름입니다.
  • Microsoft Entra 사용자 및 그룹 이름은 대/소문자를 구분하므로 Azure 사용자의 철자를 정확히 입력해야 합니다.
  • 이름에 공백이 포함되어 있으면 각 공백 앞에 \를 사용하여 이스케이프합니다.
  • 액세스 토큰의 유효 기간은 5분에서 60분 사이입니다. Azure Database for PostgreSQL에 로그인하기 직전에 액세스 토큰을 가져오는 것이 좋습니다.

이제 Microsoft Entra 인증을 사용하여 Azure Database for PostgreSQL 서버에 인증되었습니다.

Microsoft Entra ID로 그룹 멤버로 인증합니다.

1단계: Azure Database for PostgreSQL에서 Microsoft Entra 그룹 만들기

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

예시:

CREATE USER <new_user> IN ROLE azure_ad_user;

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

2단계: 사용자 Azure 구독에 로그인

Azure CLI 도구를 사용하여 Microsoft Entra ID로 인증합니다. Azure Cloud Shell에서는 이 단계가 필요하지 않습니다. 사용자는 Microsoft Entra 그룹의 멤버여야 합니다.

az login

3단계: Microsoft Entra 액세스 토큰 검색

Azure CLI 도구를 호출하여 2단계에서 Microsoft Entra 인증 사용자에 대한 액세스 토큰을 획득하여 Azure Database for PostgreSQL에 액세스합니다.

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

az account get-access-token --resource https://server-name.database.windows.net

위의 리소스 값은 표시된 대로 정확하게 지정해야 합니다. 다른 클라우드의 경우 다음을 사용하여 리소스 값을 조회할 수 있습니다.

az cloud show

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

az account get-access-token --resource-type oss-rdbms

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

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

4단계: psql 또는 PgAdmin으로 로그인하기 위한 암호로 토큰 사용(사용자 연결에 대한 위 단계 참조)

그룹 구성원으로 연결할 때 중요한 고려 사항:

  • groupname@mydb는 연결하려는 Microsoft Entra 그룹의 이름입니다.
  • 항상 Microsoft Entra 사용자/그룹 이름 뒤에 서버 이름을 추가합니다(예: @mydb)
  • Microsoft Entra 그룹 이름의 철자를 정확하게 입력했는지 확인합니다.
  • Microsoft Entra 사용자 및 그룹 이름은 대/소문자를 구분합니다.
  • 그룹으로 연결할 때 그룹 구성원의 별칭이 아닌 그룹 이름(예: GroupName@mydb)만 사용합니다.
  • 이름에 공백이 포함된 경우 각 공간 앞에 \를 사용하여 이스케이프합니다.
  • 액세스 토큰의 유효 기간은 5분에서 60분 사이입니다. Azure Database for PostgreSQL에 로그인하기 직전에 액세스 토큰을 가져오는 것이 좋습니다.

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

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

Azure Database for PostgreSQL 데이터베이스에 Microsoft Entra 사용자를 추가하려면 연결 후 다음 단계를 수행합니다(연결 방법은 이후 섹션 참조).

  1. 먼저 Microsoft Entra 사용자 <user>@yourtenant.onmicrosoft.com이 Microsoft Entra 테넌트의 유효한 사용자인지 확인합니다.
  2. Microsoft Entra 관리 사용자로 Azure Database for PostgreSQL 인스턴스에 로그인합니다.
  3. Azure Database for PostgreSQL에 <user>@yourtenant.onmicrosoft.com 역할을 만듭니다.
  4. <user>@yourtenant.onmicrosoft.com을 azure_ad_user 역할의 멤버로 지정합니다. 이는 Microsoft Entra 사용자에게만 제공되어야 합니다.

예제:

CREATE USER "user1@yourtenant.onmicrosoft.com" IN ROLE azure_ad_user;

참고 항목

Microsoft Entra ID를 통해 사용자를 인증해도 사용자에게 Azure Database for PostgreSQL 데이터베이스 내의 개체에 액세스할 수 있는 권한이 부여되지 않습니다. 사용자에게 필요한 권한을 수동으로 부여해야 합니다.

토큰 유효성 검사

Azure Database for PostgreSQL의 Microsoft Entra 인증으로 사용자가 PostgreSQL 서버에 존재하는지 확인하고 토큰 콘텐츠의 유효성을 검사하여 토큰의 유효 기간을 확인합니다. 다음 토큰 유효성 검사 단계를 수행합니다.

  • 토큰이 Microsoft Entra ID로 서명되고 변조되지 않았는지 검사
  • 서버와 연결된 테넌트에 Microsoft Entra ID에서 토큰을 발급했는지 검사
  • 토큰이 만료되지 않았는지 검사
  • 토큰이 다른 Azure 리소스가 아닌 Azure Database for PostgreSQL 리소스 용인지 검사

기존 PostgreSQL 사용자를 Microsoft Entra ID 기반 인증으로 마이그레이션

기존 사용자에 대해 Microsoft Entra 인증을 사용하도록 설정할 수 있습니다. 다음 두 가지 사례를 고려해야 합니다.

사례 1: PostgreSQL 사용자 이름이 Microsoft Entra 사용자 계정 이름과 일치함

가능성은 희박하지만 기존 사용자가 이미 Microsoft Entra 사용자 이름과 일치하는 경우 Microsoft Entra 인증을 사용하도록 설정하기 위해 해당 사용자에게 azure_ad_user 역할을 부여할 수 있습니다.

GRANT azure_ad_user TO "existinguser@yourtenant.onmicrosoft.com";

이제 이전에 구성한 PostgreSQL 사용자 암호를 사용하는 대신 Microsoft Entra 자격 증명을 사용하여 로그인할 수 있습니다.

사례 2: PostgreSQL 사용자 이름이 Microsoft Entra 사용자 계정 이름과 다름

PostgreSQL 사용자가 Microsoft Entra ID에 없거나 다른 사용자 이름을 가진 경우 Microsoft Entra 그룹을 사용하여 이 PostgreSQL 사용자로 인증할 수 있습니다. PostgreSQL 사용자와 일치하는 이름으로 Microsoft Entra 그룹을 만든 다음 기존 PostgreSQL 사용자에게 azure_ad_user 역할을 부여하여 기존 Azure Database for PostgreSQL 사용자를 Microsoft Entra ID로 마이그레이션할 수 있습니다.

GRANT azure_ad_user TO <new_user>;

이는 Microsoft Entra ID에 "DBReadUser" 그룹을 만들었다고 가정합니다. 해당 그룹에 속한 사용자는 이제 이 사용자로 데이터베이스에 로그인할 수 있습니다.

다음 단계