プロビジョンド Amazon Aurora DB クラスターをパブリックアクセス可能に設定したうえで、その Aurora DB クラスターを外部接続から保護したいと考えています。
簡単な説明
Aurora DB クラスターをパブリックアクセス可能にするには、クラスター内のインスタンスにパブリック IP アドレスがあり、そのクラスターはパブリックサブネットで実行されている必要があります。
Aurora DB インスタンスでは、特定のサブネットを選択することはできません。代わりに、インスタンスの作成時に DB サブネットグループを選択する必要があります。DB サブネットグループは、同様のネットワーク構成で作成する必要があります。たとえば、パブリックサブネット用に DB サブネットグループを作成し、プライベートサブネット用に別の DB サブネットグループを作成します。
DB インスタンスで VPC 外部からの接続を許可する設定を行った後は、TLS を使用すると接続を保護できます。
注: セキュリティの観点から、パブリックアクセスが必要でない限り、VPC の外部からの接続を許可しないことをおすすめします。
解決策
DB インスタンスでパブリックアクセスの許可設定を有効にする
Amazon Relational Database Service (Amazon RDS) の**[パブリックアクセス可能]** 設定により、パブリック IP アドレスの DB インスタンスへの割り当てを制御します。この設定を no に設定すると、DB インスタンスにはパブリック IP アドレスが割り当てられません。この設定を yes に設定すると、DB インスタンスにはパブリック IP アドレスとプライベート IP アドレスの両方が割り当てられます。
DB インスタンスの [パブリックアクセス可能] 設定を yes に変更するには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [データベース] を選択し、DB インスタンスを選択します。
- [変更] を選択します。
- [接続] セクションで [その他の構成] を選択し、[パブリックアクセス可能] を選択します。
- [続行] を選択します。
- [スケジュールの変更] セクションでユースケースに最適なオプションを選択します。
注: [すぐに適用] オプションを選択すると、ダウンタイムが発生する可能性があります。詳細については、「スケジュール変更設定を使用する」を参照してください。
- [DB インスタンスの変更] を選択します。
パブリックサブネットで DB インスタンスを実行する
DB インスタンスのパブリックサブネットがインターネットにアクセスできることを確認するには、次の手順を実行します。
- インターネットゲートウェイを作成し、VPC にアタッチします。
- ナビゲーションペインで [サブネット] を選択します。
- DB サブネットグループのすべてのサブネットが、インターネットゲートウェイを持つルートテーブルを使用していることを確認します。
- サブネットが VPC のメインルートテーブルを使用している場合は、インターネットゲートウェイにルート 0.0.0.0/0 を追加します。インターネットゲートウェイへのルートを含むカスタムルートテーブルを作成し,そのルートテーブルをサブネットに関連付けてもかまいません。
- DB インスタンスへの接続元となるソースパブリック IP アドレスを追加するには、セキュリティグループのインバウンドルールを構成します。
[タイプ] で [MySQL/Aurora] または [PostgreSQL] を選択します。
[ソース] で [カスタム] を選択し、CIDR 範囲を手動で入力するか、[マイ IP] を選択し、同じワークステーションから DB インスタンスに接続します。
VPC 外部の接続から DB クラスターを保護する
データ転送はインターネット経由で行われるため、TLS を使用して VPC 外部の接続を暗号化してください。最高レベルのセキュリティを使用していることを保証するには、ssl-ca パラメータを使用して認証局 (CA) 証明書を渡し、ホスト名の検証を有効にしてください。
TLS 接続をテストするには、使用する Aurora のバージョンに応じて次のコマンドを実行します。
Amazon Aurora MySQL 互換エディション 5.6
mysql -h test-aurora-56.cluster-############.us-east-1.rds.amazonaws.com -u test_user --ssl-ca=rds-combined-ca-bundle.pem --ssl-verify-server-cert
注: test-aurora-56.cluster-############.us-east-1.rds.amazonaws.com をクラスターエンドポイントに置き換えてください。test_user を実際のユーザー名に置き換えてください。rds-combined-ca-bundle.pem を CA のパスに置き換えてください。
Amazon Aurora MySQL 互換 5.7 以降
mysql -h test-aurora-57.cluster-############.us-east-1.rds.amazonaws.com -u test_user --ssl-ca=rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY
注: test-aurora-57.cluster-############.us-east-1.rds.amazonaws.com をクラスターエンドポイントに置き換えてください。test_user を実際のユーザー名に置き換えてください。rds-combined-ca-bundle.pem を CA のパスに置き換えてください。
Amazon Aurora PostgreSQL 互換エディション
psql -h test-aurora-pg.cluster-############.us-east-1.rds.amazonaws.com -p 5432 "dbname=postgres user=test_user sslrootcert=rds-combined-ca-bundle.pem sslmode=verify-full"
注: test-aurora-pg.cluster-############.us-east-1.rds.amazonaws.com をクラスターエンドポイントに置き換えてください。5432 をクラスターのポートに置き換えてください。実際のものでそれぞれ、postgres をデータベースユーザー名に、test_user をユーザー名に置き換えてください。rds-combined-ca-bundle.pem を CA のパスに置き換えてください。
DB クラスターに TLS を適用してもかまいません。Aurora MySQL 互換では、データベースユーザーレベルで TLS を設定します。Aurora PostgreSQL 互換では、rds.force_ssl パラメータを 1 に設定します。
関連情報
SSL/TLS を使用して DB クラスターへの接続を暗号化する
SSL/TLS を使用して Aurora PostgreSQL データを保護する
Linux または macOS マシンから、踏み台ホストを使用して Amazon RDS DB インスタンスに接続する方法を教えてください
Amazon RDS コンソールでプライベートとパブリック Aurora エンドポイントを設定する方法を教えてください