RDS Proxy を使用して Amazon RDS DB または Amazon Aurora DB インスタンスに接続できないのはなぜですか?

所要時間3分
0

Amazon RDS Proxy を介して Amazon Relational Database Service (Amazon RDS) や Amazon Aurora DB インスタンスに接続できません。

簡単な説明

RDS Proxy との接続障害が発生する理由は複数あります。RDS Proxy が [利用可能] 状態の場合でも、RDS Proxy の接続障害の一般的な原因は次のとおりです。

  • DB インスタンスまたは RDS Proxy のセキュリティグループのルールによって、接続が妨げられている。
  • RDS Proxy は仮想プライベートクラウド (VPC) 内でのみ動作するため、プライベートネットワークの外部からの接続が失敗する。
  • 変更されたか、利用不可状態のため、DB インスタンスが接続を受け付けない。
  • ネイティブユーザー名/パスワードモードの場合: 不正な認証資格情報が使用されている。
  • AWS Identity and Access Management (IAM) DB 認証の場合: クライアントに関連付けられた IAM ユーザーまたはロールが RDS Proxy への接続を許可されていない。

解決策

注: RDS Proxy を IAM 認証を使用する RDS DB インスタンスまたは Aurora DB クラスターで使用する場合、すべてのユーザーが接続を認証する必要があります。プロキシ経由で接続するすべてのユーザーが、ユーザー名とパスワードで接続を認証するようにしてください。RDS Proxy での IAM サポートの詳細については、「AWS Identity and Access Management (IAM) ポリシーの設定」を参照してください。

クライアントが VPC のプライベートネットワーク内の RDS Proxy にアクセスできることを確認する

RDS Proxy は VPC 内でのみ使用でき、パブリックからアクセスすることはできません (ただし、DB インスタンスにはアクセス可能)。プライベートネットワークの外部から接続すると、接続がタイムアウトします。VPC 内で接続する場合は、次の属性に注意してください。

  • クライアントが同じ VPC からのものである場合は、RDS Proxy のセキュリティグループが、クライアントからのデフォルトポートでの接続を許可していることを確認します。デフォルトのポートは、MySQL の場合は 3306、PostgreSQL の場合は 5432 です。VPC に関連付けられたセキュリティグループにルールを追加して、必要なトラフィックを許可します。
  • クライアントが別の VPC から接続する場合は、VPC ピア機能を利用します。他の VPC からのトラフィックを管理するには、セキュリティグループとルートテーブルを確認します。
  • クライアントが企業ネットワークから接続する場合は、AWS Direct Connect または AWS Site-to-Site VPN を使用して VPC に直接接続します。
  • クライアントがパブリックインターネット経由で接続する必要がある場合は、SSH トンネル を中間ホストとして使用します。これにより、同じ VPC 内の RDS Proxy に接続できるようになります。

RDS Proxy が DB インスタンスに接続できることを確認する

RDS プロキシは、接続プールを管理するために、DB インスタンスとの接続を確立する必要があります。この接続では、AWS Secrets Manager に保存されているユーザー名とパスワードが使用されます。以下のベストプラクティスを利用して、RDS Proxy が DB インスタンスに接続できることを確認します。

  • Secrets Manager の認証情報が有効で、DB インスタンスに接続できることを確認します。
  • DB インスタンスのセキュリティグループで RDS Proxy からのトラフィックが許可されていることを確認します。そのためには、まず DB インスタンスのセキュリティグループと RDS Proxy のセキュリティグループを確認します。

RDS Proxy と DB インスタンスが同じセキュリティグループを使用している場合は、セキュリティグループの継承ルールがインバウンドルールであることを確認します。

Inbound rules for the RDS instance in order to allow connections from RDS proxy:
Protocol : TCP
Port Range : Port on which the DB engine is running on the RDS instance
Source : Common security group (for self referencing the security group)

異なるセキュリティグループを使用している場合は、DB インスタンスのセキュリティグループのインバウンドルールに RDS Proxy のセキュリティグループを記載します。

Inbound rules for the RDS instance in order to allow connections from RDS proxy:
Protocol : TCP
Port range : Port on which the DB engine is running on the DB instance
Source : Security group of RDS Proxy

RDS Proxy は、プールを管理するための接続を開始します。これを可能にするため、アウトバウンドトラフィックが DB インスタンスに到達することを許可する必要があります。そのためには、RDS Proxy セキュリティグループは、アウトバウンドルールで必要なトラフィックを許可する必要があります。

Protocol : TCP
Port range : Port on which the DB engine is running on the RDS instance
Destination : Security group of DB instance

Note: If you already have the following outbound rules attached to the security group of the RDS Proxy, then there is no need to explicitly add the security group.
Outbound rules: ALL --- 0.0.0.0/0

IAM ロールには rds.amazonaws.com の信頼ポリシーが必要です。

IAM ポリシーには、シークレットに対する secretsmanager:GetSecretValue アクションを呼び出すためのアクセス権が必要です。

IAM ポリシーには、シークレットを暗号化した AWS Key Management Service (AWS KMS) キーに対する kms:Decrypt アクションを呼び出すためのアクセス権が必要です。Secrets Manager で使用する KMS キーの詳細は、AWS KMS コンソールから取得できます。リソースセクションには KMS キー ID を使用する必要があることに注意します。以下のサンプルポリシーを参照してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": [
        "arn:aws:secretsmanager:region:account_id:secret:secret_name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:region:account_id:key/key_id",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "secretsmanager.region.amazonaws.com"
        }
      }
    }
  ]
}

**注:**account_idsecret_nameregionaccount_idkey_id は必ず関連する値に置き換えてください。

  • プロキシが DB インスタンスに接続できない原因の詳細については、まず describe-db-proxy-targets コマンドを実行します。次に、出力内の TargetHealth 構造を確認します。RDS Proxy ターゲットの接続状態の詳細については [状態][理由][説明] の各フィールドを確認します。
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

詳細については、「プロキシでの接続の検証」を参照してください。

DB インスタンスが現在接続を受け付けていることを確認する

DB インスタンスの現在のステータスを確認し、それが [使用可能] 状態であることを確認します。DB インスタンスのステータスの確認の詳細については、DB インスタンスのステータスに関する Amazon RDSAurora のドキュメントを参照してください。

IAM ユーザー/ロールが、必要なアクセス許可を持つクライアントに関連付けられていることを確認する

注: このステップは、RDS Proxy で IAM DB 認証を有効にしている場合にのみ必要です。

クライアントは、接続リクエストを承認するトークンを生成する必要があります。これを行うには、このクライアントに関連付けられている IAM ユーザーと IAM ロールに rds-db:connect IAM ポリシーが必要です。また、ポリシーの [リソース] 属性には、ARN の RDS Proxy ID を使用してください。

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

詳細については、「IAM データベースアクセス用の IAM ポリシーの作成と使用」を参照してください。

RDS Proxy ログを確認する

RDS Proxy の拡張されたログ記録機能を有効にします。ログ記録により、SQL ステートメントに関する詳細情報が得られます。これらのログは、認証の特定の問題を理解するのに役立つリソースです。ログ記録を使用すると、パフォーマンスのオーバーヘッドが増えるため、デバッグ時のみ有効にするのがベストプラクティスです。オーバーヘッドを最小限に抑えるため、RDS Proxy はこの設定を有効にしてから 24 時間後に、自動的に無効にします。

関連情報

Amazon RDS Proxy の使用

共有データベース接続のセットアップ (Amazon RDS Proxy 使用)

コメントはありません