Secure Sockets Layer (SSL) 暗号化を有効にした後でも、クライアントアクセス制御が設定されていない場合、クライアントは PGSSLMODE=disable パラメーターを使用して SSL なしで接続できます。クライアントに SSL 接続を強制的に使用させるには、このトピックで説明されている手順に従ってください。
前提条件
RDS インスタンスで SSL 暗号化が有効になっていること。これは、クライアントが SSL 接続のみを介して RDS インスタンスに接続する場合に適用されます。詳細については、「SSL 暗号化を設定する」または「カスタム証明書を設定する」をご参照ください。
クライアント CA 証明書が設定されていること。これは、クライアントが SSL 接続を介して RDS インスタンスに接続するときにクライアント証明書を検証する場合に適用されます。詳細については、「クライアント CA 証明書を設定する」をご参照ください。
手順
次のいずれかの方法を使用して、クライアントが SSL 接続を介して RDS インスタンスに接続するように強制できます。
方法 1: クライアント ACL を設定する
クライアント CA 証明書を設定した後、RDS インスタンスで ACL を設定できます。その後、指定した SSL モードに基づいて RDS インスタンスがクライアントを検証した後にのみ、クライアントは RDS インスタンスに接続できます。RDS インスタンスは、クライアント証明書とクライアント証明書の秘密鍵を使用してクライアントを検証します。
ACL を設定すると、RDS インスタンスで操作を実行できなくなります。この設定プロセスには約 1 分かかります。
RDS for PostgreSQL インスタンスにクライアントアクセス制御が設定されていない場合、デフォルトの認証方式は
preferです。この場合、クライアントはPGSSLMODE=disableパラメーターを使用して SSL なしで接続できます。非 SSL 接続をブロックするには、SSL 暗号化を有効にしてから、prefer以外の認証方式を使用するように ACL を設定します。
[ACL の設定] の右側にある [変更] をクリックし、適切な認証方式を選択します。
次のいずれかの認証方式を使用して、クライアントが SSL 接続を介して RDS インスタンスに接続するように強制できます。
cert: パスワードではなくクライアント証明書を使用してクライアントを検証します。SSL 接続が確立されます。さらに、システムはクライアント証明書を検証し、クライアント証明書で指定されたコモンネーム (CN) が RDS インスタンスへの接続に使用されるユーザー名と一致するかどうかを確認します。
verify-ca: SSL 接続が確立され、システムはクライアント証明書を検証します。
verify-full: SSL 接続が確立されます。システムはクライアント証明書を検証し、クライアント証明書で指定された CN が RDS インスタンスへの接続に使用されるユーザー名と一致するかどうかを確認します。この SSL モードは PostgreSQL 12 以降でサポートされています。
方法 2: pg_hba.cnf ファイルを設定する
SSL 暗号化を設定した後、RDS for PostgreSQL の AD ドメインサービス設定 機能を使用して pg_hba.cnf ファイルを変更できます。これにより、クライアントは SSL を使用してデータベースに接続するように強制されます。
インスタンスページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、[アカウント管理] をクリックし、[AD ドメインサービス情報] タブをクリックします。
最初のレコードで、TYPE 列の値を
hostsslに変更します。
[送信] をクリックします。
説明送信をクリックすると、RDS インスタンスのステータスが約 1 分間 [インスタンスのメンテナンス中] に変わります。新しい設定は、新しい接続に対してのみ有効になります。新しい設定を有効にするには、既存の接続を閉じて、これらの接続を再確立する必要があります。