'Heroku Data Labs: Heroku Postgres のための Enhanced Certificates'
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年04月20日(木)
Table of Contents
Enhanced Certificates は、Heroku Postgres データベースへの接続時に verify-full
の sslmode
を使用して Man-In-The-Middle (中間者) 攻撃から保護するために役立ちます。
Enhanced Certificates 機能は、ISGR ルート証明書のパブリックに検証可能なエンドエンティティ TLS 証明書をプロビジョニングします。
概要
Heroku Enhanced Certificates は現在、パブリックベータとして使用できます。一般提供 (GA) へのリリースまで、この機能は、機能や稼働時間の保証がない評価の目的で提供されます。
前提条件
- Standard、Premium、Private、または Shield 層の Heroku Postgres データベース、バージョン 13 以上
Enhanced Certificates を有効にする
Heroku Data CLI プラグインをインストールする
data
プラグインをインストールするには、次の CLI コマンドを使用します。
$ heroku plugins:install data
Enhanced Certificates を使用して新しい Heroku Postgres データベースをプロビジョニングする
Enhanced Certificates のベータ版を使用して Heroku Postgres データベースをプロビジョニングするには、アドオン作成コマンドに --enhanced-certificates-beta
フラグを渡します。
$ heroku addons:create heroku-postgresql:standard-0 -a example-app --enhanced-certificates-beta
既存の Heroku Postgres データベースに Enhanced Certificates を追加する
既存の Heroku Postgres データベースで Enhanced Certificates を有効にするには、次のコマンドを使用します。
$ heroku data:labs:enable enhanced-certificates -a example-app --addon=ADDON_NAME
Enabling enhanced-certificates on ADDON_NAME... done
あるいは、heroku data:enhanced-certificates:enable
CLI コマンドを使用することもできます。
$ heroku data:enhanced-certificates:enable DATABASE_URL -a example-app
Enabling Enhanced Certificates Beta on example-app... done
Enhanced Certificates のプロビジョニングには 15 分以上かかる場合があります。現在のステータスは、heroku data:enhanced-certificates:status
コマンドで確認できます。
Enhanced Certificates は現在 mTLS と互換性がありません。
既存の Heroku Postgres データベースに Enhanced Certificates を追加すると、その接続 URL の値が変更されます。アドオン環境設定 (デフォルトでは DATABASE_URL
) が更新され、アプリケーションの新しいリリースが作成されて強制的に再起動されます。以前の接続 URL は有効なままですが、完全な SSL 検証を使用するには外部のクライアントとアプリケーションを新しいものに更新する必要があります。
data:labs:* commands
には、Heroku Data CLI プラグインのバージョン 1.2.0 以上が必要です。Heroku Data CLI プラグインを更新する方法に関する Heroku Data Labs の記事を参照してください。
Enhanced Certificates を無効にする
アプリまたは外部クライアントがサーバー証明書の検証を使用してデータベースに接続する場合は、これらの設定を更新してから Enhanced Certificates 機能を無効にする必要があります。
たとえば、設定で sslmode=verify-full
を使用している場合、接続の失敗を回避するために、これを sslmode=require
に更新してからデータベースの Enhanced Certificates を無効にします。
既存の Heroku Postgres データベースで Enhanced Certificates を無効にするには、次のコマンドを使用します。
$ heroku data:labs:disable enhanced-certificates -a example-app --addon=ADDON_NAME
Disabling enhanced-certificates on ADDON_NAME... done
あるいは、heroku data:enhanced-certificates:disable
CLI コマンドを使用することもできます。
$ heroku data:enhanced-certificates:disable DATABASE_URL -a example-app
Disabling Enhanced Certificates Beta on postgresql-colorful-12345... done
既存の Heroku Postgres データベースから Enhanced Certificates を削除すると、その接続 URL が変更されます。アドオン環境設定 (デフォルトでは DATABASE_URL
) が更新され、アプリケーションの新しいリリースが作成されて強制的に再起動されます。
Enhanced Certificates のステータスを表示する
既存の Heroku Postgres データベースの Enhanced Certificates のステータスを表示するには、次のコマンドを使用します。
$ heroku data:labs:list ADDON_NAME -a example-app
=== Experimental Features Available for ADDON_NAME:
[+] enhanced-certificates Provides publicly signed TLS certificates for connectivity to your addon
[ ] wal-compression Write-ahead log compression on Heroku Postgres addons
あるいは、heroku data:enhanced-certificates:status
CLI コマンドを使用することもできます。
$ heroku data:enhanced-certificates:status DATABASE -a example-app
=== Enhanced Certificates for postgresql-colorful-12345.
Status: Enabled
Enhanced Certificates を使用して Heroku Postgres データベースに接続する
Enhanced Certificates 機能では、データベースの接続文字列の構造を次のパラメータが含まれるように変更します。
verify-full
に設定されたsslmode
。このパラメータは、証明書の検証を自動的に実行し、データベースのホスト名がその証明書と一致していることを確認することによって MITM 攻撃を回避します。アプリケーションおよびクライアントが接続できる方法に関する言語固有の手順については、Heroku Postgres への接続を参照してください。/etc/ssl/certs/ca-certificates.crt
に設定されたsslrootcert
。このパラメータは、Heroku dyno 内の SSL 証明機関 (CA) 証明書が含まれているファイルの場所を指します。- データベースクライアントやアプリケーションはまた、Enhanced Certificates を使用して Heroku Postgres データベースに接続するために別の SSL モード (
sslmode=require
など) を設定することもできます。Heroku Postgres データベースへのすべての接続に SSL 接続が必要です。