rds_superuser 역할 이해 - Amazon Relational Database Service

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