이 페이지에서는 AlloyDB Omni에서 Active Directory 그룹 기반 인증 및 승인을 설정하고 관리하는 방법을 설명합니다. Active Directory 그룹 기반 지원은 Active Directory의 사용자 그룹 멤버십을 기반으로 PostgreSQL 역할 멤버십 관리를 자동화하여 사용자 관리를 간소화하고 권한이 동기화되도록 합니다.
자세한 내용은 Active Directory 개요를 참조하세요.
Active Directory 통합 워크플로
Active Directory 통합은 다음 워크플로와 같이 PostgreSQL 확장 프로그램(google_pg_auth
)을 사용하여 구현됩니다.
- 사용자 로그인: 사용자가 GSSAPI를 사용하여 표준 Active Directory 사용자 인증 정보를 통해 AlloyDB Omni에 인증합니다.
- 자동 역할 생성: 사용자에게 해당 PostgreSQL 역할이 없으면 시스템에서 자동으로 역할을 생성합니다(예:
CREATE ROLE "user@REALM" WITH LOGIN;
). - LDAP 그룹 확인: 시스템이 LDAP로 Active Directory에 안전하게 연결하여 사용자의 현재 그룹 멤버십을 가져옵니다.
- 멤버십 동기화: 시스템에서 사용자의 Active Directory 그룹을 구성된 매핑과 비교합니다.
- 사용자가 매핑된 Active Directory 그룹에 있지만 해당 PostgreSQL 그룹에 없는 경우 사용자에게 멤버십이 부여됩니다.
- 사용자가 매핑된 Active Directory 그룹에 없지만 해당 PostgreSQL 그룹에 있는 경우 사용자의 멤버십이 취소됩니다.
- 로그인 완료: 사용자의 연결이 완료되고 데이터베이스에 로그인됩니다. 사용자의 권한은 사용자가 속한 PostgreSQL 역할에 따라 결정되며, 이 역할은 Active Directory 그룹 상태와 동기화됩니다.
이 동기화는 각 사용자 로그인 시 자동으로 이루어지므로 PostgreSQL 액세스 권한이 Active Directory의 현재 상태를 반영합니다.
시작하기 전에
Active Directory 그룹 지원을 AlloyDB Omni와 통합하기 전에 다음 요구사항을 충족하는지 확인하세요.
- GSSAPI 인증: AlloyDB Omni 인스턴스에 GSSAPI 기반 인증이 구성되어 작동해야 합니다. 자세한 내용은 Active Directory와 AlloyDB Omni 통합을 참조하세요.
PostgreSQL 그룹 역할: 다음 예시와 같이 Active Directory 그룹에 매핑할 PostgreSQL 그룹 역할을 수동으로 만들어야 합니다.
CREATE ROLE 'postgres_developers'; CREATE ROLE 'postgres_read_only';
권한: 이러한 PostgreSQL 그룹 역할에 데이터베이스 권한(예:
SELECT
및INSERT
)을 수동으로 할당해야 합니다. 통합은 멤버십만 관리하며 다시 예시와 같이 그룹 자체의 권한은 관리하지 않습니다.GRANT SELECT ON ALL TABLES IN SCHEMA sales TO postgres_read_only; GRANT USAGE ON SCHEMA finance TO postgres_developers; GRANT USAGE ON SCHEMA sales TO postgres_read_only; GRANT SELECT, INSERT ON finance.transactions TO postgres_developers;
Active Directory 그룹 지원 구성
AlloyDB Omni에서 Active Directory 그룹 지원을 구성하려면 google_pg_auth
확장 프로그램을 사용 설정하고 postgresql.conf
파일에 Active Directory 세부정보를 제공하고 사용자 인증 정보를 안전하게 처리합니다.
LDAP 비밀번호를 입력합니다.
다음 예시와 같이
AD_LDAP_PASSWORD
환경 변수를 사용하여ldap_bind_dn
서비스 계정의 비밀번호를 AlloyDB Omni 컨테이너에 제공해야 합니다.docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -e AD_LDAP_PASSWORD=AD_LDAP_PASSWORD \ -vDATA_DIR:/var/lib/postgresql/data \ -p HOST_PORT:5432 \ --restart=always \ google/alloydbomni:IMAGE_TAG
google_pg_auth
확장 프로그램을 사용 설정합니다.postgresql.conf
파일에서 다음 매개변수를 추가하거나 수정하여 확장 프로그램을 사용 설정하고 LDAP 연결을 구성합니다.postgresql.conf
파일은 AlloyDB Omni 이미지를 시작할 때 마운트한 데이터 디렉터리에 있습니다.# --------------------------------------------------------------------------- # ALLOYDB ACTIVE DIRECTORY INTEGRATION SETTINGS # --------------------------------------------------------------------------- google_pg_auth.enable_auth = on google_pg_auth.ldap_uri = "AD_LDAP_SERVER_HOST" google_pg_auth.ldap_base_dn = AD_LDAP_BASE_DN google_pg_auth.ldap_bind_dn = AD_LDAP_BIND_DN google_pg_auth.auth_cache_ttl_sec = 3600
다음을 바꿉니다.
AD_LDAP_SERVER_HOST
: Active Directory LDAP 서버의 URI입니다(예:ldap://ad-controller.example.com
).AD_LDAP_BASE_DN
: LDAP 검색을 실행하기 위한 기본 고유 이름(DN)입니다(예:DC=example,DC=com
).AD_LDAP_BIND_DN
: AlloyDB Omni가 연결하고 LDAP 검색을 실행하는 데 사용하는 Active Directory 사용자 계정의 고유 이름(DN)입니다(예:setupadmin@ad-example.com
).auth_cache_ttl_sec
는 AlloyDB Omni가 LDAP 서버에 다시 연결을 시도하기 전에 사용자별로 AlloyDB Omni에 의해 데이터가 캐시될 때까지의 경과 시간입니다.auth_cache_ttl_sec
값은 최소 60초에서 최대 86,400초(24시간)까지 다양합니다.
postgresql.conf
의shared_preload_libraries
매개변수에google_pg_auth
를 추가합니다.postgresql.conf
파일에 다음 줄을 추가합니다.shared_preload_libraries='google_pg_auth,google_columnar_engine,google_job_scheduler,google_storage'
데이터베이스를 다시 시작합니다.
docker restart CONTAINER_NAME
LDAPS 인증서를 구성합니다.
LDAPS를 통해 Active Directory 서버에 안전하게 연결하려면 CA 인증서가 필요합니다.
AlloyDB Omni 이미지의 사전 정의된 다음 위치에 LDAPS 인증서 파일을 배치합니다(
/etc/ldap/ldap.crt
).
그룹 매핑 관리
SQL 함수를 사용하여 Active Directory 그룹과 PostgreSQL 역할 간의 매핑을 만들고 관리할 수 있습니다.
클러스터에 로그인하고 확장 프로그램 로드
docker exec -it CONTAINER_NAME psql -h localhost -U postgres postgres=# CREATE EXTENSION google_pg_auth; CREATE EXTENSION
그룹 매핑 만들기
이미 만든 PostgreSQL 그룹 역할에 Active Directory 그룹을 매핑하려면 map_ad_group()
함수를 사용합니다.
SELECT google_pg_auth.map_ad_group(ad_group_name TEXT, ad_group_sid TEXT, pg_role_name TEXT);
예를 들어 ad-developers
Active Directory 그룹을 pg-developers
PostgreSQL 역할에 매핑하려면 다음 명령어를 사용합니다.
SELECT google_pg_auth.map_ad_group('ad-developers', 'S-1-5-21-.....', 'postgres_read_only');
Active Directory에서 특정 그룹의 SID를 가져오려면 Active Directory 서버에서 다음 명령어를 사용합니다.
C:\Users\Admin> Get-ADGroup -Identity ad-developers | select SID SID ----------------------------------------------- S-1-5-21-3168537779-1985441202-1799118680-1612
그룹 매핑 삭제
기존 매핑을 삭제하려면 unmap_ad_group()
함수를 사용합니다. 이 함수는 해당 그룹의 동기화를 중지하지만 사용자가 이미 회원인 경우 PostgreSQL 그룹에서 사용자를 삭제하지는 않습니다.
SELECT google_pg_auth.unmap_ad_group(ad_group_sid TEXT, pg_role_name TEXT);
아래 예시를 참조하세요.
SELECT google_pg_auth.unmap_ad_group('quinn@google.com', 'postgres_read_only');
AlloyDB Omni 데이터베이스에 연결
Active Directory 사용자를 사용하여 AlloyDB Omni 데이터베이스에 로그인합니다. 연결하려는 클라이언트에서 kinit
를 사용 설정해야 합니다.
다음 예시에서 postgres-client
포드에는 kinit
및 psql
이 설치되어 있으며 psql
클라이언트를 사용하여 AlloyDB Omni 클러스터에 연결하도록 구성되어 있습니다.
root@postgres-client:/# kinit AD_USER_NAME Password for user1REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U AD_USER_NAME@REALM -d postgres psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help. user1=#
AlloyDB Omni 데이터베이스의 액세스 권한은 다음을 기반으로 자동으로 결정됩니다.
- Active Directory 그룹의 현재 멤버십입니다.
- 관리자가 이러한 Active Directory 그룹과 PostgreSQL 역할 간에 매핑을 정의합니다.
- 관리자가 해당 PostgreSQL 역할에 부여한 권한입니다.
처음 연결하는 경우 PostgreSQL 사용자 역할(your_ad_user@YOURDOMAIN.COM
)이 자동으로 생성됩니다.
로그인할 때마다 시스템은 현재 Active Directory 그룹 멤버십을 확인하고 이에 맞게 해당 PostgreSQL 역할 멤버십을 업데이트합니다. 이 동기화를 위해 별도의 조치를 취할 필요는 없습니다.
데이터베이스 연결 예시
예를 들어 사용자 Quinn이 ad_developers
라는 Active Directory 그룹에 속한다고 가정해 보겠습니다. 관리자가 ad_developers
를 pg_read_only
라는 postgres 역할에 매핑했습니다. 이 역할에는 sales
라는 테이블에 대한 읽기 액세스 권한이 있습니다. 사용자가 로그인하면 테이블에 액세스할 수 있습니다.
root@postgres-client:/# kinit quinn@REALM Password for quinn@YOUR.REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help. postgres=# select * from sales; // Query will be run successfully
다음 예시에서는 Active Directory의 ad_developers
그룹에서 Quinn이 삭제됩니다.
root@postgres-client:/# kinit quinn@REALM Password for quinn@YOUR.REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help. postgres=# select * from sales; // Query will fail
제한사항
- 수동 그룹 및 권한 관리: 이 기능은 기존 PostgreSQL 그룹의 사용자 멤버십만 자동화합니다. 이러한 그룹을 만들고 권한을 부여하는 작업은 수동 관리 태스크로 유지됩니다.
- 동기화 지연 시간: 멤버십은 사용자가 로그인할 때만 동기화됩니다. Active Directory에서 사용자의 그룹 멤버십이 변경되면 사용자의 다음 로그인 세션에서만 AlloyDB Omni에 반영됩니다.
- 성능: LDAP 조회로 인해 초기 사용자 로그인 프로세스에 약간의 지연 시간이 추가됩니다. 캐싱은 구성된 TTL(수명) 시간(
auth_cache_ttl_sec
) 내에서 후속 로그인에 대한 이 지연 시간을 완화하는 데 도움이 됩니다. - 오류 처리: LDAP 서버에 연결할 수 없거나 동기화 프로세스 중에 다른 오류가 발생하면 AlloyDB Omni가 오류를 기록합니다. 하지만 GSSAPI 인증이 성공했으므로 사용자의 로그인은 계속 성공합니다. 해당 세션의 그룹 멤버십 동기화만 실패합니다.
다음 단계
- Kubernetes에서 Active Directory 그룹 지원 통합
- Active Directory 사용자 지원을 AlloyDB Omni와 통합
- Kubernetes에서 Active Directory 사용자 지원 통합
- AlloyDB Omni의 Active Directory 통합 문제 해결