為 Amazon RDS 建立代理 - Amazon Relational Database Service

Amazon RDS 建立代理

您可以將代理與 RDS for MariaDB、RDS for Microsoft SQL Server、RDS for MySQL 或 RDS for PostgreSQL 資料庫執行個體建立關聯。

若要建立代理
  1. 登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/rds/ 的 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇 Proxies (代理)。

  3. 選擇Create Proxy (建立代理)

  4. 針對您的代理使用以下設定。

    設定 描述
    引擎系列 在解譯往返資料庫的網路流量時,代理會辨識哪些資料庫網路通訊協定。
    注意

    若要使用 RDS for PostgreSQL,請務必將 postgres 資料庫保留在您的執行個體中。請參閱針對已刪除的 postgres 資料庫進行疑難排解

    代理識別符 AWS 帳戶 ID 和目前 AWS 區域中唯一的名稱。
    閒置用戶端連線逾時

    如果用戶端連線在設定的期間內保持閒置狀態,代理會關閉用戶端連線。根據預設,這是 1,800 秒 (30 分鐘)。完成上一個請求之後若應用程式未在指定時間內提交新請求,連線就會被視為閒置。代理會保持基礎資料庫連線開啟,並將其傳回至連線集區,使其可用於新的用戶端連線。

    若要主動移除過時的連線,請減少閒置用戶端連線逾時。若要將工作負載尖峰期間的連線成本降至最低,請增加逾時。

    資料庫 要透過此代理存取的 RDS 資料庫執行個體。此清單僅包含具有相容資料庫引擎、引擎版本和其他設定的資料庫執行個體和叢集。如果清單是空的,請建立與 RDS Proxy 相容的新資料庫執行個體或叢集。若要執行此作業,請依照 建立 Amazon RDS 資料庫執行個體 中的程序進行。然後,嘗試再次建立代理。
    連線集區最大連線數 介於 1 到 100 之間的值,定義 RDS Proxy 可以使用的 max_connections 限制百分比。如果您只打算在此資料庫執行個體或叢集中使用一個代理,請將此值設定為 100。如需有關 RDS Proxy 如何使用此設定的詳細資訊,請參閱 MaxConnectionsPercent
    工作階段鎖定篩選條件

    防止 RDS Proxy 鎖定某些偵測到的工作階段狀態,這會略過多工連線的預設安全措施。目前,PostgreSQL 不支援此設定,且唯一可用的選項是 EXCLUDE_VARIABLE_SETS。啟用它可能會導致來自一個連線的工作階段變數影響其他連線,如果查詢依賴目前交易外部設定的工作階段變數,則會導致錯誤或正確性問題。只有在確認您的應用程式可以安全地共用資料庫連線之後,才使用此選項。

    以下模式可視為安全:

    • SET 陳述式,其中有效的工作階段變數值沒有變更。換句話說,工作階段變數沒有變更。

    • 您會在同一交易中變更工作階段變數值和執行陳述式。

    如需詳細資訊,請參閱 避免鎖定 RDS Proxy

    連線借用逾時 如果您預期代理使用所有可用的資料庫連線,請設定傳回逾時錯誤之前的等待時間。您最多可以指定五分鐘。只有在代理的連線數已達上限,而且所有連線都已在使用中時,才會套用此設定。
    初始化查詢

    (選用) 新增初始化查詢,或修改目前的查詢。開啟每個新資料庫連線時,您可為要執行的代理指定一或多個 SQL 陳述式。該設定通常與 SET 陳述式搭配使用,確保每個連線都有相同的設定。請確定您新增的查詢有效。若要在單一 SET 陳述式中包含多個變數,請使用逗號分隔符號。例如:

    SET variable1=value1, variable2=value2

    對於多個陳述式,請使用分號作為分隔符號。

    重要

    由於您可以在目標群組組態中存取初始化查詢,因此不受身分驗證或密碼編譯方法的保護。有權檢視或管理代理目標群組組態的任何人都可以檢視初始化查詢。您不應將密碼或長期加密金鑰等敏感資料新增至此選項。

    AWS Identity and Access Management (IAM) 角色

    具有許可可存取 Secrets Manager 秘密的 IAM 角色,代表代理可以使用的資料庫使用者帳戶憑證。或者,您可以從 AWS Management Console 建立新的 IAM 角色。

    Secrets Manager 秘密 至少選擇一個 Secrets Manager 秘密,其中包含允許代理存取 RDS 資料庫執行個體的資料庫使用者憑證。
    用戶端身分驗證類型 代理從用戶端進行連線所使用的身分驗證類型。您的選擇適用於您將其與此代理建立關聯的所有 Secrets Manager 機密。如果您需要針對每個機密指定不同的用戶端身分驗證類型,請改用 AWS CLI 或 API 建立您的代理。
    IAM 身分驗證 是否要求、允許或不允許連線到代理的連線進行 IAM 身分驗證。允許選項僅適用於 RDS for SQL Server 的代理。您的選擇適用於您將其與此代理建立關聯的所有 Secrets Manager 機密。如果您需要針對每個機密指定不同的 IAM 身分驗證,請改用 AWS CLI 或 API 建立您的代理。
    需要 Transport Layer Security

    對所有用戶端連線強制執行 TLS/SSL。代理針對與基礎資料庫的連線使用相同的加密設定,無論用戶端連線是加密或未加密。

    目標連線網路類型

    代理用來連線至目標資料庫的 IP 版本。您可以從以下選項中選擇:

    • IPv4 – 代理會使用 IPv4 位址連線至資料庫。

    • IPv6 – 代理會使用 IPv6 位址連線至資料庫。

    預設值為 IPv4。若要使用 IPv6,您的資料庫必須支援雙堆疊模式。雙堆疊模式不適用於目標連線。

    端點網路類型

    用戶端用來連線至代理的代理端點 IP 版本。您可以從以下選項中選擇:

    • IPv4 – 代理端點僅使用 IPv4 位址。

    • IPv6 – 代理端點僅使用 IPv6 位址。

    • 雙堆疊 – 代理端點支援 IPv4 和 IPv6 位址。

    預設值為 IPv4。若要使用 IPv6 或雙堆疊,您的 VPC 和子網路必須設定為支援選取的網路類型。

    子網路

    此欄位會預先填入與 VPC 關聯的所有子網路。您可以移除代理不需要的任何子網路,但必須至少保留兩個子網路。對於 IPv6 或雙堆疊端點網路類型,請確定選取的子網路支援所選擇的網路類型。

    VPC 安全群組

    選擇現有的 VPC 安全群組,或從 AWS Management Console 建立新的安全群組。設定傳入規則以允許應用程式存取代理和傳出規則,以允許來自資料庫目標的流量。

    注意

    安全群組必須允許從代理至目標資料庫的連線。它會用於從應用程式到代理的輸入,以及從代理到資料庫的輸出。例如,如果您對資料庫和代理使用相同的安全群組,請確定該安全群組內的資源可以互相通訊。

    使用共用 VPC 時,請避免使用 VPC 的預設安全群組,或與另一個帳戶相關聯的預設安全群組。而是選取屬於您帳戶的安全群組。如果沒有,請建立一個安全群組。如需詳細資訊,請參閱使用共用 VPC

    RDS 會在多個可用區域上部署代理,以確保高可用性。若要啟用跨可用區域通訊,代理子網路的網路存取控制清單 (ACL) 必須允許引擎連接埠的輸出,以及允許所有連接埠的輸入。如需網路 ACL 的詳細資訊,請參閱使用網路 ACL 控制到子網路的流量。如果您的代理和目標的網路 ACL 相同,您必須新增 TCP 通訊協定輸入規則,並將其中的來源設定為 VPC CIDR。您還必須新增引擎連接埠專屬的 TCP 通訊協定輸出規則,並將其中的目的地設定為 VPC CIDR。

    啟用增強型記錄

    啟用此設定,以針對代理相容性或效能問題進行疑難排解。啟用時,RDS Proxy 會記錄詳細的效能資訊,以協助您偵錯 SQL 行為或代理連線效能和可擴展性。

    僅啟用此設定進行偵錯,並確保採取適當的安全措施來保護日誌中的敏感資訊。為了將額外負荷降至最低,RDS Proxy 會在啟用後 24 小時自動停用此設定。暫時使用此設定以針對特定問題進行疑難排解。

  5. 選擇Create Proxy (建立代理)

若要使用 AWS CLI 來建立代理,請搭配下列必要參數,叫用 create-db-proxy 命令:

  • --db-proxy-name

  • --engine-family

  • --role-arn

  • --auth

  • --vpc-subnet-ids

--engine-family 值會區分大小寫。

範例

針對 Linux、macOS 或 Unix:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \ --auth ProxyAuthenticationConfig_JSON_string \ --role-arn iam_role \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--endpoint-network-type { IPV4 | IPV6 | DUAL }] \ [--target-connection-network-type { IPV4 | IPV6 }] \ [--tags comma_separated_list]

針對 Windows:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^ --auth ProxyAuthenticationConfig_JSON_string ^ --role-arn iam_role ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--endpoint-network-type { IPV4 | IPV6 | DUAL }] ^ [--target-connection-network-type { IPV4 | IPV6 }] ^ [--tags comma_separated_list]

下列範例是 --auth 選項的 JSON 值。此範例會將不同的用戶端身分驗證類型套用至每個秘密。

[ { "Description": "proxy description 1", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789123:secret/1234abcd-12ab-34cd-56ef-1234567890ab", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_SCRAM_SHA_256" }, { "Description": "proxy description 2", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122223333:secret/1234abcd-12ab-34cd-56ef-1234567890cd", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_MD5" }, { "Description": "proxy description 3", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122221111:secret/1234abcd-12ab-34cd-56ef-1234567890ef", "IAMAuth": "REQUIRED" } ]

--endpoint-network-type 參數會指定用戶端用來連線至代理的代理端點 IP 版本。有效的 值如下:

  • IPV4 – 代理端點僅使用 IPv4 位址 (預設值)。

  • IPV6 – 代理端點僅使用 IPv6 位址。

  • DUAL – 代理端點同時支援 IPv4 和 IPv6 位址。

--target-connection-network-type 參數會指定代理用來連線至目標資料庫的 IP 版本。有效的 值如下:

  • IPV4 – 代理會使用 IPv4 位址連線至資料庫 (預設值)。

  • IPV6 – 代理會使用 IPv6 位址連線至資料庫。

若要使用 IPv6 或雙堆疊端點網路類型,您的 VPC 和子網路必須設定為支援選取的網路類型。若要使用 IPv6 目標連線網路類型,您的資料庫必須支援雙堆疊模式。

提示

如果您還不知道要用於 --vpc-subnet-ids 參數的子網路 ID,請參閱 設定 RDS Proxy 的網路先決條件 以取得如何尋找它們的範例。

注意

安全群組必須允許存取代理連線的目標資料庫。相同的安全群組會用於從應用程式到代理的輸入,以及從代理到資料庫的輸出。例如,假設您將同一個安全群組用於您的資料庫和代理。在這種情況下,請務必指定安全群組中的資源能與同一個安全群組中的其他資源進行通訊。

使用共用 VPC 時,您無法使用 VPC 的預設安全群組,或屬於另一個帳戶的預設安全群組。選擇屬於您帳戶的安全群組。如果沒有,請先建立一個。如需此限制的詳細資訊,請參閱使用共用的 VPC

若要建立代理的正確關聯,您也需要使用 register-db-proxy-targets 命令。指定目標群組類型 default。RDS Proxy 會在您建立每個代理時,自動建立的目標群組。

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances)

若要建立 RDS 代理,請呼叫 Amazon RDS API 操作 CreateDBProxy。您傳遞具有 AuthConfig 資料結構的參數。

RDS Proxy 在您建立每個代理時,自動建立名為 default 的目標群組。您可以呼叫函數 RegisterDBProxyTargets,以將 RDS 資料庫執行個體與目標群組建立關聯。