Amazon Aurora DSQL で RLS (Row Level Security) がサポートされているか確認してみたが本日時点では未サポートだった

Amazon Aurora DSQL で RLS (Row Level Security) がサポートされているか確認してみたが本日時点では未サポートだった

2026.01.18

いわさです。

Amazon Aurora DSQL はサーバーレスな分散リレーショナルデータベースサービスです。
PostgreSQL と互換性があると説明されており、運用性やコストの観点から従来の RDS for PostgreSQL / Aurora PostgreSQL よりも優位性のある場合があります。

一方で、採用にあたってはその互換性に十分注意しながらよく検討する必要があります。
公式ドキュメント上では次のように説明されているので、そのまま移行できるかなーと思ってしまいそうなのですが、サポートされていない PostgreSQL の機能が多いです。

Aurora DSQL は PostgreSQL と互換性があるため、使い慣れたドライバー、オブジェクトリレーショナルマッピング (ORM)、フレームワーク、SQL 機能を使用できます。

サポートされていない PostgreSQL 機能については以下に記載がされています。

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/working-with-postgresql-compatibility-unsupported-features.html

特に、トリガーやシーケンス・外部キーなども使えないので、多くの古き良きシステムではこれらの制約に引っかかってきそうです。

今回 Aurora DSQL で Row Level Security (RLS) が使えるのか確認しました。
結論としては本日時点では RLS は Aurora DSQL でサポートされていません。どういった背景でどういった確認を行ったのか共有したいと思います。

背景

マルチテナント SaaS なワークロードで Aurora DSQL の採用を検討する機会がありました。
多くの SaaS ワークロードでは MAU などの伸びに応じてインフラコストにかけれるコストも変わるので、ビジネス的にサーバーレスアーキテクチャと相性が良いことが多いと思います。
そのため Aurora DSQL が候補に挙がったのですが、もしテナント分離方針をプール型で進めたいとなった場合は Row Level Security (RLS) によるテナント分離を実装したいところです。

Rlw Level Security については次の記事などが参考になると思います。

https://aws.amazon.com/jp/blogs/news/multi-tenant-data-isolation-with-postgresql-row-level-security/

この機能は明示的にALTER TABLEで Row Level Security 機能をテーブルごとに有効化する必要があります。
冒頭の「サポートされていない PostgreSQL 機能」を確認してみたところ、ALTER TABLEコマンド自体は使えそうですが、その中の各アクションがどの程度網羅されているのかはよくわかりませんでした。

そこで実際に Aurora DSQL クラスター上で試してみることにしました。

検証結果

以前作成した Aurora DSQL クラスターを使ってみます。

image.png

マネジメントコンソールからトークンを生成してそれをパスワードとしてpsqlで使ってみましょう。
私のコンソールだとなぜかトークンの貼り付けがうまくいかなかったので、推奨されていない方法ですが環境変数に設定してトークンを使いました。

image.png

% export PGPASSWORD="vftmlxnuimwzrlgdxluchcl5be.dsql.ap-northeast-1.on.aws/?Action=DbConnectAdmin&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20260117%2Fap-northeast-1%2Fdsql%2Faws4_request&X-Amz-Date=20260117T215951Z&X-Amz-Expires=900&X-Amz-Security-Token=hogehogehogehoge&X-Amz-Signature=9393b43f8e493a15c6d4793dde1064e7989ec5b905174fd13af948f184d90496&X-Amz-SignedHeaders=host"

% psql -h vftmlxnuimwzrlgdxluchcl5be.dsql.ap-northeast-1.on.aws -d postgres -U admin
psql (14.15 (Homebrew), server 16.11)
WARNING: psql major version 14, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, bits: 128, compression: off)
Type "help" for help.

関係ないですが、サーバーバージョンは 16.11 互換なのかぁと気が付きました。
手順は省略しますが適当なテーブルとしてtenant_userを作成済みです。

postgres=> select * from tenant_user;
 user_id | tenant_id | name 
---------+-----------+------
(0 rows)

では上記テーブルに対して RLS を有効化してみましょう。

postgres=> ALTER TABLE tenant_user ENABLE ROW LEVEL SECURITY;
ERROR:  unsupported ALTER TABLE ENABLE ROW SECURITY statement

なんてこった。サポートされていませんとでましたね。
その後もう少しドキュメントを調べていくと、サポートされていない PostgreSQL 機能以外に「サポートされている SQL コマンドのサブセット」というドキュメントがありました。

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/working-with-postgresql-compatibility-supported-sql-subsets.html

その中のALTER TABLEを見てみると本日時点でこんな感じになっていました。

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    action [, ... ]
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column_name TO new_column_name
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER TABLE [ IF EXISTS ] name
    RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name
    SET SCHEMA new_schema

where action is one of:

    ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type 
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

まじか。とんでもなく少ない...。
参考までに公式のALTER TABLEリファレンスは以下です。

https://www.postgresql.org/docs/current/sql-altertable.html

冒頭の制限事項ドキュメントにテーブルスペースやパーティションはサポートされていないと記載はされていましたが、ALTER TABLEのアクションがほとんどサポートされていないですね。
ADD COLUMNOWNER TOのみ...?

他のアクションも試してみましょうか。

postgres=> ALTER TABLE tenant_user ENABLE REPLICA TRIGGER trigger_name;
ERROR:  unsupported ALTER TABLE ENABLE REPLICA TRIGGER statement
postgres=> ALTER TABLE tenant_user RENAME TO tenant;
ALTER TABLE
postgres=> ALTER TABLE tenant ADD COLUMN hoge text;
ALTER TABLE
postgres=> ALTER TABLE tenant DROP COLUMN hoge;
ERROR:  unsupported ALTER TABLE DROP COLUMN statement

テーブル名の変更やカラムの追加は出来ましたが、各機能の有効化やDROP COLUMNなどもサポートされていませんね。

さいごに

本日は Amazon Aurora DSQL では RLS (Row Level Security) がサポートされているか確認してみました。
結論として本日時点では未サポートでしたね。

Row Level Security を使いたい場合は本日時点では Aurora DSQL は採用出来なさそうです。
Aurora DSQL の採用にあたっては上記のクォータおよび以下のサポート内容を十分に確認しましょう。

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/working-with-postgresql-compatibility.html

マルチテナントでいうと、Aurora DSQL はサーバーレスなので、運用性を無視してインフラランニングコストだけで見るとプール型に拘らずにサイロ型にしてしまうのもありかなと思ったのですが、Aurora DSQL はリソース作成のクォータも色々ありましてこちらにも注意する必要があります。

https://docs.aws.amazon.com/ja_jp/aurora-dsql/latest/userguide/CHAP_quotas.html

例えば、AWS アカウントあたりのクラスター最大数はデフォルトで 20 となっています。上限緩和は可能みたいです。
また、クラスターあたりのデータベース数は 1 つのみとなっていてこちらは上限緩和は出来ません。

この記事をシェアする

FacebookHatena blogX

関連記事