PostgreSQL용 AlloyDB 리소스 보안 권장사항

PostgreSQL용 AlloyDB 리소스의 강력한 보안 상황을 달성하려면 이 페이지에 제공된 권장사항을 따르세요.

검색 경로 하이재킹 방지

검색 경로 하이재킹을 방지하려면 권한이 높은 사용자에게 search_path 매개변수가 pg_catalog로 설정되어 있는지 확인하세요. 이렇게 하면 검색 경로가 보호되고 public과 같은 신뢰할 수 없는 스키마가 우회됩니다.

사용자에 대해 이 매개변수를 영구적으로 설정하려면 다음 명령어를 실행합니다.

ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;

현재 세션에만 이 매개변수를 설정하려면 다음 명령어를 실행합니다.

SET search_path TO pg_catalog,pg_temp;

데이터베이스에 연결할 때 모든 사용자에 대해 이 매개변수를 설정하려면 다음 명령어를 실행합니다.

ALTER DATABASE DB_NAME SET search_path TO schema1, schema2, public;

자세한 내용은 보안 스키마 사용에 관한 PostgreSQL 문서CVE-2018-1058 가이드를 참조하세요.

외부 데이터 래퍼를 사용하여 BigQuery 데이터 액세스 보호

BigQuery 외부 데이터 래퍼 (FDW)를 사용하면 AlloyDB에서 BigQuery로의 모든 쿼리가 AlloyDB 클러스터의 서비스 계정을 사용하여 인증됩니다. 이 서비스 계정은 민감한 BigQuery 데이터 세트에 액세스할 수 있으므로 일반 데이터베이스 사용자가 승인되지 않은 테이블을 매핑하지 못하도록 하는 것이 중요합니다.

최소 권한 액세스를 적용하려면 관리자가 외부 서버의 USAGE 권한을 제한해야 합니다. 이렇게 하면 관리자가 아닌 사용자가 CREATE FOREIGN TABLE 문을 실행하지 못하도록 물리적으로 방지할 수 있습니다.

  1. 관리자가 아닌 역할에 외부 서버에 대한 USAGE 권한이 없는지 확인하여 외부 서버의 USAGE를 제한합니다. 필요한 경우 PUBLIC에서 이를 취소합니다.
  2. 테이블 생성 중앙 집중화: 데이터베이스 관리자(예: alloydbsuperuser 역할이 있는 사용자)만 외부 테이블을 만들 수 있습니다.
  3. 선택적 액세스 권한 부여: 관리자는 특정 외부 테이블에서 GRANT SELECT를 사용하여 읽기 액세스를 관리합니다.

예: 최소 권한 액세스 구성

다음 워크플로는 관리자가 임의의 데이터 세트를 매핑할 수 있도록 허용하지 않고 일반 사용자 (bob)에게 특정 BigQuery 테이블에 대한 액세스 권한을 안전하게 부여하는 방법을 보여줍니다.

-- 1단계: 서버를 만들고 액세스를 제한합니다 (관리자로 실행). ```sql CREATE EXTENSION IF NOT EXISTS bigquery_fdw; CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw;

-- 승인되지 않은 테이블 생성을 방지하기 위해 모든 사용자에게서 USAGE를 명시적으로 취소합니다. REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC; ```

-- 2단계: 일반 사용자의 사용자 매핑을 만듭니다 (관리자로 실행). sql CREATE USER MAPPING FOR bob SERVER bq_server;

-- 3단계: 외부 테이블을 만듭니다 (관리자로 실행). -- 'bob'에게 bq_server에 대한 USAGE가 없으므로 관리자만 이 작업을 실행할 수 있습니다. sql CREATE FOREIGN TABLE example_table ( id INT, state VARCHAR ) SERVER bq_server OPTIONS ( project 'BIGQUERY_PROJECT_ID', dataset 'BIGQUERY_DATASET_NAME', table 'example_table' );

-- 4단계: 선택적 읽기 액세스 권한을 부여합니다 (관리자로 실행). -- 이 특정 테이블에 대한 읽기 액세스 권한을 일반 사용자에게 명시적으로 부여합니다. sql GRANT SELECT ON public.example_table TO bob;