PostgreSQL のロールとアクセス権限について
AWS Management Console を使用してAurora PostgreSQL DB クラスター を作成すると、管理者アカウントが同時に作成されます。次のスクリーンショットに示すように、デフォルトでは 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 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 データベースへのユーザーアクセスのコントロール」を参照してください。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] (データベースを作成) ページのデフォルト値です。別の名前を選択した場合、代わりにその名前がロールのリストに表示されます。
PostgreSQL データベースへのユーザーアクセスのコントロール
PostgreSQL の新しいデータベースは、常にデータベースの public
スキーマに、すべてのデータベースユーザーとロールがオブジェクトを作成できるようなデフォルトの権限セットで作成されます。これらの権限により、例えば、データベースユーザーがデータベースに接続し、接続しながら一時テーブルを作成することができます。
Aurora PostgreSQL DB クラスターのプライマリノード に作成するデータベースインスタンスへのユーザーアクセスをよりよく制御するために、これらのデフォルトの public
権限を取り消すことを推奨します。その後、次の手順で示すように、データベースのユーザーに特定の権限をより詳細に付与します。
新しいデータベースインスタンスのロールと権限を設定するには
全員がデータベースへの読み取り/書き込みアクセスを必要とする複数の研究者が使用するために、新しく作成された Aurora PostgreSQL DB クラスター 上にデータベースをセットアップしているとします。
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=>
を表示します。データベースユーザーが
public
スキーマでオブジェクトを作成できないようにするには、次の操作を行います。postgres=>
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE
次に、新しいデータベースインスタンスを作成します。
postgres=>
CREATE DATABASE
lab_db
;CREATE DATABASE
この新しいデータベースの
PUBLIC
スキーマからすべての権限を取り消します。postgres=>
REVOKE ALL ON DATABASE
lab_db
FROM public;REVOKE
データベースユーザーのロールを作成します。
postgres=>
CREATE ROLE
lab_tech
;CREATE ROLE
このロールを持つデータベースユーザーに、データベースに接続する機能を付与します。
postgres=>
GRANT CONNECT ON DATABASE
lab_db
TOlab_tech
;GRANT
lab_tech
ロールを持つすべてのユーザーに、このデータベースのすべての権限を付与します。postgres=>
GRANT ALL PRIVILEGES ON DATABASE
lab_db
TOlab_tech
;GRANT
次のように、データベースユーザーを作成します。
postgres=>
CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';
CREATE ROLE
postgres=>
CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';
CREATE ROLE
-
これら 2 人のユーザーに lab_tech ロールに関連付けられた権限を付与します。
postgres=>
GRANT lab_tech TO lab_user1;
GRANT ROLE
postgres=>
GRANT lab_tech TO lab_user2;
GRANT ROLE
この時点で、lab_user1
と lab_user2
は lab_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;
ロールの名前の変更 (ALTER ROLE myrole RENAME TO newname
) は、パスワードが MD5 ハッシュアルゴリズムを使用する場合にも制限されます。
この機能が有効な場合、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
権限を持つ必要があります。
PostgreSQL のパスワード暗号化に SCRAM を使用する
SCRAM (Salted Challenge Response Authentication Mechanism) は、パスワードを暗号化するための PostgreSQL のデフォルトのメッセージダイジェスト (MD5) アルゴリズムの代替手段です。SCRAM 認証メカニズムは MD5 よりも安全であると見なされます。これら 2 つの異なるパスワードを保護する方法の詳細については、PostgreSQL のドキュメントの「パスワード認証
Aurora PostgreSQL DB クラスターに対しては、パスワード暗号化方式として MD5 ではなく SCRAM を使用することをお勧めします。Aurora PostgreSQL 14 リリース現在、SCRAM はバージョン 10、11、12、13、14 を含む利用可能なすべての Aurora PostgreSQL バージョンでサポートされています。これは、パスワード認証と暗号化のために scram-sha-256 アルゴリズムを使用する暗号化チャレンジレスポンスのメカニズムです。
SCRAM をサポートするために、クライアントアプリケーションのライブラリを更新する必要があります。例えば、42.2.0 より前の JDBC バージョンで SCRAM はサポートされていません。詳細については、PostgreSQL JDBC ドライバーのドキュメントの「PostgreSQL JDBC ドライバー
注記
Aurora PostgreSQL バージョン 14 以上では、新しい DB クラスターに対してデフォルトでパスワード暗号化に scram-sha-256 をサポートしています。つまり、デフォルトの DB クラスターパラメータグループ (default.aurora-postgresql14
) が持っている password_encryption
値を scram-sha-256 に設定します。
SCRAM を要求するために Aurora PostgreSQL DB クラスターを設定する
Aurora PostgreSQL 14.3 以降のバージョンでは、scram-sha-256 アルゴリズムを使用するパスワードのみを受け入れるために、Aurora PostgreSQL DB クラスターに を要求できます。
重要
PostgreSQL データベースを使用する既存の RDS プロキシでは、SCRAM
のみを使用するようにデータベース認証を変更すると、プロキシは最大 60 秒間使用できなくなります。この問題を回避するには、以下のいずれかの方法で対応します。
データベースが
SCRAM
とMD5
認証の両方を許可していることを確認します。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 以上のリリースでサポートされています。
データベースユーザー (ロール) とパスワードの暗号化方法のリストを取得するには
次のように、
psql
を使用して Aurora PostgreSQL DB クラスターのプライマリ インスタンスを に接続します。psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordrds_tools
拡張機能をインストールします。postgres=>
CREATE EXTENSION rds_tools;
CREATE EXTENSION
ロールと暗号化のリストを取得します。
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 クラスターのパラメータグループの作成」を参照してください。
パスワードに使用されるパスワード暗号化タイプは、1 つのパラメータ password_encryption
で設定します。Aurora PostgreSQL DB クラスター で許可される暗号化は、別のパラメータ rds.accepted_password_auth_method
で設定されます。これらのいずれかをデフォルト値から変更するには、カスタム DB クラスターのパラメータグループ を作成して、クラスター に適用する必要があります。
また、AWS Management Console または RDS API を使用して、カスタムの DB クラスターのパラメータグループ を作成することもできます。詳細については、「DB クラスターのパラメータグループの作成」を参照してください。
これで、カスタムパラメータグループを DB インスタンスに関連付けることができます。
カスタム DB クラスターのパラメータグループを作成するには
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
"これで、カスタムパラメータグループをクラスターに関連付けることができます。
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
Aurora PostgreSQL DB クラスターとカスタム DB クラスターパラメータグループ、を再同期するには、プライマリインスタンスおよびクラスターの他のすべてのインスタンスを再起動します。
SCRAM を使用するためのパスワード暗号化の設定
Aurora PostgreSQL DB クラスター で使用されるパスワード暗号化メカニズムは、password_encryption
パラメータの DB クラスターのパラメータグループ に設定されています。指定できる値は、未設定、md5
または scram-sha-256
です。デフォルト値は、次のように Aurora PostgreSQL のバージョンによって異なります。
Aurora PostgreSQL 14 — デフォルトは
scram-sha-256
Aurora PostgreSQL 13 — デフォルトは
md5
Aurora PostgreSQL DB クラスター にアタッチされているカスタム DB クラスターパラメータグループ では、パスワード暗号化パラメータの値を変更できます。

パスワード暗号化の設定を scram-sha-256 に変更するには
次のように、パスワード暗号化の値を scram-sha-256 に設定します。パラメータが動的であるため、変更をすぐに適用できます。そのため、変更を有効にするために再起動は不要です。
Linux、macOS、Unix の場合:
aws rds modify-db-cluster-parameter-group --db-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 に移行するには
次のように、管理者ユーザーとしてログインします (デフォルトのユーザー名、
postgres
)。psql --host=
cluster-name-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password次のコマンドを使って、RDS for PostgreSQL DB インスタンスの
password_encryption
パラメータの設定を確認します。postgres=>
SHOW password_encryption;
password_encryption --------------------- md5 (1 row)
このパラメータの値を scram-sha-256 に変更します。これは動的パラメータであるため、この変更を行った後でインスタンスを再起動する必要はありません。値をもう一度チェックして、次のように
scram-sha-256
に設定されていることを確認します。postgres=>
SHOW password_encryption;
password_encryption --------------------- scram-sha-256 (1 row)
パスワードの変更をすべてのデータベースユーザーに通知します。アカウント
postgres
(rds_superuser
権限を持つデータベースユーザー) のパスワードも必ず変更してください。labdb=>
ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me';ALTER ROLE
Aurora PostgreSQL DB クラスターのすべてのデータベースに対してこの処理を繰り返します。
SCRAM を要求するようにパラメータを変更する
これがプロセスの最後のステップです。次の手順で変更した後、パスワードに引き続き md5
暗号化を使用するユーザーアカウント (ロール) は Aurora PostgreSQL DB クラスターにログインできません。
rds.accepted_password_auth_method
は、ログインプロセス中に Aurora PostgreSQL DB クラスターがユーザーパスワードに対して受け入れる暗号化方式を指定します。デフォルト値は md5+scram
です。つまり、どちらの方法も受け入れられます。次の画像では、このパラメータのデフォルト設定が表示されています。

このパラメータに指定できる値は、md5+scram
または scram
のみです。このパラメータの値を scram
に変更すると、これが要件となります。
パスワードの SCRAM 認証を要求するようにパラメータ値を変更するには
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)
Aurora PostgreSQL DB クラスターのすべての DB インスタンスでクエリを繰り返します。
すべてのパスワードで 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=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"