為什麼我無法使用 RDS Proxy 連線至 Amazon RDS 資料庫或 Amazon Aurora 資料庫執行個體?

3 分的閱讀內容
0

我無法透過 Amazon RDS Proxy 連線至 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora 資料庫執行個體。

簡短說明

您可能會因為多種原因而遇到 RDS Proxy 的連線失敗。下列問題是 RDS Proxy 連線失敗的常見原因,即使 RDS Proxy 處於可用狀態也是如此:

  • 在資料庫執行個體或 RDS Proxy 上的安全群組規則會阻止連線。
  • RDS Proxy 只能在虛擬私有雲端 (VPC) 內運作,因此來自私有網路外部的連線會失敗。
  • 資料庫執行個體因為修改或處於無法使用的狀態而不接受連線。
  • 對於原生使用者名稱和密碼模式:您使用了不正確的身分驗證憑證。
  • 對於 AWS Identity and Access Management (IAM) 資料庫身分驗證:與用戶端相關聯的 IAM 使用者或角色未獲得與 RDS Proxy 連線的授權。

解決方法

注意: 如果您將 RDS Proxy 與使用 IAM 身分驗證的 RDS 資料庫執行個體或 Aurora 資料庫叢集搭配使用,則所有使用者都必須驗證其連線。請確定所有透過 Proxy 連線的使用者都會運用使用者名稱和密碼驗證連線。如需有關 RDS Proxy IAM 支援的詳細資訊,請參閱設定 IAM 政策

檢查用戶端可在 VPC 的私有網路內連線到 RDS Proxy

RDS Proxy 只能在 VPC 內使用,而且無法公開存取 (雖然資料庫執行個體可以)。如果您從私有網路外部連線,則連線會逾時。請注意下列在 VPC 內連線的屬性:

  • 如果用戶端來自同一個 VPC,請檢查 RDS Proxy 的安全群組是否允許在預設連接埠上從用戶端進行連線。MySQL 的預設連接埠為 3306,而 PostgreSQL 的預設連接埠為 5432將規則新增至與 VPC 相關聯的安全群組,以允許必要的流量。
  • 如果用戶端來自另一個 VPC,請使用 VPC 對等互連。若要管理來自其他 VPC 的流量,請檢閱安全群組和路由表。
  • 如果您的客戶來自公司網路,請使用 AWS Direct ConnectAWS Site-to-Site VPN 直接連接到 VPC。
  • 如果您的用戶端必須透過公用網際網路連線,請使用 SSH 通道作為中繼主機。這可讓您連線到相同 VPC 內的 RDS Proxy。

檢查 RDS Proxy 是否可與資料庫執行個體連線

若要管理連線集區,RDS Proxy 必須與您的資料庫執行個體建立連線。此連線會使用儲存在 AWS Secrets Manager 中的使用者名稱和密碼。請使用下列最佳實務,確定 RDS Proxy 可以與您的資料庫執行個體連線:

  • 檢查 Secrets Manager 中的憑證是否有效,並且可以連線到資料庫執行個體。
  • 確定資料庫執行個體的安全群組允許來自 RDS Proxy 的流量。若要執行此作業,請先確定資料庫執行個體和 RDS Proxy 的安全群組。

如果 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 RDS instance
Source : Common security group (for self referencing the security group)

如果 RDS Proxy 和資料庫執行個體使用不同的安全群組,請在資料庫執行個體安全群組的傳入規則中提及 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 會啟動連線以管理集區。因此,您必須允許傳出流量以連線至資料庫執行個體。若要執行此作業,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 動作的存取權,才會將密碼加密。您可以從 AWS KMS 主控台取得 Secrets Manager 所使用 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_name區域account_id,與key_id替換為您的相關數值。

  • 如需有關可能阻止 Proxy 連線至資料庫執行個體原因的詳細資訊,請執行 describe-db-proxy-targets 命令。然後,檢閱輸出中的 TargetHealth 結構。如需 RDS Proxy 目標連線運作狀態的詳細資訊,請檢閱狀態原因說明欄位:
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

如需詳細資訊,請參閱驗證 Proxy 的連線

檢查資料庫執行個體目前是否接受連線

檢閱資料庫執行個體目前的狀態,並確認其處於可用狀態。如需有關檢閱資料庫執行個體狀態的詳細資訊,請參閱 Amazon RDSAurora 的資料庫執行個體狀態文件。

檢查IAM 使用者 / 角色是否與具有所需權限的用戶端相關聯

注意: 只有在 RDS Proxy 上啟用 IAM 資料庫身分驗證時,才需要執行此步驟。

用戶端必須產生一個權杖以授權連線請求。若要執行此作業,與此用戶端相關聯的 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 設定共用資料庫連線