Amazon Aurora PostgreSQL でのセキュリティ
Aurora のセキュリティの概要については、「Amazon Aurora でのセキュリティ」を参照してください。Amazon Aurora PostgreSQL のセキュリティは、いくつかの異なるレベルで管理できます。
-
Aurora PostgreSQL DB クラスターと DB インスタンスに対し Amazon RDS 管理アクションを実行できるユーザーを管理するには、AWS Identity and Access Management (IAM) を使用します。IAM は、ユーザーがサービスにアクセスする前に、ユーザー ID の認証を処理します。また、承認、つまりユーザーが行おうとしていることが許可されているかどうかについても処理します。IAM データベース認証は、Aurora PostgreSQL DB クラスターを作成するときに選択できる追加の認証方法です。詳細については、「Amazon Aurora での Identity and Access Management」を参照してください。
IAM を Aurora PostgreSQL DB クラスターで使用する場合は、Amazon RDS コンソールを https://console.aws.amazon.com/rds/
で開く前に、まず、IAM 認証情報を使用して AWS Management Console にサインインしてください。 -
Aurora DB クラスターを Amazon VPC サービスに基づいて仮想プライベートクラウド (VPC) で作成してください。VPC 内の Aurora DB クラスター用の DB インスタンスのエンドポイントとポートに対して接続を開くことができるデバイスと Amazon EC2 インスタンスを制御するには、VPC セキュリティグループを使用します。これらのエンドポイントとポート接続は、Secure Sockets Layer (SSL) を使用して作成できます。さらに、会社のファイアウォールルールでも、社内のいずれのデバイスが DB インスタンスへの接続を開くことができるかを制御できます。VPC の詳細については、「Amazon VPC と Amazon Aurora」を参照してください。
サポートされている VPC テナンシーは、Aurora PostgreSQL DB クラスターで使用しているインスタンスクラスによって異なります。
default
VPC テナンシーでは、DB クラスターは共有ハードウェアで実行されます。dedicated
VPC テナンシーでは、DB クラスターは専用ハードウェアインスタンスで実行されます。バーストパフォーマンス DB インスタンスクラスでは、デフォルト VPC テナンシーのみがサポートされています。バーストパフォーマンス DB インスタンスクラスには、db.t3 および db.t4g DB インスタンスクラスが含まれます。その他すべての Aurora PostgreSQL DB インスタンスクラスでは、デフォルトと専用 VPC テナンシーの両方がサポートされています。インスタンスクラスの詳細については、「Amazon Aurora DB インスタンスクラス」を参照してください。
default
およびdedicated
VPC テナントの詳細については、Amazon Elastic Compute Cloud ユーザーガイドの「ハードウェア専有インスタンス」を参照してください。 -
Amazon Aurora DB クラスターで実行されている PostgreSQL データベースにアクセス権限を付与するには、PostgreSQL のスタンドアロンインスタンスと同じ一般的なアプローチを使用します。
CREATE ROLE
、ALTER ROLE
、GRANT
、REVOKE
などのコマンドは、オンプレミスデータベースでの方法と同様に、データベース、スキーマ、およびテーブルを直接変更します。PostgreSQL は、ロールを使用して権限を管理します。
rds_superuser
ロールは、Aurora PostgreSQL DB クラスターで最も権限があるロールです。このロールは自動的に作成され、DB クラスターを作成するユーザー (マスターユーザーアカウント、デフォルトではpostgres
) に付与されます。詳細については、「PostgreSQL のロールとアクセス権限について」を参照してください。
バージョン 10、11、12、13、14 以降のリリースを含む Aurora PostgreSQL バージョンでは、メッセージダイジェスト (MD5) の代替として、Salted Challenge Response Authentication Mechanism (SCRAM) がサポートされています。SCRAM は MD5 よりも安全であるため、使用が推奨されています。データベースユーザーパスワードを MD5 から SCRAM に移行する方法など、詳細については、「PostgreSQL のパスワード暗号化に SCRAM を使用する」を参照してください。
SSL/TLS での Aurora PostgreSQL データの保護
Amazon RDS では、Aurora PostgreSQL DB クラスターの Secure Socket Layer (SSL) 暗号化と Transport Layer Security (TLS) 暗号化をサポートしています。SSL/TLS を使用して、アプリケーションと Aurora PostgreSQL DB クラスターとの接続を暗号化できます。また、Aurora PostgreSQL DB クラスターへのすべての接続に SSL/TLS の使用を強制することができます。Amazon Aurora PostgreSQL は、Transport Layer Security (TLS) バージョン 1.1 および 1.2 をサポートしています。暗号化された接続には TLS 1.2 を使用することをお勧めします。次の Aurora PostgreSQL のバージョンから TLSv1.3 のサポートが追加されました。
15.3 以降のすべてのバージョン
14.8 以降の 14 バージョン
13.11 以降の 13 バージョン
12.15 以降の 12 バージョン
11.20 以降の 11 バージョン
SSL/TLS サポートおよび PostgreSQL データベースの一般情報については、PostgreSQL ドキュメントの「SSL Support
トピック
Aurora PostgreSQL の SSL/TLS サポートは、すべての AWS リージョンで利用可能です。DB クラスターが作成される際、Amazon RDS により、Aurora PostgreSQL DB クラスター用の SSL/TLS 証明書が作成されます。SSL/TLS 証明書認証を有効にした場合、SSL/TLS 証明書には、なりすまし攻撃から保護するために、SSL/TLS 証明書の共通名 (CN) として DB クラスターのエンドポイントが含まれます。
SSL/TLS を使用して Aurora PostgreSQL DB クラスターに接続する方法
-
証明書をダウンロードします。
証明書のダウンロードについては、SSL/TLS を使用した DB クラスターへの接続の暗号化 を参照してください。
-
オペレーティングシステムに証明書をインポートします。
-
SSL/TLS を使用して Aurora PostgreSQL DB クラスターに接続します。
SSL/TLS を使用して接続するとき、クライアントでは証明書チェーンを検証するかどうかを選択できます。接続パラメータで
sslmode=verify-ca
またはsslmode=verify-full
を指定すると、RDS CA 証明書が信頼ストアに存在するか、または接続 URL で参照されることをクライアントは要求します。この要求は、データベース証明書に署名する証明書チェーンを検証するためのものです。psql や JDBC など、クライアントに SSL/TLS サポートが設定されている場合、クライアントは初期にデフォルトで SSL/TLS を使用してデータベースへの接続を試みます。クライアントが SSL/TLS を使用して接続できない場合、SSL/TLS を使用しない接続に戻ります。デフォルトでは、JDBC および libpq ベースのクライアントの
sslmode
オプションはprefer
に設定されています。sslrootcert
パラメータを使用して証明書を参照します (sslrootcert=rds-ssl-ca-cert.pem
など)。
psql を使用して Aurora PostgreSQL DB クラスターに接続する例は次のとおりです。
$ psql -h testpg.cdhmuqifdpib.us-east-1.rds.amazonaws.com -p 5432 \ "dbname=testpg user=testuser sslrootcert=rds-ca-2015-root.pem sslmode=verify-full"
Aurora PostgreSQL DB クラスターへの SSL/TLS 接続を必須にする
rds.force_ssl
パラメータを使用することで、Aurora PostgreSQL DB クラスターへの接続で SSL/TLS の使用を必須にすることができます。デフォルトでは、rds.force_ssl
パラメータが 0 (オフ) に設定されています。rds.force_ssl
パラメータを 1 (オン) に設定すれば、DB クラスターへの接続で SSL/TLS を必須にすることができます。rds.force_ssl
パラメータを更新することでも PostgreSQL ssl
パラメータは 1 (オン) に設定され、新しい SSL/TLS 設定をサポートするように DB クラスターの pg_hba.conf
ファイルが変更されます。
rds.force_ssl
パラメータの値は、DB クラスターの DB クラスターパラメータグループを更新することで設定できます。DB クラスターパラメータグループがデフォルトのものではなく、ssl
パラメータを 1 に設定するときに rds.force_ssl
パラメータが 1 に設定済みである場合は、DB クラスターを再起動する必要はありません。それ以外の場合は、変更を反映するために DB クラスターを再起動する必要があります。パラメータグループの詳細については、「Amazon Aurora のパラメータグループ」を参照してください。
DB クラスターで rds.force_ssl
パラメータが 1 に設定されている場合、次のような出力が接続時に表示され、SSL/TLS が必須であることが示されます。
$ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql (9.3.12, server 9.4.4) WARNING: psql major version 9.3, server major version 9.4. Some psql features might not work. SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>
SSL/TLS 接続ステータスを確認する
接続の暗号化ステータスは、DB クラスターに接続するときにログオンバナーに表示されます。
Password for user master: psql (9.3.12) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>
また、sslinfo
拡張機能をロードしてから、ssl_is_used()
関数を呼び出して、SSL/TLS が使用されているかどうかを確認することもできます。この関数は、この接続が SSL/TLS を使用している場合に t
を返し、それ以外の場合に f
を返します。
postgres=> create extension sslinfo; CREATE EXTENSION postgres=> select ssl_is_used(); ssl_is_used --------- t (1 row)
select ssl_cipher()
コマンドを使用して、SSL/TLS 暗号を確認することができます。
postgres=> select ssl_cipher(); ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)
set rds.force_ssl
を有効にして DB クラスターを再起動すると、次のメッセージが表示され SSL 以外の接続は拒否されます。
$ export PGSSLMODE=disable $ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql: FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off $
sslmode
オプションの詳細については、PostgreSQL ドキュメントの「データベース接続制御関数
Aurora PostgreSQL DB クラスターへの接続用暗号スイートを設定する
設定可能な暗号スイートを使用すると、データベース接続のセキュリティをより詳細に制御できます。データベースへのクライアント SSL/TLS 接続を保護するために許可する暗号スイートのリストを指定できます。設定可能な暗号スイートを使用すると、データベースサーバーが受け入れる接続暗号化を制御できます。これにより、安全でない暗号や非推奨の暗号の使用を防ぐことができます。
設定可能な暗号スイートは、Aurora PostgreSQL バージョン 11.8 以降でサポートされています。
接続を暗号化するために許容できる暗号のリストを指定するには、ssl_ciphers
クラスターパラメータを変更します。AWS Management Console、AWS CLI、または RDS API を使用して、ssl_ciphers
パラメータをクラスターパラメータグループのカンマ区切りの暗号文字列に設定します。クラスターパラメータを設定するには、「Amazon Aurora の DB クラスターパラメータグループのパラメータの変更」を参照してください。
次の表は、有効な Aurora PostgreSQL エンジンバージョンでサポートされる暗号を示しています。
Aurora PostgreSQL のエンジンバージョン | サポートされる暗号 |
---|---|
9.6、10.20 以前、11.15 以前、12.10 以前、13.6 以前 |
|
10.21、11.16、12.11、13.7、14.3、14.4 |
|
10.22 以降、11.17 以降、12.12 以降、13.8 以降、14.5 以降、15.2 以降 |
|
15.3、14.8、13.11、12.15、11.20 |
|
また、CLI コマンドの describe-engine-default-cluster-parameters を使用して、特定のパラメータグループファミリーで現在サポートされている暗号スイートを特定することもできます。次の例では、Aurora PostgreSQL 11 の ssl_cipher
クラスターパラメータで許可される値を取得する方法を示しています。
aws rds describe-engine-default-cluster-parameters --db-parameter-group-family aurora-postgresql11 ...some output truncated... { "ParameterName": "ssl_ciphers", "Description": "Sets the list of allowed TLS ciphers to be used on secure connections.", "Source": "engine-default", "ApplyType": "dynamic", "DataType": "list", "AllowedValues": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384, ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "IsModifiable": true, "MinimumEngineVersion": "11.8", "SupportedEngineModes": [ "provisioned" ] }, ...some output truncated...
ssl_ciphers
パラメータのデフォルトは、許可されているすべての暗号スイートです。暗号の詳細については、PostgreSQL ドキュメントに記載されている変数 ssl_ciphers