RDS プロキシを使用して Amazon RDS DB または Amazon Aurora DB インスタンスに接続できないのはなぜですか。

最終更新日: 2022 年 2 月 7 日

RDS プロキシを介して Amazon Relational Database Service (Amazon RDS) や Amazon Aurora DB インスタンスに接続できません。データベースに接続できないのはなぜですか?

簡単な説明

RDS プロキシが [利用可能] な状態にあるにもかかわらず、RDS プロキシで接続エラーが発生する理由はいくつかあります。RDS プロキシ接続の失敗の原因には以下があります。

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

解決方法

注:IAM 認証が有効になっている RDS DB インスタンスまたは Aurora DB クラスターで RDS Proxy を使用する場合は、プロキシ経由で接続するすべてのユーザーがユーザー名とパスワードを使用して認証されることを確認してください。RDS プロキシでの IAM サポートの詳細については、「Setting up IAM policies」(IAM ポリシーの設定) を参照してください。

クライアントが VPC のプライベートネットワーク内で RDS プロキシに到達できることを確認する

RDS プロキシは VPC 内でのみ使用でき、パブリックにアクセスすることはできません (DB インスタンスはアクセスできますが)。プライベートネットワークの外部から接続すると、接続がタイムアウトします。

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

RDS プロキシが DB インスタンスに接続できることを確認する

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

  • Secret Manager の認証情報が有効で、DB インスタンスに接続できることを確認します。
  • DB インスタンスのセキュリティグループで RDS プロキシからのトラフィックが許可されていることを確認します。
    • RDS プロキシと DB インスタンスのセキュリティグループが異なる場合は、DB インスタンスのセキュリティグループのインバウンドルールに RDS プロキシのセキュリティグループを記載できます。
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 プロキシと 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)
  • RDS プロキシは、プールを管理するための接続を開始するため、アウトバウンドトラフィックは DB インスタンスへ到達できるようにする必要があります。セキュリティグループは、アウトバウンドルールで必要なトラフィックを許可する必要があります。
  • Outbound rules for the RDS Proxy in order to allow traffic reach the RDS instance:
    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
  • RDS プロキシに関連付けられた IAM ロールが、接続に必要な認証情報を取得して使用できることを確認します。
    • IAM ロールに rds.amazonaws.com の信頼ポリシーがあることを確認します。
    • IAM ポリシーが、シークレットで secretsmanager:GetSecretValue アクションを呼び出すアクセス権を持っていることを確認します。
    • IAM ポリシーに、秘密の暗号化に使用される AWS Key Management Service (AWS KMS) キーで kms:Decrypt アクションを呼び出すアクセス権があることを確認します。AWS Secrets Manager で使用する KMS キーの詳細は、AWS KMS コンソールから取得できます。リソースセクションには KMS キー ID を使用する必要があることにご注意ください。
    Example Policy:
    
    {
        "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"
                    }
                }
            }
        ]
    }
  • プロキシが DB インスタンスへの接続を停止する原因の詳細については、describe-db-proxy-targets コマンドの出力にある TargetHealth 構造を確認してください。RDS プロキシターゲットの接続状態の詳細については、[状態]、[理由]、[説明] の各フィールドを確認します。
  • aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

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

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

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

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

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

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

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

    詳細については、「IAM データベースアクション用に IAM ポリシーを作成および使用する」を参照してください。

    RDS プロキシログを確認する

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


    この記事はお役に立ちましたか?


    請求に関するサポートまたは技術サポートが必要ですか?