PostgreSQL 역할 및 권한 이해 - Amazon Aurora

PostgreSQL 역할 및 권한 이해

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

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

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

AWS Management Console 대신 create-db-cluster AWS CLI를 사용하는 경우 명령에서 master-username 파라미터로 사용자 이름을 전달하여 사용자 이름을 생성합니다. 자세한 내용은 2단계: Aurora PostgreSQL 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 사용자는 Aurora 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 사용자는 다음과 같은 작업을 할 수 있습니다.

  • Aurora 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 권한을 허용하지 않음을 알 수 있습니다. Aurora PostgreSQL은 관리형 서비스이므로 호스트 OS에 액세스할 수 없으며, PostgreSQL superuser 계정을 사용하여 연결할 수 없습니다. 독립 실행형 PostgreSQL에 대한 superuser 액세스 권한이 필요한 대부분의 태스크는 Aurora에서 자동으로 관리됩니다.

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

rds_superuser 역할은 Aurora PostgreSQL DB 클러스터에서 미리 정의된 여러 역할 중 하나입니다.

참고

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

다음 목록에서 새로운 Aurora 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 데이터베이스에서 수행할 수 있는 많은 관리 태스크를 처리하기 위해 생성된 역할입니다. 이 역할은 Aurora PostgreSQL에서 다양한 관리 태스크에 내부적으로 사용됩니다.

미리 정의된 모든 역할을 보려면 Aurora 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) 페이지의 기본값입니다. 다른 이름을 선택한 경우 해당 이름이 대신 역할 목록에 표시됩니다.

참고

Aurora PostgreSQL 버전 15.2 및 14.7에는 rds_superuser 역할의 제한적인 동작이 도입되었습니다. 사용자에게 rds_superuser 역할이 부여된 경우에도 연결하려면 Aurora PostgreSQL 사용자에게는 해당 데이터베이스에 대한 CONNECT 권한이 부여되어야 합니다. Aurora PostgreSQL 버전 14.7 및 15.2 이전에는 사용자에게 rds_superuser 역할이 부여되어 있어야 모든 데이터베이스 및 시스템 테이블에 연결할 수 있었습니다. 이러한 제한적인 동작을 통해 AWS 및 Amazon Aurora는 지속적으로 보안을 강화하고자 최선을 다하고 있습니다.

위의 개선 사항으로 영향을 받는 경우 애플리케이션에서 관련 로직을 업데이트하세요.

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

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

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

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

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

  1. 다음과 같이 psql 또는 pgAdmin을 사용하여 Aurora PostgreSQL DB 클러스터의 프라이머리 DB 인스턴스 에 연결합니다.

    psql --host=your-cluster-instance-1.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 역할이 부여된 데이터베이스 사용자만 암호를 관리할 수 있습니다.

참고

제한된 암호 관리를 사용하려면 Aurora PostgreSQL DB 클러스터가 Amazon Aurora PostgreSQL 10.6 이상을 실행해야 합니다.

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

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

이 기능을 켜려면 사용자 정의 파라미터 그룹을 사용하고 rds.restrict_password_commands에 대한 설정을 1로 변경합니다. Aurora 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을 Aurora PostgreSQL DB 클러스터의 암호 암호화 체계로 사용하는 것이 좋습니다. Aurora PostgreSQL 14 릴리스부터 SCRAM은 버전 10, 11, 12, 13, 14를 비롯하여 사용 가능한 모든 Aurora PostgreSQL 버전에서 지원됩니다. 이는 암호 인증 및 암호화에 scram-sha-256 알고리즘을 사용하는 암호화 챌린지-응답 메커니즘입니다.

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

참고

Aurora PostgreSQL 버전 14 이상에서는 기본적으로 새 DB 클러스터에 대한 암호 암호화를 위해 scram-sha-256을 지원합니다. 즉, 기본 DB 클러스터 파라미터 그룹(default.aurora-postgresql14)의 password_encryption 값은 scram-sha-256으로 설정됩니다.

SCRAM이 필요하도록 Aurora PostgreSQL DB 클러스터 설정

Aurora PostgreSQL 14.3 이상 버전의 경우 Aurora PostgreSQL DB 클러스터가 scram-sha-256 알고리즘을 사용하는 암호만 수락하도록 요구할 수 있습니다.

중요

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

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

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

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

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

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

  • Aurora PostgreSQL DB 클러스터 에서 기본 파라미터 그룹을 사용한다면 필요한 경우 파라미터를 수정할 수 있도록 사용자 지정 DB 클러스터 파라미터 그룹 을 생성하고, 이를 Aurora PostgreSQL DB 클러스터 에 적용해야 합니다. Aurora 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로 암호화된 암호가 있는 사용자(역할)는 연결할 수 없습니다.

Aurora PostgreSQL DB 클러스터에서 SCRAM을 사용하도록 준비

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

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

    psql --host=cluster-name-instance-1.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 클러스터 파라미터 그룹 생성

참고

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

Aurora 파라미터 그룹에 대한 개요는 DB 클러스터 파라미터 그룹 만들기 섹션을 참조하세요.

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

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

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

사용자 지정 DB 클러스터 파라미터 그룹을 생성하려면
  1. create-db-cluster-parameter-group CLI 명령을 사용하여 클러스터에 대한 사용자 지정 파라미터 그룹을 생성합니다. 이 예에서는 aurora-postgresql13을 사용자 지정 파라미터 그룹의 소스로 사용할 수 있습니다.

    Linux, macOS, Unix:

    aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \ --db-parameter-group-family aurora-postgresql13 --description 'Custom DB cluster parameter group for SCRAM'

    Windows의 경우:

    aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^ --db-parameter-group-family aurora-postgresql13 --description "Custom DB cluster parameter group for SCRAM"

    다음으로 사용자 지정 파라미터 그룹을 클러스터와 연결합니다.

  2. modify-db-cluster CLI 명령을 사용하여 다음과 같이 사용자 지정 파라미터 그룹을 Aurora PostgreSQL DB 클러스터에 적용합니다.

    Linux, macOS, Unix:

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

    Windows의 경우:

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

    사용자 지정 DB 클러스터 파라미터 그룹이 포함된 Aurora PostgreSQL DB 클러스터 를 다시 동기화하려면 클러스터의 프라이머리 및 기타 모든 인스턴스를 재부팅합니다.

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

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

  • Aurora PostgreSQL 14 – 기본값은 scram-sha-256입니다.

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

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

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

    Linux, macOS, Unix:

    aws rds modify-db-cluster-parameter-group --db-cluster-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=cluster-name-instance-1.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. Aurora PostgreSQL DB 클러스터에 모든 데이터베이스에 대해 프로세스를 반복합니다.

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

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

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

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

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

암호에 SCRAM 인증을 요구하도록 파라미터 값을 변경하려면
  1. Aurora 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. Aurora PostgreSQL DB 클러스터의 모든 DB 인스턴스에서 쿼리를 반복합니다.

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

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

    Linux, macOS, Unix:

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

    Windows의 경우:

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