rds_superuser ロールを理解する - Amazon Relational Database Service

rds_superuser ロールを理解する

PostgreSQL では、ロールは、データベース内のさまざまなオブジェクトに対して、ユーザー、グループ、またはグループやユーザーに与えられた特定のアクセス権限を定義することができます。CREATE USERCREATE 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'

特に指定がない限り、プロパティ NOSUPERUSERNOREPLICATIONINHERIT、および 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_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 ロールは、におけるいくつかの事前定義済みロールの 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 がデータベースユーザーロールではない (ログインできない) が、他の多くのロールの特権を持っていることがわかります。また、そのデータベースユーザー postgresrds_superuser ロールのメンバーであることも確認できます。前述のように、postgres が Amazon RDS コンソールの [Create database] (データベースを作成) ページのデフォルト値です。別の名前を選択した場合、代わりにその名前がロールのリストに表示されます。