Amazon RDS for PostgreSQL로 PostgreSQL 확장 사용 - Amazon Relational Database Service

Amazon RDS for PostgreSQL로 PostgreSQL 확장 사용

다양한 확장 프로그램 및 모듈을 설치하여 PostgreSQL의 기능을 확장할 수 있습니다. 예를 들어 공간 데이터로 작업하려면 PostGIS 확장을 설치하고 사용할 수 있습니다. 자세한 정보는 PostGIS 확장을 사용하여 공간 데이터 관리을 참조하십시오. 또 다른 예로, 매우 큰 테이블의 데이터 입력을 개선하려는 경우 pg_partman 확장을 사용하여 데이터 분할을 고려할 수 있습니다. 자세한 내용은 pg_partman 확장자를 사용하여 PostgreSQL 파티션 관리하기 섹션을 참조하세요.

경우에 따라 확장을 설치하는 대신 Aurora PostgreSQL DB 클러스터의 사용자 지정 DB 클러스터 파라미터 그룹의 shared_preload_libraries 목록에 특정 모듈을 추가할 수 있습니다. 일반적으로 기본 DB 클러스터 파라미터 그룹은 pg_stat_statements만 로드하지만 목록에 추가할 수 있는 다른 모듈도 몇 개 있습니다. 예를 들어, PostgreSQL pg_cron 확장을 사용하여 유지 관리 예약에 자세히 설명된 대로 pg_cron 모듈을 추가하여 스케줄링 기능을 추가할 수 있습니다. 또 다른 예로, auto_explain 모듈을 로드하여 쿼리 실행 계획을 로깅할 수 있습니다. 자세히 알아보려면 AWS 지식 센터에서 쿼리 실행 계획 로깅에 관한 문서를 참조하세요.

RDS for PostgreSQL 버전에 따라 확장 프로그램을 설치하려면 다음과 같이 rds_superuser 권한이 필요합니다.

  • RDS for PostgreSQL 버전 12 및 이전 버전의 경우 확장 프로그램을 설치하려면 rds_superuser 권한이 필요합니다.

  • RDS for PostgreSQL 버전 13 및 이상 버전의 경우 지정된 데이터베이스 인스턴스에 대한 생성 권한이 있는 사용자(역할)는 신뢰할 수 있는 확장 프로그램을 설치하고 사용할 수 있습니다. 신뢰할 수 있는 확장 프로그램 목록은 PostgreSQL 신뢰할 수 있는 확장 섹션을 참조하세요.

RDS for PostgreSQL DB 인스턴스에 설치할 수 있는 확장 프로그램을 rds.allowed_extensions 파라미터에 나열하여 정확하게 지정할 수도 있습니다. 기본적으로 이 파라미터는 설정되지 않으므로 사용자에게 권한이 있는 경우 지원되는 확장 프로그램을 추가할 수 있습니다. 이 파라미터에 확장 프로그램 목록을 추가하면 RDS for PostgreSQL DB 인스턴스가 사용할 수 있는 확장을 명시적으로 식별할 수 있습니다. 나열되지 않은 확장 프로그램은 설치할 수 없습니다. 이 기능은 다음 버전에서 사용할 수 있습니다.

  • RDS for PostgreSQL 14.1 이상의 모든 버전

  • RDS for PostgreSQL 13.3 이상의 마이너 버전

  • RDS for PostgreSQL 12.7 이상의 마이너 버전

자세한 정보는 PostgreSQL 확장의 설치 제한을 참조하십시오.

rds_superuser 역할에 대한 자세한 내용은 PostgreSQL 역할 및 권한 이해 섹션을 참조하세요.

orafce 확장에서 함수 사용

orafce 확장은 Oracle 데이터베이스에서 함수와 패키지의 하위 집합을 에뮬레이션하는 함수 및 연산자를 제공합니다. orafce 확장을 사용하면 Oracle 애플리케이션을 PostgreSQL로 쉽게 포팅할 수 있습니다. 이 확장은 RDS for PostgreSQL 버전 9.6.6 이상에서 지원됩니다. orafce에 대한 자세한 내용은 GitHub에서 orafce를 참조하세요.

참고

RDS for PostgreSQL은 orafce 확장의 일부분인 utl_file 패키지를 지원하지 않습니다. 이는 utl_file 스키마 함수가 기본 호스트에 대한 수퍼유저 권한을 필요로 하는 운영 체제 텍스트 파일의 읽기 및 쓰기 작업을 제공하기 때문입니다. 관리형 서비스에서 RDS for PostgreSQL은 호스트 액세스를 제공하지 않습니다.

orafce 확장을 사용하려면
  1. DB 인스턴스를 생성할 때 사용한 마스터 사용자 이름으로 DB 인스턴스에 연결합니다.

    동일한 DB 인스턴스의 다른 데이터베이스에 대해 orafce를 활성화하려면 /c dbname psql 명령을 사용합니다. 이 명령을 사용하면 연결을 시작한 후 기본 데이터베이스에서 변경합니다.

  2. CREATE EXTENSION 문을 사용하여 orafce 확장을 활성화합니다.

    CREATE EXTENSION orafce;
  3. ALTER SCHEMA 문을 사용하여 oracle 스키마 소유권을 rds_superuser 역할로 이전합니다.

    ALTER SCHEMA oracle OWNER TO rds_superuser;

    oracle 스키마의 소유자 목록을 보려면 \dn psql 명령을 사용합니다.

pgAudit를 사용하여 데이터베이스 활동 로깅

금융 기관, 정부 기관 및 많은 업계에서는 규제 요구 사항을 충족하기 위해 감사 로그를 보관해야 합니다. RDS for PostgreSQL DB 인스턴스와 함께 PostgreSQL Audit 확장(pgAudit)을 사용하면 감사자가 일반적으로 필요로 하거나 규제 요구 사항을 충족하는 데 필요한 세부 레코드를 캡처할 수 있습니다. 예를 들어 특정 데이터베이스 및 테이블의 변경 내용을 추적하고 변경한 사용자 및 기타 여러 세부 정보를 기록하도록 pgAudit 확장을 설정할 수 있습니다.

pgAudit 확장은 네이티브 PostgreSQL 로깅 인프라의 기능을 기반으로 로그 메시지를 더 자세히 확장한 것입니다. 즉, 다른 로그 메시지를 보는 것과 동일한 접근 방식을 사용하여 감사 로그를 볼 수 있습니다. PostgreSQL 로깅에 대한 자세한 내용은 RDS for PostgreSQL 데이터베이스 로그 파일 섹션을 참조하세요.

pgAudit 확장은 일반 텍스트 암호와 같은 민감한 데이터를 로그에서 삭제합니다. RDS for PostgreSQL DB 인스턴스RDS for PostgreSQL DB 인스턴스에 쿼리 로깅을 활성화합니다.에 설명된 대로 데이터 조작 언어(DML) 문을 로깅하도록 구성된 경우 PostgreSQL Audit 확장을 사용하여 일반 텍스트 암호 문제를 방지할 수 있습니다.

매우 구체적으로 데이터베이스 인스턴스에 대한 감사를 구성할 수 있습니다. 모든 데이터베이스와 모든 사용자를 감사할 수 있습니다. 또는 특정 데이터베이스, 사용자 및 기타 객체만 감사하도록 선택할 수 있습니다. 특정 사용자 및 데이터베이스를 감사에서 명시적으로 제외할 수도 있습니다. 자세한 정보는 감사 로깅에서 사용자 또는 데이터베이스 제외을 참조하십시오.

캡처할 수 있는 세부 정보의 양을 고려하여 pgAudit를 사용하는 경우 스토리지 사용량을 모니터링하는 것이 좋습니다.

pgAudit 확장은 사용 가능한 모든 RDS for PostgreSQL 버전 RDS for PostgreSQL 버전에서 지원되는 pgAudit 버전 목록을 보려면 Aurora PostgreSQL 릴리스 정보의 Amazon RDS for PostgreSQL 확장 버전에 관한 문서를 참조하세요.

pgAudit 확장 설정

RDS for PostgreSQL DB 인스턴스에 pgAudit 확장을 설정하려면 먼저 RDS for PostgreSQL DB 인스턴스용 사용자 지정 DB 파라미터 그룹의 공유 라이브러리에 pgAudit을 추가해야 합니다. 사용자 지정 DB 클러스터 파라미터 그룹을 만드는 방법에 관한 자세한 내용은 파라미터 그룹 작업 섹션을 참조하세요. 다음으로 pgAudit 확장을 설치합니다. 마지막으로, 감사하려는 데이터베이스 및 객체를 지정합니다. 이 섹션에 절차가 설명되어 있습니다. AWS Management Console 또는 AWS CLI를 사용할 수 있습니다.

이 모든 작업을 수행하려면 rds_superuser 역할의 권한이 있어야 합니다.

다음 단계에서는 사용자의 RDS for PostgreSQL DB 인스턴스가 사용자 지정 DB에 연결되어 있다고 가정합니다.

pgAudit 확장 설정 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 RDS for PostgreSQL DB 인스턴스를 선택합니다.

  3. 구성 탭을 엽니다. RDS for PostgreSQL DB 인스턴스 인스턴스 세부 정보 중에서 파라미터 그룹 링크를 찾습니다.

  4. 링크를 선택하여 와 연결된 사용자 지정 파라미터를 엽니다. RDS for PostgreSQL DB 인스턴스

  5. 파라미터 검색 필드에 shared_pre를 입력하여 shared_preload_libraries 파라미터를 찾습니다.

  6. 파라미터 편집을 선택하여 속성 값에 액세스합니다.

  7. 필드의 목록에 pgaudit를 추가합니다. 쉼표를 사용하여 값 목록에서 항목을 구분합니다.

    
                pgAudit가 추가된 shared_preload_libaries 파라미터 이미지.
  8. RDS for PostgreSQL DB 인스턴스를 재부팅하여 shared_preload_libraries 파라미터 변경 사항이 적용되도록 합니다.

  9. 인스턴스를 사용할 수 있게 되면 pgAudit가 초기화되었는지 확인합니다. psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결하고 다음 명령을 실행합니다.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)
  10. pgAudit가 초기화되었으므로 이제 확장을 생성할 수 있습니다. 확장은 라이브러리를 초기화한 후에 생성해야 합니다. pgaudit 확장이 데이터 정의 언어(DDL) 문 감사를 위한 이벤트 트리거를 설치하기 때문입니다.

    CREATE EXTENSION pgaudit;
  11. psql 세션을 닫습니다.

    labdb=> \q
  12. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  13. 목록에서 pgaudit.log 파라미터를 찾아 사용 사례에 적합한 값으로 설정합니다. 예를 들어, 다음 이미지처럼 pgaudit.log 파라미터를 write로 설정하면 로그에 대한 삽입, 업데이트, 삭제 및 기타 유형의 변경 사항이 캡처됩니다.

    
            pgaudit.log 파라미터의 설정 이미지.

    pgaudit.log 파라미터에 다음 값 중 하나를 선택할 수도 있습니다.

    • 없음 - 기본값입니다. 데이터베이스 변경 사항이 로깅되지 않습니다.

    • 모두 - 모든 항목(읽기, 쓰기, 함수, 역할, ddl, 기타)을 로깅합니다.

    • ddl - ROLE 클래스에 포함되지 않은 모든 데이터 정의 언어(DDL) 문을 로깅합니다.

    • 함수 - 함수 호출 및 DO 블록을 로깅합니다.

    • 기타 – 기타 명령(예: DISCARD, FETCH, CHECKPOINT, VACUUM, SET)을 로깅합니다.

    • 읽기 – 원본이 관계(예: 테이블) 또는 쿼리인 경우 SELECTCOPY를 로깅합니다.

    • 역할 - 역할 및 권한과 관련된 문을 로깅합니다(예: GRANT, REVOKE, CREATE ROLE, ALTER ROLE, DROP ROLE).

    • 쓰기 - 대상이 관계(테이블)인 경우 INSERT, UPDATE, DELETE, TRUNCATE, COPY를 로깅합니다.

  14. [Save changes]를 선택합니다.

  15. https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  16. 데이터베이스 목록에서 RDS for PostgreSQL DB 인스턴스를 선택한 다음, 작업 메뉴에서 재부팅을 선택합니다.

pgAudit 설정 방법

AWS CLI를 사용하여 pgAudit를 설정하려면 다음 절차와 같이 modify-db-parameter-group 작업을 호출하여 사용자 지정 파라미터 그룹의 감사 로그 파라미터를 수정합니다.

  1. 다음 AWS CLI 명령을 사용하여 shared_preload_libraries 파라미터에 pgaudit를 추가합니다.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pgaudit,ApplyMethod=pending-reboot" \ --region aws-region
  2. 다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅하여 pgaudit 라이브러리가 초기화되도록 합니다.

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  3. 인스턴스를 사용할 수 있게 되면 pgaudit가 초기화되었는지 확인할 수 있습니다. psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결하고 다음 명령을 실행합니다.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)

    pgAudit가 초기화되었으므로 이제 확장을 생성할 수 있습니다.

    CREATE EXTENSION pgaudit;
  4. AWS CLI를 사용할 수 있도록 psql 세션을 닫습니다.

    labdb=> \q
  5. 다음 AWS CLI 명령을 사용하여 세션 감사 로깅을 통해 로깅할 문의 클래스를 지정합니다. 이 예에서는 pgaudit.log 파라미터를 write로 설정하여 로그에 대한 삽입, 업데이트 및 삭제를 캡처합니다.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=pgaudit.log,ParameterValue=write,ApplyMethod=pending-reboot" \ --region aws-region

    pgaudit.log 파라미터에 다음 값 중 하나를 선택할 수도 있습니다.

    • 없음 - 기본값입니다. 데이터베이스 변경 사항이 로깅되지 않습니다.

    • 모두 - 모든 항목(읽기, 쓰기, 함수, 역할, ddl, 기타)을 로깅합니다.

    • ddl - ROLE 클래스에 포함되지 않은 모든 데이터 정의 언어(DDL) 문을 로깅합니다.

    • 함수 - 함수 호출 및 DO 블록을 로깅합니다.

    • 기타 – 기타 명령(예: DISCARD, FETCH, CHECKPOINT, VACUUM, SET)을 로깅합니다.

    • 읽기 – 원본이 관계(예: 테이블) 또는 쿼리인 경우 SELECTCOPY를 로깅합니다.

    • 역할 - 역할 및 권한과 관련된 문을 로깅합니다(예: GRANT, REVOKE, CREATE ROLE, ALTER ROLE, DROP ROLE).

    • 쓰기 - 대상이 관계(테이블)인 경우 INSERT, UPDATE, DELETE, TRUNCATE, COPY를 로깅합니다.

    다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅합니다.

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region

데이터베이스 객체 감사

RDS for PostgreSQL DB 인스턴스에 pgAudit를 설정하고 요구 사항에 맞게 구성하면 PostgreSQL 로그에 더 자세한 정보가 캡처됩니다. 예를 들어 기본 PostgreSQL 로깅 구성은 데이터베이스 테이블에서 변경 사항이 적용된 날짜 및 시간을 식별하지만 pgAudit 확장을 사용하면 확장 파라미터의 구성에 따라 스키마, 변경한 사용자 및 기타 세부 정보가 로그 항목에 포함될 수 있습니다. 감사를 설정하여 다음 방법으로 변경 사항을 추적할 수 있습니다.

  • 세션마다 사용자별로 추적. 세션 수준에서 정규화된 명령 텍스트를 캡처할 수 있습니다.

  • 객체마다 사용자별, 데이터베이스별로 추적

객체 감사 기능은 시스템에서 rds_pgaudit 역할을 만든 다음, 사용자 지정 파라미터 그룹의 pgaudit.role 파라미터에 이 역할을 추가하면 활성화됩니다. 기본적으로 pgaudit.role 파라미터는 설정되어 있지 않으며 유일하게 허용되는 값은 rds_pgaudit입니다. 다음 단계에서는 pgaudit가 초기화되었고 pgAudit 확장 설정의 절차에 따라 pgaudit 확장을 만든 것으로 가정합니다.


      pgAudit를 설정한 후의 PostgreSQL 로그 파일 이미지.

이 예에서 볼 수 있듯이 LOG: AUDIT: SESSION 행은 테이블 및 해당 스키마를 비롯한 세부 정보를 제공합니다.

객체 감사를 설정하는 방법
  1. psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다.

    psql --host=your-instance-name.aws-region.rds.amazonaws.com --port=5432 --username=postgrespostgres --password --dbname=labdb
  2. 다음 명령을 사용하여 rds_pgaudit라는 데이터베이스 역할을 생성합니다.

    labdb=> CREATE ROLE rds_pgaudit; CREATE ROLE labdb=>
  3. psql 세션을 닫습니다.

    labdb=> \q

    이어질 몇 단계에서는 AWS CLI를 사용하여 사용자 지정 파라미터 그룹에서 감사 로그 파라미터를 수정합니다.

  4. 다음 AWS CLI 명령을 사용하여 rds_pgauditpgaudit.role 파라미터를 추가합니다. 기본적으로 이 파라미터는 설정되어 있지 않으며 유일하게 허용되는 값은 rds_pgaudit입니다.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=pgaudit.role,ParameterValue=rds_pgaudit,ApplyMethod=pending-reboot" \ --region aws-region
  5. 다음 AWS CLI 명령으로 RDS for PostgreSQL DB 인스턴스를 재부팅하여 파라미터 변경 사항이 적용되도록 합니다.

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  6. 다음 명령을 실행하여 pgaudit.rolerds_pgaudit로 설정되었는지 확인합니다.

    SHOW pgaudit.role; pgaudit.role ------------------ rds_pgaudit

pgAudit 로깅을 테스트하기 위해 감사하려는 몇 가지 예제 명령을 실행할 수 있습니다. 예를 들어 다음과 같은 명령을 실행할 수 있습니다.

CREATE TABLE t1 (id int); GRANT SELECT ON t1 TO rds_pgaudit; SELECT * FROM t1; id ---- (0 rows)

데이터베이스 로그에는 다음과 유사한 항목이 포함됩니다.

... 2017-06-12 19:09:49 UTC:...:rds_test@postgres:[11701]:LOG: AUDIT: OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1; ...

로그 확인에 대한 자세한 내용은 Amazon RDS 로그 파일 모니터링 단원을 참조하십시오.

pgAudit 확장 프로그램에 대한 자세한 내용은 GitHub에서 pgAudit을 참조하세요.

감사 로깅에서 사용자 또는 데이터베이스 제외

RDS for PostgreSQL 데이터베이스 로그 파일에서 설명한 대로 PostgreSQL 로그는 스토리지 공간을 사용합니다. pgAudit 확장을 사용하면 추적하는 변경 사항에 따라 로그에 수집된 데이터 양이 다양한 수준으로 늘어납니다. 의 모든 사용자 또는 데이터베이스를 감사할 필요는 없을 수도 있습니다. RDS for PostgreSQL DB 인스턴스

스토리지에 미치는 영향을 최소화하고 불필요하게 감사 레코드를 캡처하지 않도록 사용자 및 데이터베이스를 감사에서 제외할 수 있습니다. 지정된 세션 내에서 로깅을 변경할 수도 있습니다. 다음 예에서는 그 방법을 보여줍니다.

참고

세션 수준의 파라미터 설정은 RDS for PostgreSQL DB 인스턴스에 대한 사용자 지정 DB 파라미터 그룹의 설정보다 우선합니다. 데이터베이스 사용자가 감사 로깅 구성 설정을 우회하지 못하게 하려면 사용자의 권한을 변경해야 합니다.

Aurora PostgreSQL DB 클러스터가 모든 사용자 및 데이터베이스에 대해 동일한 수준의 활동을 감사하도록 구성되어 있다고 가정해 봅시다. 그런데 사용자 myuser를 감사하지 않기로 결정한다면 다음 SQL 명령으로 myuser에 대한 감사를 해제할 수 있습니다.

ALTER USER myuser SET pgaudit.log TO 'NONE';

그런 다음 다음 쿼리를 사용하여 pgaudit.loguser_specific_settings 열에서 파라미터가 NONE으로 설정되었는지 확인할 수 있습니다.

SELECT usename AS user_name, useconfig AS user_specific_settings FROM pg_user WHERE usename = 'myuser';

출력은 다음과 같습니다.

user_name | user_specific_settings -----------+------------------------ myuser | {pgaudit.log=NONE} (1 row)

다음 명령을 사용하여 데이터베이스 세션 중에 특정 사용자에 대한 로깅을 해제할 수 있습니다.

ALTER USER myuser IN DATABASE mydatabase SET pgaudit.log TO 'none';

다음 쿼리를 사용하여 pgaudit.log의 설정 열에서 특정 사용자 및 데이터베이스 조합을 확인할 수 있습니다.

SELECT usename AS "user_name", datname AS "database_name", pg_catalog.array_to_string(setconfig, E'\n') AS "settings" FROM pg_catalog.pg_db_role_setting s LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase LEFT JOIN pg_catalog.pg_user r ON r.usesysid = setrole WHERE usename = 'myuser' AND datname = 'mydatabase' ORDER BY 1, 2;

출력은 다음과 비슷합니다.

user_name | database_name | settings -----------+---------------+------------------ myuser | mydatabase | pgaudit.log=none (1 row)

myuser에 대한 감사를 해제한 후 mydatabase에 대한 변경 내용을 추적하지 않기로 결정한다면 다음 명령을 사용하여 특정 데이터베이스에 대한 감사를 해제합니다.

ALTER DATABASE mydatabase SET pgaudit.log to 'NONE';

그런 다음, 다음 쿼리를 사용하여 database_specific_settings 열에서 pgaudit.log가 NONE으로 설정되어 있는지 확인합니다.

SELECT a.datname AS database_name, b.setconfig AS database_specific_settings FROM pg_database a FULL JOIN pg_db_role_setting b ON a.oid = b.setdatabase WHERE a.datname = 'mydatabase';

출력은 다음과 같습니다.

database_name | database_specific_settings ---------------+---------------------------- mydatabase | {pgaudit.log=NONE} (1 row)

myuser의 설정을 기본 설정으로 되돌리려면 다음 명령을 사용합니다.

ALTER USER myuser RESET pgaudit.log;

데이터베이스의 설정을 기본 설정으로 되돌리려면 다음 명령을 사용합니다.

ALTER DATABASE mydatabase RESET pgaudit.log;

사용자와 데이터베이스를 기본 설정으로 초기화하려면 다음 명령을 사용합니다.

ALTER USER myuser IN DATABASE mydatabase RESET pgaudit.log;

pgaudit.logpgaudit.log 파라미터에 허용되는 다른 값 중 하나로 설정하여 특정 이벤트를 로그에 캡처할 수도 있습니다. 자세한 정보는 pgaudit.log 파라미터에 허용되는 설정 목록을 참조하십시오.

ALTER USER myuser SET pgaudit.log TO 'read'; ALTER DATABASE mydatabase SET pgaudit.log TO 'function'; ALTER USER myuser IN DATABASE mydatabase SET pgaudit.log TO 'read,function'

pgAudit 확장 프로그램에 대한 참조

이 섹션에 나열된 파라미터를 하나 이상 변경하여 감사 로그의 세부 정보 수준을 지정할 수 있습니다.

pgAudit 동작 제어

다음 표에 나열된 파라미터 중 하나 이상을 변경하여 감사 로깅을 제어할 수 있습니다.

파라미터 설명

pgaudit.log

세션 감사 로깅으로 로깅될 문의 클래스를 지정합니다. 허용되는 값에는 ddl, 함수, 기타, 읽기, 역할, 쓰기, 없음, 모두 등이 포함됩니다. 자세한 정보는 pgaudit.log 파라미터에 허용되는 설정 목록을 참조하십시오.

pgaudit.log_catalog

활성화(1로 설정)하면 문의 모든 관계가 pg_catalog에 있는 경우 감사 추적에 문을 추가합니다.

pgaudit.log_level

로그 항목에 사용할 로그 수준을 지정합니다. 허용되는 값은 ebug5, debug4, debug3, debug2, debug1, 정보, 알림, 경고, 로그입니다.

pgaudit.log_parameter

활성화(1로 설정)하면 문과 함께 전달된 파라미터가 감사 로그에 캡처됩니다.

pgaudit.log_relation

활성화(1로 설정)하면 세션의 감사 로그에서 SELECT 또는 DML 문에서 참조되는 각 관계(TABLE, VIEW 등) 에 대해 별도의 로그 항목을 생성합니다.

pgaudit.log_statement_once

로깅에 문/하위 문 조합에 대한 첫 번째 로그 항목이 있는 문 텍스트 및 파라미터를 포함할지 아니면 모든 항목이 있는 문 텍스트 및 파라미터를 포함할지를 지정합니다.

pgaudit.role

객체 감사 로깅에 사용할 마스터 역할을 지정합니다. 유일하게 허용되는 항목은 rds_pgaudit입니다.

pgaudit.log 파라미터에 허용되는 설정 목록

설명

none

이 값이 기본값입니다. 데이터베이스 변경 사항이 로깅되지 않습니다.

all

모든 항목(읽기, 쓰기, 함수, 역할, ddl, 기타)을 로깅합니다.

ddl

ROLE 클래스에 포함되지 않은 모든 데이터 정의 언어(DDL) 문을 로깅합니다.

함수

함수 호출 및 DO 블록을 로깅합니다.

기타

기타 명령을 로깅합니다(예: DISCARD, FETCH, CHECKPOINT, VACUUM, SET).

read

원본이 관계(예: 테이블) 또는 쿼리인 경우 SELECTCOPY를 로깅합니다.

역할

역할 및 권한과 관련된 문을 로깅합니다(예: GRANT, REVOKE, CREATE ROLE, ALTER ROLE, DROP ROLE).

write

대상이 관계(테이블)인 경우 INSERT, UPDATE, DELETE, TRUNCATE, COPY를 로깅합니다.

세션 감사를 사용하여 여러 이벤트 유형을 기록하려면 쉼표로 구분된 목록을 사용합니다. 모든 이벤트 유형을 기록하려면 pgaudit.logALL로 설정합니다. DB 인스턴스를 재부팅하여 변경 사항을 적용합니다.

객체 감사를 사용하면 특정 관계를 사용하도록 감사 로깅을 구체화할 수 있습니다. 예를 들어 하나 이상의 테이블에서 READ 작업에 대한 감사 로깅을 지정할 수 있습니다.

pg_repack 확장을 사용하여 테이블 및 인덱스에서 부풀림을 줄입니다.

pg_repack 확장을 사용하여 테이블과 인덱스에서 부풀림을 제거할 수 있습니다. 이 확장은 RDS for PostgreSQL 버전 9.6.3 이상에서 지원됩니다. pg_repack 확장에 대한 자세한 내용은 GitHub 프로젝트 설명서를 참조하세요.

pg_repack 확장을 사용하려면
  1. 다음 명령을 실행하여 RDS for PostgreSQL 인스턴스에 pg_repack 확장을 설치합니다.

    CREATE EXTENSION pg_repack;
  2. 다음 명령을 실행하여 pg_repack에서 생성한 임시 로그 테이블을 다시 패키징할 수 있는 쓰기 권한을 부여합니다.

    ALTER DEFAULT PRIVILEGES IN SCHEMA repack GRANT INSERT ON TABLES TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA repack GRANT USAGE, SELECT ON SEQUENCES TO PUBLIC;
  3. pg_repack 클라이언트 유틸리티를 사용하여 데이터베이스에 연결합니다. rds_superuser 권한이 있는 계정을 사용합니다. 예를 들어 rds_test 역할이 rds_superuser 권한을 가지고 있다고 가정하겠습니다. 다음 명령 구문이 나와 있습니다.

    pg_repack -h db-instance-name.111122223333.aws-region.rds.amazonaws.com -U rds_test -k postgres

    -k 옵션을 사용하여 연결합니다. -a 옵션은 지원되지 않습니다.

  4. pg_repack 클라이언트의 응답은 다시 구성된 DB 인스턴스 상의 테이블에 대한 정보를 제공합니다.

    INFO: repacking table "pgbench_tellers" INFO: repacking table "pgbench_accounts" INFO: repacking table "pgbench_branches"

PLV8 확장 업그레이드 및 사용

PLV8은 PostgreSQL을 위한 신뢰할 수 있는 Javascript 언어 확장입니다. 저장 프로시저, 트리거 및 SQL에서 호출할 수 있는 기타 절차 코드에 사용할 수 있습니다. 이 언어 확장은 모든 최신 PostgreSQL 릴리스에서 지원됩니다.

PLV8을 사용하고 PostgreSQL을 새 PLV8 버전으로 업그레이드하는 경우 즉시 새로운 확장을 사용하세요. 다음 단계를 수행하여 카탈로그 메타데이터를 새 PLV8 버전과 동기화합니다. 이 단계는 선택 사항이지만 메타데이터 불일치 경고를 방지하려면 완료하는 것이 좋습니다.

업그레이드 프로세스는 기존 PLV8 기능을 모두 삭제합니다. 따라서 업그레이드하기 전에 RDS for PostgreSQL DB 인스턴스의 스냅샷을 생성하는 것이 좋습니다. 자세한 정보는 DB 스냅샷 생성을 참조하십시오.

새 PLV8 버전과 카탈로그 메타데이터 동기화
  1. 업데이트해야 하는 것을 확인합니다. 이렇게 하려면 인스턴스에 연결된 동안 다음 명령을 실행합니다.

    SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');

    결과에 기본 버전보다 낮은 설치 버전에 대한 값이 포함된 경우 이 절차를 계속 진행하여 확장을 업데이트합니다. 예를 들어, 다음 결과 집합은 업데이트해야 함을 나타냅니다.

    name | default_version | installed_version | comment --------+-----------------+-------------------+-------------------------------------------------- plls | 2.1.0 | 1.5.3 | PL/LiveScript (v8) trusted procedural language plcoffee| 2.1.0 | 1.5.3 | PL/CoffeeScript (v8) trusted procedural language plv8 | 2.1.0 | 1.5.3 | PL/JavaScript (v8) trusted procedural language (3 rows)
  2. RDS for PostgreSQL DB 인스턴스의 스냅샷을 생성합니다. 이미 해당 스냅샷을 생성한 경우 이 단계를 건너뜁니다. 스냅샷이 생성되는 동안 다음 단계를 따라 계속 진행할 수 있습니다.

  3. DB 인스턴스에 있는 PLV8 함수의 개수를 파악해야 업그레이드 이후 모두 존재하는지 확인할 수 있습니다. 예를 들어 다음 SQL 쿼리는 plv8, plcoffee 및 plls로 작성된 함수의 수를 반환합니다.

    SELECT proname, nspname, lanname FROM pg_proc p, pg_language l, pg_namespace n WHERE p.prolang = l.oid AND n.oid = p.pronamespace AND lanname IN ('plv8','plcoffee','plls');
  4. pg_dump를 사용하여 스키마 전용 덤프 파일을 생성합니다. 예를 들어, 클라이언트 시스템의 /tmp 디렉터리에 파일을 생성합니다.

    ./pg_dump -Fc --schema-only -U master postgres >/tmp/test.dmp

    이 예에서는 다음 옵션을 사용합니다.

    • -Fc - 사용자 지정 형식

    • --schema-only - 스키마(이 경우에서는 함수)를 생성하는 데 필요한 명령만 덤프

    • -U – RDS 기본 사용자 이름

    • database – DB 인스턴스의 데이터베이스 이름

    pg_dump에 대한 자세한 내용은 PostgreSQL 설명서의 pg_dump를 참조하세요.

  5. 덤프 파일에 있는 'CREATE FUNCTION' DDL 문을 추출하십시오. 다음 예에서는 grep 명령을 사용하여 함수를 생성하는 DDL 문을 추출하여 파일에 저장합니다. 후속 단계에서 이를 사용하여 함수를 다시 생성합니다.

    ./pg_restore -l /tmp/test.dmp | grep FUNCTION > /tmp/function_list/

    pg_restore에 대한 자세한 내용은 PostgreSQL 설명서의 pg_restore를 참조하세요.

  6. 함수 및 확장 기능을 중단합니다. 다음 예는 모든 PLV8 기반 객체를 중단합니다. 캐스케이드 옵션은 모든 종속이 중단되도록 합니다.

    DROP EXTENSION pvl8 CASCADE;

    PostgreSQL 인스턴스에 plcoffee 또는 plls 기반 객체가 포함된 경우 이러한 확장 기능에 대해 이 단계를 반복합니다.

  7. 확장 기능을 생성합니다. 다음 예에서는 plv8, plcoffee 및 plls 확장을 생성합니다.

    CREATE EXTENSION plv8; CREATE EXTENSION plcoffee; CREATE EXTENSION plls;
  8. 덤프 파일과 "드라이버" 파일을 사용하여 함수를 생성합니다.

    다음 예에서는 이전에 추출한 함수를 다시 생성합니다.

    ./pg_restore -U master -d postgres -Fc -L /tmp/function_list /tmp/test.dmp
  9. 다음 쿼리를 사용하여 모든 함수가 다시 생성되었는지 확인합니다.

    SELECT * FROM pg_available_extensions WHERE name IN ('plv8','plls','plcoffee');

    PLV8 버전 2는 결과 세트에 다음 추가 행을 추가합니다.

    proname | nspname | lanname ---------------+------------+---------- plv8_version | pg_catalog | plv8