rds_superuser ロールを理解する
PostgreSQL では、ロールは、データベース内のさまざまなオブジェクトに対して、ユーザー、グループ、またはグループやユーザーに与えられた特定のアクセス権限を定義することができます。CREATE USER
と CREATE GROUP
に対する PostgreSQL コマンドは、データベースユーザーを区別するために、より一般的な、特定のプロパティを持つ CREATE ROLE
に置き換えられました。データベースユーザーは、LOGIN 権限を持つロールと考えることができます。
注記
CREATE USER
および CREATE GROUP
コマンドは引き続き使用できます。詳細については、PostgreSQL のドキュメントの「データベースロール
postgres
ユーザーは、 RDS for PostgreSQL DB インスタンス で最も権限があるデータベースユーザーです。ユーザーには、次の CREATE ROLE
ステートメントで定義される特性があります。
CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity'
特に指定がない限り、プロパティ NOSUPERUSER
、NOREPLICATION
、INHERIT
、および VALID UNTIL 'infinity'
が CREATE ROLE のデフォルトオプションです。
デフォルトでは、postgres
には rds_superuser
ロールに付与された権限と、ロールとデータベースを作成するアクセス許可があります。rds_superuser
ロールでは、postgres
ユーザーによる次の操作を許可します。
Amazon RDS で使用できる拡張機能の追加 詳細については、「Amazon RDS for PostgreSQL でサポートされている PostgreSQL の機能を使用する
-
ユーザーのロールを作成し、ユーザーに権限を付与します。詳細については、PostgreSQL のドキュメントの「CREATE ROLE
」および「GRANT 」セクションを参照してください。 -
データベースの作成 詳細については、PostgreSQL のドキュメントの「CREATE DATABASE
」を参照してください。 これらの権限を持たないユーザーロールに対する
rds_superuser
権限を付与し、必要に応じてそれらの権限を取り消します。このロールは、スーパーユーザータスクを実行するユーザーにのみ付与することをお勧めします。つまり、データベース管理者 (DBA) またはシステム管理者にこのロールを付与できます。rds_superuser
ロールを持たないデータベースユーザーにrds_replication
ロールを付与 (または取り消し) します。rds_superuser
ロールを持たないデータベースユーザーにrds_password
ロールを付与 (または取り消し) します。pg_stat_activity
ビューを使用して、すべてのデータベース接続に関するステータス情報を取得します。必要に応じて、rds_superuser
でpg_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
ロールは、におけるいくつかの事前定義済みロールの 1 つです。RDS for PostgreSQL DB インスタンス。
注記
PostgreSQL 13 以前のリリースでは、定義済みロールはデフォルトロールと呼ばれていました。
次のリストに、新しい のために自動的に作成される他の定義済みロールの一部を示します。RDS for PostgreSQL DB インスタンス。定義済みロールとその権限は変更できません。これらの定義済みロールに対して削除、名前の変更、変更を行うことはできません。それらの操作を試みると、エラーが発生します。
rds_password - データベースユーザーのパスワードを変更し、パスワード制約を設定できるロールです。
rds_superuser
ロールにはデフォルトでこのロールが付与され、データベースユーザーにロールを付与できます。詳細については、「PostgreSQL データベースへのユーザーアクセスのコントロール」を参照してください。14 より前のバージョンの RDS for PostgreSQL の場合、
rds_password
ロールはパスワードを変更し、データベースユーザーとrds_superuser
ロールを持つユーザーのパスワード制約を設定できます。RDS for PostgreSQL 14 以降のバージョンでは、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
がデータベースユーザーロールではない (ログインできない) が、他の多くのロールの特権を持っていることがわかります。また、そのデータベースユーザー postgres
は rds_superuser
ロールのメンバーであることも確認できます。前述のように、postgres
が Amazon RDS コンソールの [Create database] (データベースを作成) ページのデフォルト値です。別の名前を選択した場合、代わりにその名前がロールのリストに表示されます。