RDS Proxy 入門 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

RDS Proxy 入門

在以下各節中,您可以找到如何設定和管理 RDS 代理伺服器。您也可以找到如何設定相關的安全選項。這些選項可控制誰可以存取每個 Proxy,以及每個 Proxy 連線到資料庫執行個體的方式。

設定網路先決條件

使用 RDS 代理時,您必須在 RDS 資料庫執行個 代理之間擁有一個通用的虛擬私有雲端 (VPC)。此 VPC 應至少有兩個位於不同可用區域的子網路。您的帳戶可以擁有這些子網路,或與其他帳戶共用。如需 VPC 共用的詳細資訊,請參閱使用共用 VPC

您的用戶端應用程式資源 (例如 Amazon EC2、Lambda 或 Amazon ECS) 可以位於與代理相同的 VPC 中。或者,它們可以位於與代理不同的 VPC 中。如果您已成功連線到任何 Aurora 資料庫叢集,表示您已擁有所需的網路資源。

取得子網路的相關資訊

如果您剛開始使用 Aurora,可以按照設定您的 Amazon Aurora 環境. 您也可以按照 Amazon Aurora 入門 中的教學課程進行操作。

若要建立 Proxy,您必須提供代理伺服器在其中運作的子網路和 VPC。下列 Linux 範例顯示用於檢查您擁有的 VPC 和子網路的 AWS CLI 命令。 AWS 帳戶特別是,當您使用 CLI 建立代理時,您會傳遞子網路 ID 做為參數。

aws ec2 describe-vpcs aws ec2 describe-internet-gateways aws ec2 describe-subnets --query '*[].[VpcId,SubnetId]' --output text | sort

下列 Linux 範例顯示用於判斷與特定 叢集對應之子網路 ID 的 AWS CLI 命令。

對於 Aurora 叢集,首先您會找到其中一個相關資料庫執行個體的 ID。您可以擷取該資料庫執行個體使用的子網路 ID。若要這樣做,請在資料庫執行個體描述輸出中檢查 DBSubnetGroupSubnets 屬性內的巢狀欄位。設定該資料庫伺服器的代理時,您可以指定部分或全部的子網路 ID。

$ # Find the ID of any DB instance in the cluster. $ aws rds describe-db-clusters --db-cluster-identifier my_cluster_id --query '*[].[DBClusterMembers]|[0]|[0][*].DBInstanceIdentifier' --output text
my_instance_id instance_id_2 instance_id_3

在找到資料庫執行個體識別符之後,請檢查相關聯的 VPC 來尋找其子網路。下面的 Linux 範例會顯示作法。

$ #From the DB instance, trace through the DBSubnetGroup and Subnets to find the subnet IDs. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0]|[Subnets]|[0]|[*].SubnetIdentifier' --output text
subnet_id_1 subnet_id_2 subnet_id_3 ...
$ #From the DB instance, find the VPC. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0].VpcId' --output text
my_vpc_id
$ aws ec2 describe-subnets --filters Name=vpc-id,Values=my_vpc_id --query '*[].[SubnetId]' --output text
subnet_id_1 subnet_id_2 subnet_id_3 subnet_id_4 subnet_id_5 subnet_id_6

規劃 IP 地址容量

RDS Proxy 會根據註冊的資料庫執行個體大小和數目,視需要自動調整其容量。某些作業可能還需要額外的 Proxy 容量,例如增加已註冊資料庫的大小或內部 RDS Proxy 維護作業。在這些操作期間,您的代理可能需要更多的 IP 地址來佈建額外的容量。這些額外的位址可讓您的代理擴展,而不會影響您的工作負載。子網路中若少了可用的 IP 地址會阻止代理縱向擴展。這可能會導致更高的查詢延遲或用戶端連線失敗。當您的子網路中沒有足夠的可用 IP 地址時,RDS 會透過事件 RDS-EVENT-0243 通知您。如需此金鑰的相關資訊,請參閱 使用 RDS Proxy 事件

以下是根據資料庫執行個體類別大小,建議在子網路中為 Proxy 保留免費的 IP 位址下限。

DB instance class (資料庫執行個體類別) 可用 IP 地址數目下限

db.*.xlarge 或更小

10

db.*.24xlarge

15

db.*.24xlarge

25

db.*.24xlarge

45

db.*.24xlarge

60

db.*.24xlarge

75

db.*.24xlarge

110

這些建議的 IP 位址數目是僅具有預設端點的 Proxy 預估值。具有其他端點或僅供讀取複本的代理可能需要更多可用的 IP 地址。對於每個額外的端點,建議您多保留三個 IP 地址。對於每個僅供讀取複本,建議您根據該僅供讀取複本的大小,保留資料表中指定的額外 IP 地址。

注意

RDS 代理伺服器在 VPC 擬私人雲端中不支援超過 215 個 IP 位址。

例如,假設您想要預估與 Aurora 資料庫叢集相關聯之代理所需的 IP 地址數目。

在此情況下,請採取下列操作:

  • 您的 Aurora 資料庫叢集有 1 個大小為 db.r5.8xlarge 的寫入器執行個體,以及 1 個大小為 db.r5.2xlarge 的讀取器執行個體。

  • 附加到此資料庫叢集的代理具有預設端點和 1 個具有唯讀角色的自訂端點。

在此情況下,代理大約需要 63 個可用 IP 地址 (45 個用於寫入器執行個體,15 個用於讀取器執行個體,3 個用於額外的自訂端點)。

設定資料庫認證 AWS Secrets Manager

對於您建立的每個代理,您必須先使用 Secrets Manager 服務來儲存使用者名稱和密碼登入資料集。您可以為代理伺服器在 Aurora 資料庫叢集上連線的每個資料庫使用者帳戶建立個別的 Secret Manager 密碼。

在 Secrets Manager 主控台中,您可以使用usernamepassword欄位的值來建立這些密碼。這樣做可讓代理連線至與代理關聯之 Aurora 資料庫叢集上的對應資料庫使用者。若要這樣做,您可以使用其他資料庫的登入資料RDS 資料庫的登入資料其他類型的秘密等設定。在 [使用者名稱] 和 [密碼] 欄位中填入適當的值,以及任何其他必要欄位的值。如果秘密中有 Host (主機)Port (連接埠) 等其他欄位,代理會忽略這些欄位。這些詳細資訊由代理自動提供。

您也可以選擇 Other type of secrets (其他類型的秘密)。在此情況下,您可以使用名為 usernamepassword 的金鑰來建立秘密。

若要以特定資料庫使用者身分透過 Proxy 連線,請確定與密碼相關聯的密碼與該使用者的資料庫密碼相符。如果不相符,您可以在 Secrets Manager 中更新相關聯的私密。在這種情況下,您仍可連線至私密登入資料和資料庫密碼確實相符的其他帳戶。

當您透過 AWS CLI 或 RDS API 建立代理伺服器時,您可以指定對應密碼的 Amazon 資源名稱 (ARN)。您可以針對代理可以存取的所有資料庫使用者帳戶執行此操作。在中 AWS Management Console,您可以依其描述性名稱來選擇密碼。

如需有關在 Secrets Manager 中建立秘密的指示,請參閱 Secrets Manager 文件中的建立秘密頁面。請使用下列技術其中之一:

  • 在主控台中使用 Secrets Manager

  • 若要使用 CLI 建立 Secrets Manager 秘密以搭配 RDS Proxy 使用,請使用如下所示的命令。

    aws secretsmanager create-secret --name "secret_name" --description "secret_description" --region region_name --secret-string '{"username":"db_user","password":"db_user_password"}'
  • 您也可以建立自訂金鑰來加密 Secrets Manager 密碼。下列命令會建立範例金鑰。

    PREFIX=my_identifier aws kms create-key --description "$PREFIX-test-key" --policy '{ "Id":"$PREFIX-kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam:account_id::role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] }'

例如,下列命令會為兩個資料庫使用者建立 Secret Manager 密碼:

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

若要建立使用自訂 AWS KMS 金鑰加密的這些密碼,請使用下列指令:

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}' --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id

若要查看您 AWS 帳戶所擁有的密碼,請使用如下指令。

aws secretsmanager list-secrets

當您使用 CLI 建立代理時,您會將一個或多個秘密的 Amazon Resource Names (ARN) 傳遞給 --auth 參數。下面的 Linux 示例演示了如何準備報告,只使用您的 AWS 帳戶擁有的每個密鑰的名稱和 ARN。此範例使用 --output table 版本 2 中可用的 AWS CLI 參數。如果您使用的是 AWS CLI 版本 1,請--output text改用。

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

若要確認您是否在祕密中以正確的格式儲存了正確的登入資料,請使用下列命令。將簡短名稱或秘密的 ARN 替換為 your_secret_name

aws secretsmanager get-secret-value --secret-id your_secret_name

輸出應該包含一行,顯示如下所示的 JSON 編碼值。

"SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}",

設定 AWS Identity and Access Management (IAM) 政策

在 Secrets Manager 中建立秘密後,您建立可存取這些秘密的 IAM 政策。如需使用 IAM 的一般資訊,請參閱 Amazon Aurora 的 Identity and access management

提示

如果您使用的是 IAM 主控台,則適用下列程序。如果您使用 AWS Management Console 適用於 RDS,RDS 可以自動為您建立 IAM 政策。在這種情況下,您可以略過下列程序。

如何建立可存取 Secrets Manager 私密以與代理搭配使用的 IAM 政策
  1. 登入 IAM 主控台。遵循建立角色程序,如建立 IAM 角色,選擇建立角色以將權限委派給 AWS 服務中所述。

    對於信任的實體類型,選擇 AWS 服務。在使用案例下,從其他 AWS 服務的使用案例下拉式清單中選取 RDS。選取RDS - 將角色新增至資料庫

  2. 對於新角色,請執行新增內嵌政策步驟。使用與編輯 IAM 政策中所述的相同一般程序。將下列 JSON 貼入 JSON 文字方塊中。替換為您自己的帳戶 ID。將您的 AWS 地區替換為us-east-2。以 Amazon Resource Names (ARNs) 替代您建立的秘密,請參閱在 IAM 政策陳述式中指定 KMS 金鑰。對於kms:Decrypt動作,請替換預設值的 ARN AWS KMS key 或您自己的 KMS 金鑰。您使用哪一個取決於您已使用哪一個加密 Secrets Manager 秘密。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. 編輯此 IAM 角色的信任政策。將下列 JSON 貼入 JSON 文字方塊中。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

下列命令透過 AWS CLI執行相同的操作。

PREFIX=my_identifier USER_ARN=$(aws sts get-caller-identity --query "Arn" --output text) aws iam create-role --role-name my_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' ROLE_ARN=arn:aws:iam::account_id:role/my_role_name aws iam put-role-policy --role-name my_role_name \ --policy-name $PREFIX-secret-reader-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }

建立 RDS Proxy

若要管理資料庫叢集的連線,請建立 Proxy。您可以將代理關聯至 Aurora MySQL 資料庫執行個體或 Aurora PostgreSQL 資料庫執行個體叢集。

若要建立代理
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

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

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

  4. 選擇代理的所有設定。

    針對代理組態,提供下列項目的資訊:

    • Engine family (引擎系列)。這個設定會決定在解譯往返資料庫的網路流量時,代理會辨識哪些資料庫網路通訊協定。對於 Aurora MySQL,請選擇 MariaDB and MySQL (MariaDB 和 MySQL)。對於 Aurora PostgreSQL,請選擇 PostgreSQL

    • 代理識別碼。在您的 AWS 帳戶 ID 和當前 AWS 區域中指定一個唯一的名稱。

    • 閒置用戶端連線逾時。選擇代理伺服器關閉用戶端連線之前可閒置的時段。預設值為 1,800 秒 (30 分鐘)。上一個要求完成後若應用程式未在的指定時間內提交新要求,用戶端連線就會被視為閒置。基礎資料庫連線保持開啟狀態,並傳回至連線集區。因此,它可供新的用戶端連線使用。

      若要讓 Proxy 主動移除過時的連線,請降低閒置的用戶端連線逾時。當工作負載激增時,為了節省建立連接的成本,請增加閒置的客戶端連接超時。」

    針對目標群組組態,提供下列項目的資訊:

    • 資料庫。選擇一個 Aurora 資料庫叢集以透過此代理存取。此清單僅包含具有相容資料庫引擎、引擎版本和其他設定的資料庫執行個體和叢集。如果清單是空的,請建立與 RDS Proxy 相容的新資料庫執行個體或叢集。若要執行此作業,請依照 建立 Amazon Aurora 資料庫叢集 中的程序進行。然後嘗試再次建立代理。

    • 連線集區最大連線數。指定介於 1 到 100 之間的值。此設定代表 RDS Proxy 可用於其連線的 max_connections 值的百分比。如果您只打算在此資料庫執行個體或叢集中使用一個代理,可將此值設定為 100。如需 RDS Proxy 如何使用此設定的詳細資訊,請參閱 MaxConnections百分比

    • 工作階段鎖定篩選條件。(選擇性) 此選項可讓您強制 RDS Proxy 不釘選偵測到的特定類型工作階段狀態。這樣做會規避用戶端連線之間多工處理資料庫連線的預設安全措施。目前,PostgreSQL 不支援此設定。唯一的選擇是EXCLUDE_VARIABLE_SETS

      啟用此設定可能會導致某個連線的工作階段變數影響其他連線。如果您的查詢取決於目前交易之外設定的工作階段變數值,這樣做可能會造成錯誤或正確性問題。請先確認應用程式可安全地在用戶端連線之間共用資料庫連線,再考慮使用此選項。

      以下模式可視為安全:

      • SET 陳述式,其中有效的工作階段變數值沒有變更,也就是工作階段變數沒有變更。

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

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

    • 連線借用逾時。在某些情況下,您可能預期代理有時會使用所有可用的資料庫連線。在這種情況下,您可以指定代理在傳回逾時錯誤之前等待資料庫連線變成可用的時間。您可以指定的期間上限為 5 分鐘。只有在代理開啟的連線數已達上限,而且所有連線都已在使用中時,才會套用此設定。

    • 初始化查詢。(選用) 開啟每個新資料庫連線時,您可為要執行的代理指定一或多個 SQL 陳述式。此設定通常與SET陳述式搭配使用,以確定每個連線都有相同的設定,例如時區和字元集。對於多個陳述式,請使用分號作為分隔符號。您也可以在單一 SET 陳述式中包含多個變數,例如 SET x=1, y=2

    針對 Authentication (身分驗證),請提供下列項目的資訊:

    • IAM 角色。選擇具有存取您先前所選擇 Secrets Manager 私密之許可的 IAM 角色。或者,您可以從建立新的 IAM 角色 AWS Management Console。

    • Secrets Manager 秘密。選擇至少一個包含資料庫使用者認證的 Secret Secrets Manager 碼,這些密碼可讓代理伺服器存取 Aurora 資料庫叢集

    • Client authentication type (用戶端身分驗證類型)。選擇代理從用戶端進行連線所使用的身分驗證類型。您的選擇適用於您將其與此代理建立關聯的所有 Secrets Manager 機密。如果您需要為每個密碼指定不同的用戶端驗證類型,請改用 AWS CLI 或 API 來建立 Proxy。

    • IAM authentication (IAM 身分驗證)。選擇是否要求或不允許連線到代理的連線進行 IAM 身分驗證。您的選擇適用於您將其與此代理建立關聯的所有 Secrets Manager 機密。如果您需要為每個密碼指定不同的 IAM 身份驗證,請改用 AWS CLI 或 API 來建立 Proxy。

    針對連線,提供下列項目的資訊:

    • 需要 Transport Layer Security。如果您希望代理對所有用戶端連線強制執行 TLS/SSL,請選擇此設定。對於代理的加密或未加密連線,代理會在連線到基礎資料庫時使用相同的加密設定。

    • 子網路。此欄位會預先填入與 VPC 關聯的所有子網路。您可以移除此代理不需要的任何子網路。您至少必須保留兩個子網路。

    提供其他連線組態:

    • VPC 安全群組。選擇現有的 VPC 安全群組。或者,您可以從建立新的安全性群組 AWS Management Console。您必須設定輸入規則,以允許應用程式存取 Proxy。您還必須設定輸出規則,以允許來自資料庫目標的流量。

      注意

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

      使用共用 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 值會區分大小寫。

範例

對於LinuxmacOS、或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] \ [--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] ^ [--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:seret/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" } ]
提示

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

注意

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

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

若要為代理伺服器建立正確的關聯,您也可以使用暫存器 d b-proxy-目標指令。指定目標群組類型 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 的目標群組。您可以呼叫函數註冊ProxyTargets Aurora 資料庫叢集與目標群組建立關聯。

檢視 RDS Proxy

在建立一個或多個 RDS 代理後,您可以檢視它們全部。這樣做可讓您檢查其組態詳細資訊,並選擇那些內容需要修改、刪除等。

若要讓資料庫應用程式使用 Proxy,您必須在連接字串中提供 Proxy 端點。

如何檢視代理
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在的右上角 AWS Management Console,選擇您在其中建立 RDS 代理的 AWS 區域。

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

  4. 選擇 RDS 代理名稱,以顯示其詳細資訊。

  5. 在詳細資料頁面上,[目標群組] 區段會顯示代理伺服器與特定 叢集的關聯方式。您可以依照預設目標群組頁面的連結,查看代理與資料庫之間關聯的詳細資訊。此頁面可讓您查看您在建立代理時所指定的設定。其中包括最大連線百分比、連線借用逾時、引擎系列,以及工作階段鎖定篩選條件。

若要使用 CLI 檢視代理,請使用 describe-db-proxies 命令。默認情況下,它顯示您的 AWS 帳戶擁有的所有代理。若要查看單一代理的詳細資料,請使用 --db-proxy-name 參數指定其名稱。

aws rds describe-db-proxies [--db-proxy-name proxy_name]

若要檢視與代理相關聯的其他資訊,請使用下列命令。

aws rds describe-db-proxy-target-groups --db-proxy-name proxy_name aws rds describe-db-proxy-targets --db-proxy-name proxy_name

使用下列命令序列查看與代理關聯的事物的詳細資訊:

  1. 若要取得代理清單,請執行 describe-db-proxies

  2. 若要顯示連線參數 (例如代理可以使用的連線百分比上限),請執行 describe-db-proxy-target-groups --db-proxy-name。使用代理的名稱做為參數值。

  3. 若要查看與傳回的目標群組相關聯的 Aurora 資料庫叢集的詳細資訊,請執行描述- db-Proxy 目標。

若要使用 RDS API 檢視代理,請使用 DescribeDBProxies 操作。它會傳回 DBProxy 資料類型的值。

若要查看 Proxy 連線設定的詳細資訊,請將此傳回值中的代理主機識別碼與描述BedB ProxyTarget 群組作業搭配使用。它返回 DB ProxyTarget 組數據類型的值。

若要查看與代理相關聯的 RDS 執行個體或 Aurora 資料庫叢集,請使用描述 B 作ProxyTargets業。它返回 DB ProxyTarget 數據類型的值。

透過 RDS Proxy 連線至資料庫

您可以透過代理連線到 Aurora 資料庫叢集,或使用 Aurora Serverless v2 的叢集,其方式通常與直接連線到資料庫相同。主要區別在於您是指定代理端點,而不是叢集端點。根據預設,所有代理連線都具有讀取/寫入能力,並使用寫入器執行個體。如果您通常使用讀取器端點進行唯讀連線,則可以為代理建立額外的唯讀端點。您可以採取相同的方式使用該端點。如需詳細資訊,請參閱 代理端點概觀

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

使用下列步驟來使用原生驗證連線到 Proxy:

  1. 尋找代理端點。在中 AWS Management Console,您可以在對應 Proxy 的詳細資料頁面上找到端點。透過 AWS CLI,您可以使用描述-db- 代理伺服器指令。下列範例會顯示作法。

    # 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. 在用戶端應用程式的連接字串中,將端點指定為 host 參數。例如,指定代理端點做為 mysql -h 選項或 psql -h 選項的值。

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

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

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

若要使用 IAM 身分驗證連線至 RDS Proxy,請使用與透過 叢集進行 IAM 驗證相同的一般連線程序。如需使用 IAM 的一般資訊,請參閱 Amazon Aurora 中的安全

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"

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

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

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

  • user

  • database

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

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

對於 PostgreSQL,如果您使用 JDBC,我們建議您執行以下操作以避免固定:

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

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

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