透過 RDS Proxy 連線至資料庫 - Amazon Relational Database Service

透過 RDS Proxy 連線至資料庫

透過代理或藉由連線到資料庫來連線到 RDS 資料庫執行個體,其方式通常是相同的。如需詳細資訊,請參閱 代理端點概觀

使用原生身分驗證連線到代理

使用下列步驟,以使用原生身分驗證連線至代理:

  1. 尋找代理端點。在 AWS Management Console 中,您可以在詳細資訊頁面上找到對應代理的端點。透過 AWS CLI,您可以使用 describe-db-proxies 命令。下列範例會顯示作法。

    # Add --output text to get output as a simple tab-separated list. $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}' [ [ { "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy" }, { "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-other-secret" }, { "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-rds-secret" }, { "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-t3" } ] ]
  2. 在用戶端應用程式的連線字串中指定端點做為主機參數。例如,指定代理端點做為 mysql -h 選項或 psql -h 選項的值。

  3. 請提供和平常一樣的資料庫使用者名稱和密碼。

使用 IAM 身分驗證連線到代理

當您將 IAM 驗證與 RDS Proxy 搭配使用時,請設定您的資料庫使用者,以使用一般使用者名稱和密碼進行驗證。IAM 驗證可讓 RDS Proxy 從 Secrets Manager 擷取使用者名稱和密碼登入資料。從 RDS Proxy 連至底層資料庫的連線不會透過 IAM。

若要使用 IAM 身分驗證連線到 RDS Proxy,請使用相同的一般連線程序,搭配 RDS DB 執行個體進行 IAM 身分驗證。如需使用 IAM 的一般資訊,請參閱 Amazon RDS 中的安全

RDS Proxy 的 IAM 使用方式的主要差異包含下列項目:

  • 您不會使用身分驗證外掛程式設定每個個別資料庫使用者。資料庫使用者在資料庫內仍有一般使用者名稱和密碼。您設定包含這些使用者名稱和密碼的 Secrets Manager 私密,然後授權 RDS Proxy 擷取來自 Secrets Manager 的登入資料。

    IAM 身分驗證會套用到您用戶端程式與代理之間的連線。接著,代理會使用從 Secrets Manager 中擷取的使用者名稱和密碼登入資料,向資料庫進行身分驗證。

  • 您會指定代理端點,而非執行個體、叢集或讀取器端點。如需代理端點的詳細資訊,請參閱使用 IAM 身分驗證連接至資料庫執行個體

  • 在直接資料庫 IAM 身分驗證案例中,您會選擇性地選擇資料庫使用者,並設定他們以便透過特殊身分驗證外掛程式進行識別。接著,您可以使用 IAM 身分驗證連線至這些使用者。

    在 Proxy 使用案例中,您需要提供具有秘密的 Proxy,其包含某些使用者的使用者名稱和密碼 (原生身分驗證)。然後,您可以使用 IAM 身分驗證連線到 Proxy。在這裡,您可以藉由使用 Proxy 端點(不是資料庫端點)產生身分驗證字符來完成此操作。您也可以針對您提供的秘密,使用符合其中一個使用者名稱的使用者名稱。

  • 使用 IAM 身分驗證連接至 Proxy 時,請務必使用 Transport Layer Security (TLS)/Secure Sockets Layer (SSL)。

您可以透過修改 IAM 政策,授與特定使用者對代理的存取權。範例如下。

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

使用 Microsoft SQL Server 連線至代理的考量

如需使用 IAM 身分驗證連線到代理,請不要使用密碼欄位。相反地,您可以在權杖欄位中為每種類型的資料庫驅動程式提供適當的權杖屬性。例如,針對 JDBC 使用 accessToken 屬性,或針對 ODBC 使用 sql_copt_ss_access_token 屬性。或者,針對 .NET SqlClient 驅動程式使用 AccessToken 屬性。您無法使用 IAM 身分驗證,搭配不支援權杖屬性的用戶端。

在某些情況下,代理無法共用資料庫連線,而是將用戶端應用程式到代理的連線鎖定為專用的資料庫連線。如需這些條件的詳細資訊,請參閱 避免鎖定 RDS Proxy

使用 PostgreSQL 連線至代理的考量事項

如果您建立新的 PostgreSQL 資料庫使用者以連線至 RDS Proxy,請確定您授予使用者對於資料庫的 CONNECT 權限。如果沒有此權限,使用者就無法建立連線。如需詳細資訊,請參閱 使用 RDS Proxy 時,將資料庫使用者新增至 PostgreSQL 資料庫

當用戶端開始 PostgreSQL 資料庫的連線時,它會傳送啟動訊息。此訊息包含包含參數名稱和值字串的組合。如需詳細資訊,請參閱 PostgreSQL 文件的 PostgreSQL 訊息格式中的 StartupMessage

透過 RDS 代理連線時,啟動訊息可包含下列目前辨識的參數:

  • user

  • database

啟動訊息也可包含下列其他執行時間參數:

如需 PostgreSQL 傳訊的詳細資訊,請參閱 PostgreSQL 文件中的前端/後端通訊協定

針對 PostgreSQL,如果您使用的是 JDBC,建議採取下列做法以避免鎖定:

  • 將 JDBC 連線參數 assumeMinServerVersion 至少設為 9.0 以避免鎖定。這樣可防止在執行 SET extra_float_digits = 3 時,JDBC 驅動程式在連線啟動期間執行額外的往返。

  • 將 JDBC 連線參數 ApplicationName 設為 any/your-application-name 以避免鎖定。這麼做可防止在執行 SET application_name = "PostgreSQL JDBC Driver" 時,JDBC 驅動程式在連線啟動期間執行額外的往返。請注意,JDBC 參數為 ApplicationName,但 PostgreSQL StartupMessage 參數為 application_name

如需詳細資訊,請參閱 避免鎖定 RDS Proxy。如需如何使用 JDBC 連線的詳細資訊,請參閱 PostgreSQL 文件中的連線至資料庫