PostgreSQL 역할 및 권한 이해 - Amazon Relational Database Service

PostgreSQL 역할 및 권한 이해

AWS Management Console을 사용하여 RDS for PostgreSQL DB 인스턴스를 만들면 관리자 계정이 동시에 생성됩니다. 기본적으로 해당 이름은 다음 스크린샷에 나와 있는 것처럼 postgres입니다.


        데이터베이스 생성(Create database) 페이지의 보안 인증에 대한 기본 로그인 ID는 postgres입니다.

기본값(postgres)을 그대로 사용하지 않고 다른 이름을 선택할 수 있습니다. 이 경우 선택한 이름은 문자로 시작해야 하며 영숫자 1~16자 사이어야 합니다. 단순하게 하기 위해 이 안내서 전체에서 기본 사용자 계정을 기본값(postgres)으로 참조합니다.

AWS Management Console 대신 create-db-instance AWS CLI를 사용하는 경우 명령에서 master-username 파라미터로 이름을 전달하여 이름을 생성합니다. 자세한 내용은 Amazon RDS DB 인스턴스 생성 섹션을 참조하세요.

AWS Management Console, AWS CLI 또는 Amazon RDS API를 사용하든, 기본 postgres 이름을 사용하든, 다른 이름을 선택하든 관계없이 첫 번째 데이터베이스 사용자 계정은 rds_superuser 그룹의 멤버이며 rds_superuser 권한을 가집니다.

rds_superuser 역할 이해

PostgreSQL에서는 역할로 데이터베이스의 다양한 객체에 대해 그룹 또는 사용자에게 부여된 사용자, 그룹 또는 특정 권한 집합을 정의할 수 있습니다. CREATE USERCREATE GROUP에 대한 PostgreSQL 명령은 데이터베이스 사용자를 구분하기 위한 특정 속성을 가진 보다 일반적인 CREATE ROLE로 대체되었습니다. 데이터베이스 사용자는 LOGIN 권한을 가진 역할로 간주할 수 있습니다.

참고

CREATE USERCREATE GROUP 명령을 계속 사용할 수 있습니다. 자세한 내용은 PostgreSQL 설명서에서 데이터베이스 역할을 참조하세요.

postgres 사용자는 RDS for PostgreSQL DB 인스턴스에서 가장 높은 권한을 지닌 데이터베이스 사용자입니다. 이는 다음 CREATE ROLE 문으로 정의되는 특성을 가지고 있습니다.

CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity'

속성 NOSUPERUSER, NOREPLICATION, INHERITVALID UNTIL 'infinity'는 별도로 지정하지 않는 한 CREATE ROLE의 기본 옵션입니다.

기본적으로 postgres에는 rds_superuser 역할에 부여된 권한과 역할 및 데이터베이스를 생성할 수 있는 권한이 있습니다. rds_superuser 역할이 있으면 postgres 사용자는 다음과 같은 작업을 할 수 있습니다.

  • Amazon RDS에서 사용할 수 있는 확장 기능을 추가합니다. 자세한 내용은 Amazon RDS for PostgreSQL에서 지원되는 PostgreSQL 기능 작업

  • 사용자에 대한 역할을 생성하고 사용자에게 권한을 부여합니다. 자세한 내용은 PostgreSQL 설명서에서 CREATE ROLEGRANT를 참조하세요.

  • 데이터베이스를 생성합니다. 자세한 내용은 PostgreSQL 설명서에서 CREATE DATABASE를 참조하세요.

  • 이러한 권한이 없는 사용자 역할에 rds_superuser 권한을 부여하고 필요에 따라 권한을 회수합니다. 이 역할은 수퍼유저 태스크를 수행하는 사용자에게만 부여하는 것이 좋습니다. 즉, 데이터베이스 관리자(DBA) 또는 시스템 관리자에게 이 역할을 부여할 수 있습니다.

  • rds_superuser 역할이 없는 데이터베이스 사용자에게 rds_replication 역할을 부여(회수)합니다.

  • rds_superuser 역할이 없는 데이터베이스 사용자에게 rds_password 역할을 부여(회수)합니다.

  • pg_stat_activity 보기를 사용하여 모든 데이터베이스 연결에 대한 상태 정보를 가져옵니다. 필요한 경우 rds_superuserpg_terminate_backend 또는 pg_cancel_backend를 사용하여 연결을 중지할 수 있습니다.

CREATE ROLE postgres... 문에서 postgres 사용자 역할이 특히 PostgreSQL superuser 권한을 허용하지 않음을 알 수 있습니다. RDS for PostgreSQL은 관리형 서비스이므로 호스트 OS에 액세스할 수 없으며, PostgreSQL superuser 계정을 사용하여 연결할 수 없습니다. 독립 실행형 PostgreSQL에 대한 superuser 액세스 권한이 필요한 대부분의 태스크는 Amazon RDS에서 자동으로 관리됩니다.

권한 부여에 대한 자세한 내용은 PostgreSQL 설명서에서 GRANT를 참조하세요.

rds_superuser 역할은 에서 미리 정의된 여러 역할 중 하나입니다. RDS for PostgreSQL DB 인스턴스

참고

PostgreSQL 13 및 이전 릴리스에서는 미리 정의된 역할을 기본 역할이라고 합니다.

다음 목록에서 새로운 에 대해 자동으로 생성되는 미리 정의된 다른 역할 중 일부를 확인할 수 있습니다. RDS for PostgreSQL DB 인스턴스 미리 정의된 역할 및 권한은 변경할 수 없습니다. 미리 정의된 역할에 대한 권한은 삭제하거나 이름을 바꾸거나 수정할 수 없습니다. 이를 시도할 시에는 오류가 발생합니다.

  • rds_password - 데이터베이스 사용자를 대상으로 암호를 변경하고 암호 제약 조건을 설정할 수 있는 역할입니다. rds_superuser 역할에는 기본적으로 이 역할이 부여되며, 이 역할을 통해 데이터베이스 사용자에게 역할을 부여할 수 있습니다. 자세한 내용은 PostgreSQL 데이터베이스에 대한 사용자 액세스 제어 단원을 참조하십시오.

    • 14 이전의 RDS for PostgreSQL 버전에서 rds_password 역할은 암호를 변경하고 데이터베이스 사용자와 rds_superuser 역할이 있는 사용자에 대해 암호 제한을 설정할 수 있습니다. 14 이후의 RDS for PostgreSQL 버전에서 rds_password 역할은 데이터베이스 사용자에 대해서만 암호를 변경하고 암호 제약 조건을 설정할 수 있습니다. rds_superuser 역할이 있는 사용자만 rds_superuser 역할을 가진 다른 사용자에게 이러한 작업을 수행할 수 있습니다.

  • rdsadmin - superuser 권한이 있는 관리자가 독립 실행형 PostgreSQL 데이터베이스에서 수행할 수 있는 많은 관리 태스크를 처리하기 위해 생성된 역할입니다. 이 역할은 RDS for PostgreSQL에서 다양한 관리 태스크에 내부적으로 사용됩니다.

  • rdstopmgr - 다중 AZ 배포를 지원하기 위해 Amazon RDS에서 내부적으로 사용하는 역할입니다.

미리 정의된 모든 역할을 보려면 RDS for PostgreSQL DB 인스턴스의 프라이머리 인스턴스에 연결하여 psql \du 메타 명령을 사용하면 됩니다. 출력값은 다음과 같습니다.

List of roles Role name | Attributes | Member of --------------+-----------------------------------+------------------------------------ postgres | Create role, Create DB +| {rds_superuser} | Password valid until infinity | rds_superuser | Cannot login | {pg_monitor,pg_signal_backend, | +| rds_replication,rds_password} ...

출력에서 rds_superuser는 데이터베이스 사용자 역할은 아니지만(로그인할 수 없음), 다른 많은 역할의 권한을 가집니다. 데이터베이스 사용자 postgresrds_superuser 역할의 멤버임을 알 수도 있습니다. 앞서 언급한 바와 같이 postgres는 Amazon RDS 콘솔 데이터베이스 생성(Create database) 페이지의 기본값입니다. 다른 이름을 선택한 경우 해당 이름이 대신 역할 목록에 표시됩니다.

PostgreSQL 데이터베이스에 대한 사용자 액세스 제어

PostgreSQL의 새 데이터베이스는 항상 모든 데이터베이스 사용자와 역할이 객체를 만들 수 있도록 허용하는 데이터베이스 public 스키마의 기본 권한 집합으로 생성됩니다. 이러한 권한을 통해 데이터베이스 사용자는 데이터베이스에 연결하고, 가령 연결된 동안 임시 테이블을 만들 수 있습니다.

RDS for PostgreSQL DB 인스턴스 에 생성한 데이터베이스 인스턴스에 액세스할 수 있는 사용자 권한을 보다 효과적으로 제어하려면 이러한 기본 public 권한을 회수하는 것이 좋습니다. 이렇게 하고 나서 다음 절차에 표시된 것처럼 데이터베이스 사용자에게 보다 세분화된 구체적인 권한을 부여하면 됩니다.

새 데이터베이스 인스턴스에 대한 역할 및 권한을 설정하는 방법

새로 생성한 RDS for PostgreSQL DB 인스턴스에 데이터베이스를 설정하여 여러 연구자가 사용할 수 있도록 하고, 이들 모두 데이터베이스에 대한 읽기-쓰기 액세스 권한이 필요하다고 가정합니다.

  1. 다음과 같이 psql 또는 pgAdmin을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다.

    psql --host=your-db-instance.666666666666.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

    메시지가 표시되면 암호를 입력합니다. psql 클라이언트는 기본 관리 연결 데이터베이스인 postgres=>를 연결하고 프롬프트로 표시합니다.

  2. 데이터베이스 사용자가 public 스키마에서 객체를 생성하지 못하도록 하려면 다음을 수행합니다.

    postgres=> REVOKE CREATE ON SCHEMA public FROM PUBLIC; REVOKE
  3. 다음으로 새 데이터베이스 인스턴스를 생성합니다.

    postgres=> CREATE DATABASE lab_db; CREATE DATABASE
  4. 새 데이터베이스의 PUBLIC 스키마에서 모든 권한을 회수합니다.

    postgres=> REVOKE ALL ON DATABASE lab_db FROM public; REVOKE
  5. 데이터베이스 사용자를 위한 역할을 생성합니다.

    postgres=> CREATE ROLE lab_tech; CREATE ROLE
  6. 이 역할이 있는 데이터베이스 사용자에게 데이터베이스 연결 기능을 제공합니다.

    postgres=> GRANT CONNECT ON DATABASE lab_db TO lab_tech; GRANT
  7. lab_tech 역할이 있는 모든 사용자에게 이 데이터베이스에 대한 모든 권한을 부여합니다.

    postgres=> GRANT ALL PRIVILEGES ON DATABASE lab_db TO lab_tech; GRANT
  8. 다음과 같이 데이터베이스 사용자를 생성합니다.

    postgres=> CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me'; CREATE ROLE postgres=> CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me'; CREATE ROLE
  9. 다음과 같이 두 사용자에게 lab_tech 역할과 관련된 권한을 부여합니다.

    postgres=> GRANT lab_tech TO lab_user1; GRANT ROLE postgres=> GRANT lab_tech TO lab_user2; GRANT ROLE

이 시점에서 lab_user1lab_user2lab_db 데이터베이스에 연결할 수 있습니다. 이 예제에서는 여러 데이터베이스 인스턴스와 다양한 스키마 생성, 제한된 권한 부여를 포함할 수 있는 엔터프라이즈 사용에 대한 모범 사례를 따르지 않습니다. 전체 정보 및 추가 시나리오를 알아보려면 PostgreSQL 사용자 및 역할 관리를 참조하세요.

PostgreSQL 데이터베이스의 권한에 대한 자세한 내용은 PostgreSQL 설명서에서 GRANT 명령을 참조하세요.

사용자 암호 관리 위임 및 제어

DBA로서 사용자 암호 관리를 위임할 수 있습니다. 또는 데이터베이스 사용자가 암호를 변경하거나 암호 사용 주기와 같은 암호 제약 조건을 재구성하지 못하도록 할 수 있습니다. 선택한 데이터베이스 사용자만 암호 설정을 변경할 수 있도록 하려면 제한된 암호 관리 기능을 켜면 됩니다. 이 기능을 활성화하면 rds_password 역할이 부여된 데이터베이스 사용자만 암호를 관리할 수 있습니다.

참고

제한된 암호 관리를 사용하려면 RDS for PostgreSQL DB 인스턴스가 PostgreSQL 10.6 이상을 실행해야 합니다.

기본적으로 이 기능은 다음과 같이 off입니다.

postgres=> SHOW rds.restrict_password_commands; rds.restrict_password_commands -------------------------------- off (1 row)

이 기능을 켜려면 사용자 정의 파라미터 그룹을 사용하고 rds.restrict_password_commands에 대한 설정을 1로 변경합니다. RDS for PostgreSQL DB 인스턴스를 재부팅해야 설정이 적용됩니다.

이 기능을 활성화하면 다음 SQL 명령에 대한 rds_password 권한이 필요합니다.

CREATE ROLE myrole WITH PASSWORD 'mypassword'; CREATE ROLE myrole WITH PASSWORD 'mypassword' VALID UNTIL '2023-01-01'; ALTER ROLE myrole WITH PASSWORD 'mypassword' VALID UNTIL '2023-01-01'; ALTER ROLE myrole WITH PASSWORD 'mypassword'; ALTER ROLE myrole VALID UNTIL '2023-01-01'; ALTER ROLE myrole RENAME TO myrole2;

암호에서 MD5 해시 알고리즘을 사용하는 경우에도 역할 이름 변경(ALTER ROLE myrole RENAME TO newname)이 제한됩니다.

이 기능이 활성화된 상태에서 rds_password 역할 권한 없이 이러한 SQL 명령을 시도하면 다음 오류가 발생합니다.

ERROR: must be a member of rds_password to alter passwords

암호 관리에만 사용하는 몇 가지 역할에만 rds_password 권한을 부여하는 것이 좋습니다. rds_superuser 권한이 없는 데이터베이스 사용자에게 rds_password 권한을 부여할 경우 CREATEROLE 속성도 부여해야 합니다.

만료 및 클라이언트 측에 필요한 복잡성 등의 암호 요구 사항을 확인해야 합니다. 암호 관련 변경 사항에 대해 자체 클라이언트 측 유틸리티를 사용하는 경우 유틸리티가 rds_password의 멤버여야 하며 CREATE ROLE 권한을 가져야 합니다.

SCRAM for PostgreSQL 암호 암호화 사용

Salted Challenge Response Authentication Mechanism(SCRAM)은 암호를 암호화하는 데 사용하는 PostgreSQL의 기본 메시지 다이제스트(MD5) 알고리즘을 대체합니다. SCRAM 인증 메커니즘은 MD5보다 더 안전한 것으로 간주됩니다. 이러한 2가지 암호 보호 방법에 대한 자세한 내용은 PostgreSQL 설명서의 암호 인증을 참조하세요.

MD5가 아닌 SCRAM을 의 암호 암호화 체계로 사용하는 것이 좋습니다. RDS for PostgreSQL DB 인스턴스 이는 암호 인증 및 암호화에 scram-sha-256 알고리즘을 사용하는 암호화 챌린지-응답 메커니즘입니다.

SCRAM을 지원하려면 클라이언트 애플리케이션의 라이브러리를 업데이트해야 할 수 있습니다. 예를 들어, 42.2.0 이전의 JDBC 버전은 SCRAM을 지원하지 않습니다. 자세한 내용은 PostgreSQL JDBC 드라이버 설명서의 PostgreSQL JDBC 드라이버를 참조하세요. 기타 PostgreSQL 드라이버 및 SCRAM 지원 목록은 PostgreSQL 설명서의 드라이버 목록을 참조하세요.

참고

RDS for PostgreSQL 버전 13.1 이상은 scram-sha-256을 지원합니다. 또한 다음 절차에 설명된 대로 이러한 버전을 사용하여 DB 인스턴스를 SCRAM이 필요하도록 구성할 수 있습니다.

SCRAM이 필요하도록 RDS for PostgreSQL DB 인스턴스 설정

RDS for PostgreSQL DB 인스턴스가 scram-sha-256 알고리즘을 사용하는 암호만 수락하도록 요구할 수 있습니다.

중요

PostgreSQL 데이터베이스를 사용하는 기존 RDS 프록시의 경우, SCRAM만 사용하도록 데이터베이스 인증을 수정하면 최대 60초 동안 프록시를 사용할 수 없게 됩니다. 문제를 방지하려면 다음 중 하나를 수행합니다.

  • 데이터베이스에서 SCRAMMD5 인증이 모두 허용되는지 확인합니다.

  • SCRAM 인증만 사용하려면 새 프록시를 생성하고, 애플리케이션 트래픽을 새 프록시로 마이그레이션한 다음 이전에 데이터베이스와 연결된 프록시를 삭제합니다.

시스템을 변경하기 전에 다음과 같이 전체 프로세스를 이해해야 합니다.

  • 모든 데이터베이스 사용자에 대한 전체 역할 및 암호 암호화에 대한 정보를 가져옵니다.

  • 암호 암호화를 제어하는 파라미터에 대해 RDS for PostgreSQL DB 인스턴스의 파라미터 설정을 다시 확인합니다.

  • RDS for PostgreSQL DB 인스턴스에서 기본 파라미터 그룹을 사용한다면 필요한 경우 파라미터를 수정할 수 있도록 사용자 지정 DB 파라미터 그룹을 생성하고, 이를 RDS for PostgreSQL DB 인스턴스에 적용해야 합니다. RDS for PostgreSQL DB 인스턴스에서 사용자 지정 파라미터 그룹을 사용하는 경우 필요에 따라 과정 후반부에서 필요한 파라미터를 수정할 수 있습니다.

  • password_encryption 파라미터를 scram-sha-256으로 변경합니다.

  • 모든 데이터베이스 사용자에게 암호를 업데이트해야 함을 알립니다. postgres 계정에도 동일한 작업을 수행합니다. 새 암호는 scram-sha-256 알고리즘을 통해 암호화되어 저장됩니다.

  • 모든 암호가 암호화 유형으로 암호화되었는지 확인합니다.

  • 모든 암호가 scram-sha-256을 사용하는 경우 rds.accepted_password_auth_method 파라미터를 md5+scram에서 scram-sha-256으로 변경할 수 있습니다.

주의

rds.accepted_password_auth_method를 scram-sha-256으로만 변경하면 md5로 암호화된 암호가 있는 사용자(역할)는 연결할 수 없습니다.

RDS for PostgreSQL DB 인스턴스에서 SCRAM을 사용하도록 준비

RDS for PostgreSQL DB 인스턴스를 변경하기에 모든 기존 데이터베이스 사용자 계정을 확인해야 합니다. 또한 암호에 사용되는 암호화 유형도 확인하세요. rds_tools 확장을 사용하여 이러한 작업을 수행할 수 있습니다. 이 확장은 RDS for PostgreSQL 13.1 릴리스 이상에서 지원됩니다.

데이터베이스 사용자(역할) 및 암호 암호화 방법 목록을 가져오려면
  1. 다음과 같이 psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다.

    psql --host=db-name.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. rds_tools 확장을 설치합니다.

    postgres=> CREATE EXTENSION rds_tools; CREATE EXTENSION
  3. 역할 및 암호화 목록을 가져옵니다.

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type();

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

    rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)

사용자 지정 DB 파라미터 그룹 생성

참고

RDS for PostgreSQL DB 인스턴스에서 이미 사용자 지정 파라미터 그룹을 사용하는 경우 새로 만들 필요가 없습니다.

Amazon RDS 파라미터 그룹에 대한 개요는 RDS for PostgreSQL DB 인스턴스에 파라미터로 작업 섹션을 참조하세요.

암호에 사용되는 암호 암호화 유형은 하나의 파라미터 password_encryption으로 설정됩니다. RDS for PostgreSQL DB 인스턴스에서 허용하는 암호화는 다른 파라미터인 rds.accepted_password_auth_method로 설정됩니다. 이러한 값 중 하나를 기본값에서 변경하려면 사용자 지정 DB 파라미터 그룹을 생성하여 인스턴스에 적용해야 합니다.

AWS Management Console 또는 RDS API를 사용하여 사용자 지정 DB 파라미터 그룹을 생성할 수도 있습니다. 자세한 내용은 단원을 참조하세요.

DB 파라미터 그룹을 DB 인스턴스에 연결합니다.

사용자 지정 DB 파라미터 그룹을 생성하려면
  1. create-db-parameter-group CLI 명령을 사용하여 사용자 지정 DB 파라미터 그룹을 생성합니다. 이 예에서는 postgres13을 사용자 지정 파라미터 그룹의 소스로 사용합니다.

    Linux, macOS, Unix:

    aws rds create-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --db-parameter-group-family postgres13 --description 'Custom parameter group for SCRAM'

    Windows의 경우:

    aws rds create-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --db-parameter-group-family postgres13 --description "Custom DB parameter group for SCRAM"
  2. modify-db-instance CLI 명령을 사용하여 다음과 같이 사용자 지정 파라미터 그룹을 RDS for PostgreSQL DB 클러스터에 적용합니다.

    Linux, macOS, Unix:

    aws rds modify-db-instance --db-instance-identifier 'your-instance-name' \ --db-parameter-group-name "docs-lab-scram-passwords

    Windows의 경우:

    aws rds modify-db-instance --db-instance-identifier "your-instance-name" ^ --db-parameter-group-name "docs-lab-scram-passwords

    사용자 지정 DB 파라미터 그룹이 포함된 RDS for PostgreSQL DB 인스턴스를 다시 동기화하려면 클러스터의 프라이머리 및 기타 모든 인스턴스를 재부팅합니다. 사용자에게 미치는 영향을 최소화하기 위해 정기 유지 관리 기간 동안 진행되도록 예약합니다.

SCRAM을 사용하도록 암호 암호화 구성

RDS for PostgreSQL DB 인스턴스에서 사용하는 암호 암호화 메커니즘은 DB 파라미터 그룹password_encryption 파라미터로 설정되어 있습니다. 허용되는 값은 설정하지 않거나 md5 또는 scram-sha-256입니다. 기본값은 다음과 같이 RDS for PostgreSQL 버전에 따라 달라집니다.

  • RDS for PostgreSQL 14 이상 – 기본값은 scram-sha-256입니다.

  • RDS for PostgreSQL 13 – 기본값은 md5입니다.

사용자 지정 DB 파라미터 그룹RDS for PostgreSQL DB 인스턴스에 연결되어 있으면 암호 암호화 파라미터 값을 변경할 수 있습니다.


          RDS 콘솔에 RDS for PostgreSQL의 password_encryption 파라미터에 대한 기본값이 표시됩니다.
암호의 암호화 설정을 scram-sha-256으로 변경하려면
  • 다음과 같이 암호 암호화 값을 scram-sha-256으로 변경합니다. 파라미터가 동적이기 때문에 변경 사항을 즉시 적용할 수 있으므로 변경 사항을 적용하려고 재시작하지 않아도 됩니다.

    Linux, macOS, Unix:

    aws rds modify-db-parameter-group --db-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'

    Windows의 경우:

    aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"

사용자 역할의 암호를 SCRAM으로 마이그레이션

다음에 설명된 대로 사용자 역할에 대한 암호를 SCRAM으로 마이그레이션할 수 있습니다.

MD5에서 SCRAM으로 데이터베이스 사용자(역할) 암호를 마이그레이션하려면
  1. 다음과 같이 관리자 사용자로 로그인(기본 사용자 이름 postgres)합니다.

    psql --host=db-name.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. 다음 명령을 사용하여 RDS for PostgreSQL DB 인스턴스의 password_encryption 파라미터 설정을 확인합니다.

    postgres=> SHOW password_encryption; password_encryption --------------------- md5 (1 row)
  3. 이 파라미터의 값을 scram-sha-256으로 변경합니다. 이 파라미터는 동적 파라미터이므로 변경 후에 인스턴스를 재부팅할 필요가 없습니다. 다음과 같이 scram-sha-256으로 설정되어 있는지 값을 다시 확인합니다.

    postgres=> SHOW password_encryption; password_encryption --------------------- scram-sha-256 (1 row)
  4. 모든 데이터베이스 사용자에게 암호 변경을 알립니다. 계정 postgres(rds_superuser 권한을 지닌 데이터베이스 사용자)의 자체 암호도 변경해야 합니다.

    labdb=> ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me'; ALTER ROLE
  5. 에 모든 데이터베이스에 대해 프로세스를 반복합니다. RDS for PostgreSQL DB 인스턴스

SCRAM이 필요하도록 파라미터 변경

과정의 마지막 단계입니다. 다음 절차에서 변경한 후에도 암호에 md5 암호화를 계속 사용하는 모든 사용자 계정(역할)은 에 로그인할 수 없습니다. RDS for PostgreSQL DB 인스턴스

rds.accepted_password_auth_method는 로그인하는 동안 RDS for PostgreSQL DB 인스턴스가 사용자 암호에 대해 허용하는 암호화 방법을 지정합니다. 기본값은 md5+scram이므로, 두 방법 중 하나를 사용할 수 있습니다. 다음 이미지에서는 이 파라미터에 대한 기본 설정을 찾을 수 있습니다.


        RDS 콘솔에서 rds.accepted_password_auth_method 파라미터에 대한 기본 값과 허용된 값을 표시합니다.

이 파라미터에 허용되는 값은 md5+scram 또는 scram입니다. 이 파라미터 값을 scram으로 변경하여 필수로 설정합니다.

암호에 SCRAM 인증을 요구하도록 파라미터 값을 변경하려면
  1. RDS for PostgreSQL DB 인스턴스의 모든 데이터베이스에 대한 전체 데이터베이스 사용자 암호가 암호 암호화에 scram-sha-256을 사용하는지 확인합니다. 이렇게 하려면 다음과 같이 역할(사용자) 및 암호화 유형에 대해 rds_tools를 쿼리합니다.

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type(); rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
  2. 의 모든 DB 인스턴스에서 쿼리를 반복합니다. RDS for PostgreSQL DB 인스턴스

    모든 암호가 scram-sha-256을 사용하는 경우 그대로 진행하면 됩니다.

  3. 다음과 같이 허용된 암호 인증의 값을 scram-sha-256으로 변경합니다.

    Linux, macOS, Unix:

    aws rds modify-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'

    Windows의 경우:

    aws rds modify-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"