rds_superuser ロールを理解する
PostgreSQL では、ロールは、データベース内のさまざまなオブジェクトに対して、ユーザー、グループ、またはグループやユーザーに与えられた特定のアクセス権限を定義することができます。CREATE USER
と CREATE GROUP
に対する PostgreSQL コマンドは、データベースユーザーを区別するために、より一般的な、特定のプロパティを持つ CREATE ROLE
に置き換えられました。データベースユーザーは、LOGIN 権限を持つロールと考えることができます。
注記
CREATE USER
および CREATE GROUP
コマンドは引き続き使用できます。詳細については、PostgreSQL のドキュメントの「データベースロール
postgres
ユーザーは、Aurora 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
ユーザーによる次の操作を許可します。
Aurora 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
アクセス許可を特に禁止することがわかります。Aurora PostgreSQL はマネージドサービスのため、ホスト OS へのアクセスや、PostgreSQL superuser
アカウントを使用した接続はできません。スタンドアロンの PostgreSQL で superuser
のアクセスが必要な作業の多くは、Aurora で自動的に管理されます。
権限の付与に関する詳細については、PostgreSQL のドキュメントの「GRANT
rds_superuser
ロールは、Aurora PostgreSQL DB クラスターにおけるいくつかの事前定義済みロールの 1 つです。
注記
PostgreSQL 13 以前のリリースでは、定義済みロールはデフォルトロールと呼ばれていました。
次のリストに、新しい Aurora 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 データベースで行う管理タスクの多くを処理するために作成されるロールです。このロールは、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
がデータベースユーザーロールではない (ログインできない) が、他の多くのロールの特権を持っていることがわかります。また、そのデータベースユーザー postgres
は rds_superuser
ロールのメンバーであることも確認できます。前述のように、postgres
が Amazon RDS コンソールの [Create database] (データベースを作成) ページのデフォルト値です。別の名前を選択した場合、代わりにその名前がロールのリストに表示されます。
注記
Aurora PostgreSQL バージョン 15.2 と 14.7 では、rds_superuser
ロールの限定的動作が導入されました。Aurora PostgreSQL ユーザーには、ユーザーに rds_superuser
ロールが付与されている場合でも、対応する接続対象のデータベースで CONNECT
権限を付与する必要があります。Aurora PostgreSQL バージョン 14.7 と 15.2 より前のバージョンでは、ユーザーにrds_superuser
権限が付与されていれば、どのデータベースとシステムテーブルにも接続できました。この制限的動作は、AWS そして、セキュリティの継続的な改善に取り組むという Amazon Aurora コミットメントに整合しています。
上記の機能強化が影響する場合は、アプリケーションのそれぞれのロジックを更新してください。