다음을 통해 공유


Azure Database for PostgreSQL 인증을 위해 Microsoft Entra ID 사용

이 문서에서는 Azure Database for PostgreSQL 인증을 위해 Microsoft Entra ID 액세스를 구성합니다. Azure Database for PostgreSQL 유연한 서버 인스턴스에서 Microsoft Entra 토큰을 사용하는 방법도 알아봅니다.

서버 프로비저닝 중 또는 나중에 Azure Database for PostgreSQL 유연한 서버 인스턴스에 대한 Microsoft Entra 인증을 구성할 수 있습니다. Microsoft Entra 관리자 사용자만 Microsoft Entra ID 기반 인증을 위한 사용자를 만들거나 사용하도록 설정할 수 있습니다. Microsoft Entra 관리자 역할에 높은 사용자 권한(예: CREATEDB)이 있으므로 일반 데이터베이스 작업에 사용하지 마세요.

Azure Database for PostgreSQL을 사용하는 여러 Microsoft Entra 관리자 사용자를 가질 수 있습니다. Microsoft Entra 관리 사용자는 사용자, 그룹 또는 서비스 주체일 수 있습니다.

필수 조건

네트워크 요구 사항 구성

Microsoft Entra ID는 다중 테넌트 애플리케이션입니다. Microsoft Entra 관리 그룹 추가와 같은 작업에는 아웃바운드 연결이 필요합니다.

네트워킹 요구 사항은 토폴로지마다 다릅니다.

  • 공용 액세스(허용된 IP 주소): 추가 아웃바운드 규칙이 필요하지 않습니다.
  • 프라이빗 액세스(가상 네트워크 통합):
    • AzureActiveDirectory 서비스 태그에 대해서만 트래픽을 허용하는 아웃바운드 NSG 규칙을 추가합니다.
    • 경로 테이블을 사용하는 경우 대상 AzureActiveDirectory 및 다음 홉 Internet이 있는 경로를 추가합니다.
    • 프록시를 사용하는 경우 서비스 태그에 AzureActiveDirectory 대한 HTTPS 트래픽만 허용합니다.
  • 사용자 지정 DNS:
    • 이러한 호스트 이름이 공개적으로 확인되는지 확인하세요: login.microsoftonline.com (인증) 및 graph.microsoft.com (Microsoft Graph API).
    • 해결에 실패하면 관리자 할당 및 토큰 획득 작업이 실패합니다.

서버 프로비전 중에 Microsoft Entra 관리자를 설정하려면 다음 단계를 따릅니다.

  1. Azure Portal에서 서버 프로비전 중에 인증 방법으로 PostgreSQL 및 Microsoft Entra 인증 또는 Microsoft Entra 인증만을 선택합니다.
  2. 관리자 설정 탭에서 Microsoft Entra 관리자가 될 유효한 Microsoft Entra 사용자, 그룹, 서비스 주체 또는 고객 테넌트의 관리 ID를 선택합니다.

PostgreSQL 및 Microsoft Entra 인증 방법을 선호하는 경우 선택적으로 로컬 PostgreSQL 관리자 계정을 추가할 수 있습니다.

비고

서버 프로비전 중에는 Microsoft Entra 관리자를 하나만 추가할 수 있습니다. 서버를 만든 후 여러 Microsoft Entra 관리자 사용자를 추가할 수 있습니다.

서버를 만든 후 Microsoft Entra 관리자를 설정하려면 다음 단계를 따릅니다.

  1. Azure Portal에서 Microsoft Entra ID에 사용하도록 설정하려는 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 선택합니다.
  2. 보안에서 인증을 선택합니다. 그런 다음, 요구 사항에 따라 PostgreSQL 및 Microsoft Entra 인증 또는 Microsoft Entra 인증만 중 하나를 인증 방법으로 선택합니다.
  3. Microsoft Entra 관리자 추가를 선택합니다. 그런 다음, Microsoft Entra 관리자가 될 유효한 Microsoft Entra 사용자, 그룹, 서비스 주체 또는 고객 테넌트의 관리 ID를 선택합니다.
  4. 저장을 선택합니다.

중요합니다

관리자를 설정할 때 새 사용자가 전체 관리자 권한이 있는 Azure Database for PostgreSQL 유연한 서버 인스턴스에 추가됩니다.

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

Microsoft Entra ID 통합은 psql과 같은 표준 PostgreSQL 도구와 함께 작동합니다. 이 도구는 Microsoft Entra를 인식하지 않으며 PostgreSQL에 연결할 때 사용자 이름과 암호 지정만 지원합니다.

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

  • psql 명령줄: PGPASSWORD 변수를 사용하여 토큰을 전달합니다.
  • Azure Data Studio: PostgreSQL 확장을 사용합니다.
  • 기타 libpq 기반 클라이언트: 일반적인 애플리케이션 프레임워크 및 ORM(개체 관계형 매퍼)을 예로 들 수 있습니다.
  • PgAdmin: 서버를 만들 때 지금 연결을 선택 취소합니다.

Microsoft Entra ID로 인증

다음 절차에 따라 Microsoft Entra ID를 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스 사용자로 인증합니다.

다음을 사용하여 진행할 수 있습니다.

  • Azure Cloud Shell
  • Azure 가상 머신
  • 로컬 컴퓨터

Azure에 로그인

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

az login

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

Microsoft Entra 액세스 토큰 검색

Azure CLI를 사용하여 Microsoft Entra 인증된 사용자가 Azure Database for PostgreSQL에 액세스할 수 있는 액세스 토큰을 가져옵니다. 퍼블릭 클라우드의 예는 다음과 같습니다.

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

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

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

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

클라이언트 psql로 로그인하기 위한 암호로 토큰 사용

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

psql 명령줄 클라이언트를 사용하는 경우 환경 변수를 통해 액세스 토큰을 PGPASSWORD 전달해야 합니다. 액세스 토큰이 psql에서 직접 허용할 수 있는 암호 길이보다 깁니다.

다음은 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>

명령 대체를 사용하여 2단계와 3단계를 함께 결합할 수도 있습니다. 토큰 검색을 변수에 넣고 환경 변수의 값 PGPASSWORD 으로 직접 전달할 수 있습니다.

export PGPASSWORD=$(az account get-access-token --resource-type oss-rdbms --query "[accessToken]" -o tsv)

이제 Azure Database for PostgreSQL에 연결합니다.

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

PgAdmin으로 로그인하기 위한 암호로 토큰 사용

PgAdmin에서 Microsoft Entra 토큰을 사용하여 연결하려면 다음 단계를 따릅니다.

  1. PgAdmin을 열고서버>을 선택합니다.
  2. 일반 탭에서 연결 이름을 입력하고 지금 연결의 지우기를 선택합니다.
  3. 연결 탭에서 호스트 세부 정보를 입력합니다. 사용자 이름을 Microsoft Entra UPN(예: user@tenant.onmicrosoft.com)으로 설정합니다. 저장합니다.
  4. 트리에서 서버를 선택하고 연결 서버를 선택합니다.
  5. 메시지가 표시되면 액세스 토큰을 암호로 붙여넣습니다.

다음은 연결할 때 몇 가지 필수 고려 사항입니다.

  • user@tenant.onmicrosoft.com은 Microsoft Entra 사용자의 userPrincipalName입니다.

  • Azure 사용자의 철자를 정확하게 사용해야 합니다. Microsoft Entra 사용자 및 그룹 이름은 대/소문자를 구분합니다.

  • 이름에 공백이 포함된 경우 각 공백 앞에 백슬래시(\)를 사용하여 이스케이프합니다. Azure CLI를 사용하여 로그인한 사용자를 가져오고 PGUSER 환경 변수에 대한 값을 설정할 수 있습니다.

    export PGUSER=$(az ad signed-in-user show --query "[userPrincipalName]" -o tsv | sed 's/ /\\ /g')
    
  • 액세스 토큰의 유효기간은 5분~60분입니다. Azure Database for PostgreSQL에 대한 로그인을 시작하기 전에 액세스 토큰을 가져와야 합니다.

이제 Microsoft Entra 인증을 통해 Azure Database for PostgreSQL 서버에 인증되었습니다.

Microsoft Entra ID로 그룹 멤버로 인증

이 섹션에서는 Microsoft Entra 그룹을 사용하여 연결하는 방법을 보여줍니다. 그룹의 구성원이어야 하며 데이터베이스에서 그룹을 만들어야 합니다(매핑).

그룹 관리자 만들기

데이터베이스에서 그룹 기본값(역할)을 만듭니다(필요에 따라 표시 이름을 교체하십시오).

select * from  pgaadauth_create_principal('Prod DB Readonly', false, false).

그룹 동기화를 사용할 수 없는 경우 구성원은 액세스 토큰을 사용하여 로그인하고 그룹 이름을 사용자 이름으로 지정할 수 있습니다.

"ON"으로 설정된 pgaadauth.enable_group_sync 서버 매개 변수를 통해 그룹 동기화를 사용하는 경우 구성원은 개별 Entra ID 자격 증명으로 로그인해야 하지만 그룹 이름으로 사용자 이름으로 로그인할 수 있습니다.

  • 그룹 로그인은 호환성을 위해 계속 사용할 수 있지만 다음을 사용하여 사용하지 않도록 설정할 수 있습니다. ALTER ROLE "ROLE_NAME" NOLOGIN;

  • 동기화를 유지하기 위해 그룹 역할을 삭제하면 안 됩니다.

  • 그룹은 30분마다 자동으로 동기화됩니다.

  • 수동 동기화는 다음 SELECT * FROM pgaadauth_sync_roles_for_group_members(); 을 사용하여 트리거할 수 있습니다(pgaadauth.enable_group_sync 매개 변수는 "ON"이어야 함).

  • 그룹 이름과 같은 그룹 메타데이터에 대한 변경 내용이 동기화되지 않음

  • 그룹 멤버 자격 변경 내용이 동기화됨

    비고

    관리 ID 및 서비스 주체는 그룹 멤버로 지원됩니다.

Azure에 로그인

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

az login

Microsoft Entra 액세스 토큰 검색

Azure CLI를 사용하여 Microsoft Entra 인증된 사용자가 Azure Database for PostgreSQL에 액세스할 수 있는 액세스 토큰을 가져옵니다. 퍼블릭 클라우드의 예는 다음과 같습니다.

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

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

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

psql 또는 PgAdmin으로 로그인하기 위한 암호로 토큰 사용

다음 고려 사항은 그룹 멤버로 연결할 때 필수적입니다.

  • 그룹 이름은 Microsoft Entra 그룹 표시 이름(대/소문자 구분)과 정확히 일치해야 합니다.
  • 멤버 별칭이 아닌 그룹 이름만 사용합니다.
  • 필요한 경우 공백을 이스케이프합니다(예: Prod\ DB\ Readonly).
  • 토큰 유효 기간은 5~60분입니다. 연결하기 직전에 획득하고, 스크립트에 토큰을 저장하지 마세요.

팁 (조언)

인증에 실패하면 데이터베이스 역할이 존재하는지 확인하고(예: \du 사용) 설정 pgaadauth.enable_group_sync을 확인합니다.

이제 Microsoft Entra 인증을 통해 PostgreSQL 서버에서 인증되었습니다.