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;

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

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

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

최소 권한 액세스를 적용하려면 관리자가 아닌 사용자가 CREATE FOREIGN TABLE 문을 실행할 수 없도록 외부 서버에서 USAGE 권한을 제한합니다.

  1. 외부 서버에서 USAGE 제한: 관리자가 아닌 역할에 USAGE 권한이 부여되지 않도록 하고 필요한 경우 PUBLIC에서 USAGE를 취소합니다.

  2. 테이블 생성 중앙 집중화: alloydbsuperuser 역할이 있는 사용자와 같은 데이터베이스 관리자만 외부 테이블을 만들 수 있도록 허용합니다.

  3. 선택적 액세스 권한 부여: 특정 외부 테이블에서 GRANT SELECT를 사용하여 읽기 액세스 권한을 관리합니다.

예시: 최소 권한 액세스 구성

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

  1. 관리자는 외래 서버를 만들고 PUBLIC에서 USAGE 권한을 취소하여 승인되지 않은 테이블 생성을 방지합니다.

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw;
    
    -- Explicitly revoke USAGE from all users to prevent unauthorized table creation
    REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC;
    
  2. 관리자는 일반 사용자의 사용자 매핑을 만듭니다.

    CREATE USER MAPPING FOR bob SERVER bq_server;
    
  3. 관리자로 외래 테이블을 만듭니다.

    -- Because 'bob' does not have USAGE on bq_server, only the administrator can run this.
    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. 관리자는 일반 사용자에게 특정 외부 테이블에 대한 선택적 읽기 액세스 권한을 부여합니다.

    GRANT SELECT ON public.example_table TO bob;