

# Amazon Aurora PostgreSQL でのセキュリティ
<a name="AuroraPostgreSQL.Security"></a>

Aurora のセキュリティの概要については、「[ Amazon Aurora でのセキュリティ](UsingWithRDS.md)」を参照してください。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](UsingWithRDS.IAM.md)」を参照してください。

  IAM を Aurora PostgreSQL DB クラスターで使用する場合は、Amazon RDS コンソールを [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) で開く前に、まず、IAM 認証情報を使用して AWS マネジメントコンソール にサインインしてください。
+ Aurora DB クラスターを Amazon VPC サービスに基づいて仮想プライベートクラウド (VPC) で作成してください。VPC 内の Aurora DB クラスター用の DB インスタンスのエンドポイントとポートに対して接続を開くことができるデバイスと Amazon EC2 インスタンスを制御するには、VPC セキュリティグループを使用します。これらのエンドポイントとポート接続は、Secure Sockets Layer (SSL) を使用して作成できます。さらに、会社のファイアウォールルールでも、社内のいずれのデバイスが DB インスタンスへの接続を開くことができるかを制御できます。VPC の詳細については、「[Amazon VPC と Amazon Aurora](USER_VPC.md)」を参照してください。

  サポートされている 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 インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。`default` および `dedicated` VPC テナントの詳細については、*Amazon Elastic Compute Cloud ユーザーガイド*の「[ハードウェア専有インスタンス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)」を参照してください。
+ Amazon Aurora DB クラスターで実行されている PostgreSQL データベースにアクセス権限を付与するには、PostgreSQL のスタンドアロンインスタンスと同じ一般的なアプローチを使用します。`CREATE ROLE`、`ALTER ROLE`、`GRANT`、`REVOKE` などのコマンドは、オンプレミスデータベースでの方法と同様に、データベース、スキーマ、およびテーブルを直接変更します。

  PostgreSQL は、*ロール*を使用して権限を管理します。`rds_superuser` ロールは、Aurora PostgreSQL DB クラスターで最も権限があるロールです。このロールは自動的に作成され、DB クラスターを作成するユーザー (マスターユーザーアカウント、デフォルトでは `postgres`) に付与されます。詳細については[PostgreSQL のロールとアクセス権限について](Appendix.PostgreSQL.CommonDBATasks.Roles.md)を参照してください。

バージョン 10、11、12、13、14 以降のリリースを含む Aurora PostgreSQL バージョンでは、メッセージダイジェスト (MD5) の代替として、Salted Challenge Response Authentication Mechanism (SCRAM) がサポートされています。SCRAM は MD5 よりも安全であるため、使用が推奨されています。データベースユーザーパスワードを MD5 から SCRAM に移行する方法など、詳細については、「[PostgreSQL のパスワード暗号化に SCRAM を使用する](PostgreSQL_Password_Encryption_configuration.md)」を参照してください。

## SSL/TLS での Aurora PostgreSQL データの保護
<a name="AuroraPostgreSQL.Security.SSL"></a>

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](https://www.postgresql.org/docs/current/libpq-ssl.html)」を参照してください。JDBC を介した SSL/TLS 接続の使用については、PostgreSQL ドキュメントの「[Configuring the Client](https://jdbc.postgresql.org/documentation/head/ssl-client.html)」を参照してください。

**Topics**
+ [Aurora PostgreSQL DB クラスターへの SSL/TLS 接続を必須にする](#AuroraPostgreSQL.Security.SSL.Requiring)
+ [SSL/TLS 接続ステータスを確認する](#AuroraPostgreSQL.Security.SSL.Status)
+ [Aurora PostgreSQL DB クラスターへの接続用暗号スイートを設定する](#AuroraPostgreSQL.Security.SSL.ConfiguringCipherSuites)

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 クラスターに接続する方法**

1. 証明書をダウンロードします。

   証明書のダウンロードについては、[SSL/TLS を使用した DB クラスターへの接続の暗号化](UsingWithRDS.SSL.md) を参照してください。

1. オペレーティングシステムに証明書をインポートします。

1. 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 接続を必須にする
<a name="AuroraPostgreSQL.Security.SSL.Requiring"></a>

Aurora PostgreSQL DB クラスターへの SSL/TLS 接続を必須にするには、`rds.force_ssl` パラメータを使用します。
+ SSL/TLS 接続を必須にするには、`rds.force_ssl` パラメータ値を 1 (オン) に設定します。
+ 必須の SSL/TLS 接続をオフにするには、`rds.force_ssl` パラメータ値を 0 (オフ) に設定します。

このパラメータのデフォルト値は、Aurora PostgreSQL のバージョンによって異なります。
+ Aurora PostgreSQL バージョン 17 以降では、デフォルト値は 1 (オン) です。
+ Aurora PostgreSQL バージョン 16 以前では、デフォルト値は 0 (オフ) です。

**注記**  
Aurora PostgreSQL バージョン 16 またはそれ以前のバージョンからバージョン 17 以降にメジャーバージョンアップグレードを実行すると、パラメータのデフォルト値は 0 (オフ) から 1 (オン) に変わります。この変更により、SSL 用に設定されていないアプリケーションで接続障害が発生する可能性があります。このパラメータを 0 (オフ) に設定することで、以前のデフォルトの動作に戻すことができます。

パラメータの処理に関する詳細については、「[Amazon Aurora のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

`rds.force_ssl` パラメータを更新することでも PostgreSQL `ssl` パラメータは 1 (オン) に設定され、新しい SSL/TLS 設定をサポートするように DB クラスターの `pg_hba.conf` ファイルが変更されます。

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 接続ステータスを確認する
<a name="AuroraPostgreSQL.Security.SSL.Status"></a>

接続の暗号化ステータスは、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 ドキュメントの「[データベース接続制御関数](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)」を参照してください。

### Aurora PostgreSQL DB クラスターへの接続用暗号スイートを設定する
<a name="AuroraPostgreSQL.Security.SSL.ConfiguringCipherSuites"></a>

設定可能な暗号スイートを使用すると、データベース接続のセキュリティをより詳細に制御できます。データベースへのクライアント SSL/TLS 接続を保護するために許可する暗号スイートのリストを指定できます。設定可能な暗号スイートを使用すると、データベースサーバーが受け入れる接続暗号化を制御できます。これにより、安全でない暗号や非推奨の暗号の使用を防ぐことができます。

設定可能な暗号スイートは、Aurora PostgreSQL バージョン 11.8 以降でサポートされています。

接続を暗号化するために許容できる暗号のリストを指定するには、`ssl_ciphers` クラスターパラメータを変更します。AWS マネジメントコンソール、AWS CLI、または RDS API を使用して、`ssl_ciphers` パラメータをクラスターパラメータグループのカンマ区切りの暗号文字列に設定します。クラスターパラメータを設定するには、「[Amazon Aurora での DB クラスターパラメータグループのパラメータの変更](USER_WorkingWithParamGroups.ModifyingCluster.md)」を参照してください。

次の表は、有効な Aurora PostgreSQL エンジンバージョンでサポートされる暗号を示しています。


| Aurora PostgreSQL のエンジンバージョン | サポートされる暗号 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 
| --- | --- | --- | --- | --- | 
| 9.6、10.20 以前、11.15 以前、12.10 以前、13.6 以前 | 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-ECDSA-AES256-SHA ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-SHA ECDHE-RSA-AES256-GCM-SHA384 | はい なし なし なし なし なし あり なし なし あり なし なし あり なし | なし はい はい はい はい はい はい はい はい はい はい はい はい あり |  なし なし なし なし なし なし なし なし なし なし なし なし なし いいえ  | 
| 10.21、11.16、12.11、13.7、14.3、14.4 |  ECDHE-RSA-AES128-SHATLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1CHACHA20\$1POLY1305\$1SHA256 | はい なし あり なし あり なし あり なし なし あり なし あり なし | はい はい はい はい はい はい はい はい はい はい はい はい あり | なし なし なし なし なし なし なし なし なし なし なし なし いいえ | 
| 10.22、11.17、12.12、13.8、14.5、および 15.2 |  TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1CHACHA20\$1POLY1305\$1SHA256 |  はい なし なし あり なし あり なし なし あり なし なし あり なし はい あり なし  | はい はい はい はい はい はい はい はい はい はい はい はい はい はい はい あり | なし なし なし なし なし なし なし なし なし なし なし なし なし なし なし いいえ | 
| 11.20、12.15、13.11、14.8、15.3、16.1 以降 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1CHACHA20\$1POLY1305\$1SHA256 TLS\$1AES\$1128\$1GCM\$1SHA256 TLS\$1AES\$1256\$1GCM\$1SHA384  | はい なし なし あり なし あり なし なし あり なし なし あり なし はい あり なし なし なし | はい はい はい はい はい はい はい はい はい はい はい はい はい はい はい あり なし なし |  なし なし なし なし なし なし なし なし なし なし なし なし なし なし なし なし はい はい  | 

また、CLI コマンドの [describe-engine-default-cluster-parameters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-cluster-parameters.html) を使用して、特定のパラメータグループファミリーで現在サポートされている暗号スイートを特定することもできます。次の例では、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\$1ciphers](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-SSL-CIPHERS) を参照してください。