자세한 내용은 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_TAGgoogle_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 google_pg_auth.allow_unmapped_ad_users: ALLOW_UNMAPPED_AD_USERS
다음을 바꿉니다.
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시간)까지 다양합니다.ALLOW_UNMAPPED_AD_USERS: (선택사항)true로 설정하면 매핑된 Active Directory 그룹의 구성원이 아닌 사용자도 로그인할 수 있습니다. 기본값은false입니다.
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 인증이 성공했으므로 사용자의 로그인은 계속 성공합니다. 해당 세션의 그룹 멤버십 동기화만 실패합니다.