

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

# RDS Proxy 入門
<a name="rds-proxy-setup"></a>

使用以下頁面中的資訊來設定和管理 [Amazon RDS Proxy ](rds-proxy.md) 並設定相關的安全性選項。安全性選項會控制誰可以存取每個代理，以及每個代理如何連線至資料庫執行個體。

如果您是初次使用 RDS Proxy，建議您依照我們呈現的順序遵循頁面。

**Topics**
+ [設定 RDS Proxy 的網路先決條件](rds-proxy-network-prereqs.md)
+ [設定 RDS Proxy 的資料庫登入資料](rds-proxy-secrets-arns.md)
+ [設定 RDS Proxy 的 IAM 身分驗證](rds-proxy-iam-setup.md)
+ [為 Amazon RDS 建立代理](rds-proxy-creating.md)
+ [檢視代理](rds-proxy-viewing.md)
+ [透過 RDS Proxy 連線至資料庫](rds-proxy-connecting.md)

# 設定 RDS Proxy 的網路先決條件
<a name="rds-proxy-network-prereqs"></a>

 使用 RDS Proxy 需要您在 RDS 資料庫執行個體與 RDS Proxy 之間擁有通用的虛擬私有雲端 (VPC)。此 VPC 應至少有兩個位於不同可用區域的子網路。您的帳戶可以擁有這些子網路，或與其他帳戶共用。如需 VPC 共用的詳細資訊，請參閱[使用共用 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html)。

對於 IPv6 支援，需要額外的網路組態：
+ **IPv6 端點網路類型** – 您的 VPC 和子網路必須設定為支援 IPv6。這包括將 IPv6 CIDR 區塊指派給您的 VPC 和子網路。
+ **雙堆疊端點網路類型** – 您的 VPC 和子網路必須同時支援 IPv4 和 IPv6 定址。
+ **IPv6 目標連線網路類型** – 資料庫必須設定為雙堆疊模式，以支援來自代理的 IPv6 連線。

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

**Topics**
+ [取得子網路的相關資訊](#rds-proxy-network-prereqs.subnet-info)
+ [規劃 IP 地址容量](#rds-proxy-network-prereqs.plan-ip-address)

## 取得子網路的相關資訊
<a name="rds-proxy-network-prereqs.subnet-info"></a>

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

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

下列 Linux 範例顯示 AWS CLI 命令，以判斷與特定 RDS 資料庫執行個體 對應的子網路 IDs。尋找資料庫執行個體的 VPC ID。檢查 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 地址容量
<a name="rds-proxy-network-prereqs.plan-ip-address"></a>

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

**注意**  
RDS Proxy 不會為 VPC 中的每個代理耗用超過 215 個 IP 地址。

以下是根據資料庫執行個體類別大小，建議在子網路中為您的代理保留可用的 IP 位址數目下限。


|  DB instance class (資料庫執行個體類別)  |  可用 IP 地址數目下限  | 
| --- | --- | 
|  db.\$1.xlarge 或更小   |  10  | 
|  db.\$1.24xlarge   |  15  | 
|  db.\$1.24xlarge   |  25  | 
|  db.\$1.24xlarge   |  45  | 
|  db.\$1.24xlarge   |  60  | 
|  db.\$1.24xlarge   |  75  | 
|  db.\$1.24xlarge   |  110  | 

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

# 設定 RDS Proxy 的資料庫登入資料
<a name="rds-proxy-secrets-arns"></a>

Amazon RDS 中的 RDS Proxy 會使用 AWS Secrets Manager 來安全地存放和管理資料庫登入資料。您可以將代理與包含必要身分驗證詳細資訊的 Secrets Manager 秘密建立關聯，而不是在應用程式中內嵌憑證。您在 RDS 資料庫執行個體上為代理連線的每個資料庫使用者帳戶建立個別的 Secrets Manager 秘密。

或者，您可以將 RDS Proxy 設定為使用end-to-end IAM 身分驗證，這樣就不需要在 Secrets Manager 中存放資料庫登入資料。RDS Proxy 會針對client-to-proxy連線和 proxy-to-database連線使用 IAM 身分驗證。這提供完全整合的 IAM 型身分驗證解決方案，不需要管理秘密或密碼。如需新增 IAM 資料庫使用者的相關資訊，請參閱 [使用 IAM 身分驗證建立資料庫帳戶](UsingWithRDS.IAMDBAuth.DBAccounts.md)。

**Topics**
+ [建立要與 RDS Proxy 搭配使用的秘密](#rds-proxy-secrets-create)

## 建立要與 RDS Proxy 搭配使用的秘密
<a name="rds-proxy-secrets-create"></a>

建立代理之前，您必須先建立至少一個存放資料庫憑證的秘密。

### 主控台
<a name="rds-proxy-secrets-create-console"></a>

**若要建立機密**

1. 請開啟位於 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 的機密管理員控制台。

1. 選擇 **Store a new secret** (存放新機密)。

1. 選擇 **Amazon RDS 資料庫的憑證**。

1. 輸入使用者名稱和密碼。您輸入的憑證必須符合存在於相關聯 RDS 資料庫中資料庫使用者的憑證。RDS Proxy 使用這些憑證來代表應用程式驗證和建立與資料庫的連線。

   如果不相符，您可以更新秘密以符合資料庫密碼。在您更新秘密之前，嘗試使用該秘密透過代理連線會失敗，但使用其他有效秘密的連線仍然可運作。
**注意**  
對於 RDS for SQL Server，RDS Proxy 需要在 Secrets Manager 中設定區分大小寫的秘密，無論資料庫執行個體定序設定為何。如果您的應用程式允許具有不同大小寫的使用者名稱，例如 "Admin" 和 "admin"，您必須為每個使用者名稱建立個別秘密。RDS Proxy 不支援用戶端和代理之間的不區分大小寫使用者名稱身分驗證。  
如需有關 SQL Server 中定序的詳細資訊，請參閱 [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16) 文件。

1. 對於**資料庫**，請選取秘密將會存取的 Amazon RDS 資料庫。

1. 填入秘密的其他設定，然後選擇**儲存**。如需完整指示，請參閱《AWS Secrets Manager 使用者指南》**中的[建立 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

### AWS CLI
<a name="rds-proxy-secrets-create-cli"></a>

當您透過 建立代理時 AWS CLI，您可以指定對應秘密的 Amazon Resource Name (ARNs)。您可以針對代理可以存取的所有資料庫使用者帳戶執行此操作。在 中 AWS 管理主控台，您可以依秘密的描述性名稱來選擇秘密。
+ 若要建立 Secrets Manager 秘密以搭配 RDS Proxy 使用，請使用 [create-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/create-secret.html) 命令：

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

  ```
  aws kms create-key --description "test-key" --policy '{
    "Id":"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":"*"
        }
      ]
  }'
  ```

 例如，下列命令會為兩個資料庫使用者建立 Secrets 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 帳戶擁有的秘密，請使用 [list-secrets](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/list-secrets.html) 命令：

```
aws secretsmanager list-secrets
```

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

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

若要確認秘密包含正確格式的正確憑證，請使用 [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) 命令。將 `your_secret_name` 取代為秘密的簡短名稱或 ARN。

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

輸出包含具有類似下列項目的 JSON 編碼值的行：

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

# 設定 RDS Proxy 的 IAM 身分驗證
<a name="rds-proxy-iam-setup"></a>

若要在 Amazon RDS 中設定 RDS Proxy 的 AWS Identity and Access Management (IAM) 身分驗證，請建立並設定授予必要許可的 IAM 政策。

本主題提供設定 RDS Proxy IAM 身分驗證的步驟，包括建立必要的 IAM 政策並將其連接至 IAM 角色。

**提示**  
只有在您想要建立自己的 IAM 角色時，才需要此程序。否則，RDS 可以在設定代理時自動建立必要的角色，因此您可以略過這些步驟。

## 先決條件
<a name="rds-proxy-iam-setup-prereqs"></a>

設定 RDS Proxy 的 IAM 身分驗證之前，請確定您有下列項目：
+ **AWS Secrets Manager** – 至少有一個存放的秘密，其中包含資料庫憑證。如需如何建立秘密的指示，請參閱 [設定 RDS Proxy 的資料庫登入資料](rds-proxy-secrets-arns.md)。

  如果您使用end-to-end 身分驗證，則不需要這麼做。
+ **IAM 許可** – 具有在 AWS Secrets Manager中建立及管理 IAM 政策、角色和秘密之許可的 IAM 角色或使用者。

## 建立end-to-end IAM 身分驗證的 IAM 政策
<a name="rds-proxy-iam-setup-e2e-steps"></a>

使用end-to-end IAM 身分驗證時，RDS Proxy 會使用 IAM 身分驗證連線至資料庫，而不是從 Secrets Manager 擷取憑證。這需要為要與代理搭配使用的資料庫帳戶設定具有`rds-db:connect`許可的 IAM 角色。

若要使用 IAM 向資料庫驗證 RDS Proxy，請使用授予必要資料庫連線許可的政策來建立 IAM 角色。

### 主控台
<a name="rds-proxy-iam-e2e-console"></a>

**使用代理建立end-to-end IAM 身分驗證的角色**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 建立角色的許可政策。如需一般步驟，請參閱[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

   將此政策貼到 JSON 編輯器，並進行以下變更：。
   + 替換為您自己的帳戶 ID。
   + `us-east-2` 以代理必須所在的 取代 。
   + 將資料庫資源 IDs和使用者名稱替換成您要使用的資料庫資源 ID 和使用者名稱。RDS 執行個體和 之間的資源 ID 格式不同Aurora clusters。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "rds-db:connect",
               "Resource": [
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
               ]
           }
       ]
   }
   ```

1. 建立角色並將許可政策連接至其中。如需一般步驟，請參閱[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

   對於**信任的實體類型**，選擇 **AWS 服務**。在**使用案例**底下，選取 **RDS**，並為使用案例選擇 **RDS - 將角色新增至資料庫**。

1. 對於**許可政策**，選擇您建立的政策。

1. 對於**選取受信任的實體**，輸入角色的下列信任政策：

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

### AWS CLI
<a name="rds-proxy-iam-e2e-cli"></a>

若要使用 建立角色 AWS CLI，請傳送下列請求：

```
aws iam create-role \
  --role-name my_e2e_iam_role_name \

  --assume-role-policy-document '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
```

接著，將政策連接至該角色：

```
aws iam put-role-policy \
  --role-name my_e2e_iam_role_name \
  --policy-name e2e_iam_db_connect_policy \
  --policy-document '{

    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": [
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
            ]
        }
    ]
}'
```

設定end-to-end IAM 身分驗證的 IAM 角色和許可後，您現在可以建立將 `DefaultAuthScheme` 設為 的代理`IAM_AUTH`。此代理會使用 IAM 直接驗證資料庫，而不需要 Secrets Manager 秘密。如需說明，請參閱[為 Amazon RDS 建立代理](rds-proxy-creating.md)。

使用end-to-end IAM 身分驗證時，請確定您的資料庫使用者已設定為 IAM 身分驗證，如中所述[使用 IAM 身分驗證建立資料庫帳戶](UsingWithRDS.IAMDBAuth.DBAccounts.md)。

## 建立 Secrets Manager 存取的 IAM 政策
<a name="rds-proxy-iam-setup-steps"></a>

若要允許 RDS Proxy 從 Secrets Manager 擷取資料庫憑證，請使用可授予必要許可的政策建立 IAM 角色。

## 主控台
<a name="rds-proxy-iam-console"></a>

**建立可存取私密的角色以與代理搭配使用**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 建立角色的許可政策。如需一般步驟，請參閱[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

   將此政策貼到 JSON 編輯器，並進行以下變更：。
   + 替換為您自己的帳戶 ID。
   + 將 `us-east-2` 替代為代理所在的區域。
   + 將秘密名稱替代為您建立的秘密名稱。如需詳細資訊，請參閱[在 IAM 政策陳述式中指定 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/cmks-in-iam-policies.html)。
   + 將 KMS 金鑰 ID 替代為您用來加密 Secrets Manager 秘密的金鑰 ID，可以是預設金鑰或您自己的金鑰。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "secretsmanager:GetSecretValue",
               "Resource": [
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1",
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "kms:Decrypt",
               "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id",
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 建立角色並將許可政策連接至其中。如需一般步驟，請參閱[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

   對於**信任的實體類型**，選擇 **AWS 服務**。在**使用案例**底下，選取 **RDS**，並為使用案例選擇 **RDS - 將角色新增至資料庫**。

1. 對於**許可政策**，選擇您建立的政策。

1. 對於**選取受信任的實體**，輸入角色的下列信任政策：

------
#### [ JSON ]

****  

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

------

## AWS CLI
<a name="rds-proxy-iam-cli"></a>

若要使用 建立角色 AWS CLI，請傳送下列請求：

```
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"}]}'
```

接著，將政策連接至該角色：

```
aws iam put-role-policy \
  --role-name my_role_name \
  --policy-name 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"
                }
            }
        }
    ]
}'
```

設定 IAM 角色和許可後，您現在可以建立代理並將其與此角色建立關聯。這可讓代理從 安全地擷取資料庫憑證， AWS Secrets Manager 並為您的應用程式啟用 IAM 身分驗證。如需說明，請參閱[為 Amazon RDS 建立代理](rds-proxy-creating.md)。

# 為 Amazon RDS 建立代理
<a name="rds-proxy-creating"></a>

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

## 主控台
<a name="rds-proxy-creating.console"></a>

**若要建立代理**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Proxies** (代理)。

1. 選擇**Create Proxy (建立代理)**。

1. 針對您的代理使用以下設定。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/rds-proxy-creating.html)

1.  選擇**Create Proxy (建立代理)**。

## AWS CLI
<a name="rds-proxy-creating.CLI"></a>

 若要使用 建立代理 AWS CLI，請使用下列必要參數呼叫 [create-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-proxy.html) 命令：
+ `--db-proxy-name`
+ `--engine-family`
+ `--role-arn`
+ `--vpc-subnet-ids`

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

**Example**  
對於 Linux、macOS 或 Unix：  

```
aws rds create-db-proxy \
    --db-proxy-name proxy_name \
    --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \
    --role-arn iam_role \
    --vpc-subnet-ids space_separated_list \
    [--default-auth-scheme { NONE | IAM_AUTH }] \
    [--auth ProxyAuthenticationConfig_JSON_string] \
    [--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 } ^
    --role-arn iam_role ^
    --vpc-subnet-ids space_separated_list ^
    [--default-auth-scheme { NONE | IAM_AUTH }] ^
    [--auth ProxyAuthenticationConfig_JSON_string] ^
    [--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 的網路先決條件](rds-proxy-network-prereqs.md) 以取得如何尋找它們的範例。

**注意**  
安全群組必須允許存取代理連線的目標資料庫。相同的安全群組會用於從應用程式到代理的輸入，以及從代理到資料庫的輸出。例如，假設您將同一個安全群組用於您的資料庫和代理。在這種情況下，請務必指定安全群組中的資源能與同一個安全群組中的其他資源進行通訊。  
使用共用 VPC 時，您無法使用 VPC 的預設安全群組，或屬於另一個帳戶的預設安全群組。選擇屬於您帳戶的安全群組。如果沒有，請先建立一個。如需此限制的詳細資訊，請參閱[使用共用的 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html#vpc-share-limitations)。

 若要建立代理的正確關聯，您也需要使用 [register-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/register-db-proxy-targets.html) 命令。指定目標群組類型 `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 API
<a name="rds-proxy-creating.API"></a>

 若要建立 RDS 代理，請呼叫 Amazon RDS API 操作 [CreateDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBProxy.html)。您傳遞具有 [AuthConfig](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AuthConfig.html) 資料結構的參數。

 RDS Proxy 在您建立每個代理時，自動建立名為 `default` 的目標群組。您可以呼叫函數 [RegisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RegisterDBProxyTargets.html)，以將 RDS 資料庫執行個體與目標群組建立關聯。

**重要**  
當您為預設**身分驗證機制選取 IAM** 身分驗證時：  
您必須先在目標資料庫執行個體或叢集上啟用 IAM 資料庫身分驗證，代理才能成功連線。
如果您選擇**建立 IAM 角色**，IAM **身分驗證的資料庫帳戶**欄位為必要欄位。
如果您選取現有的 IAM 角色，主控台不會自動更新具有資料庫連線許可的角色。檢查角色是否具有必要的`rds-db:connect`許可。

# 檢視代理
<a name="rds-proxy-viewing"></a>

 建立一或多個 RDS 代理後，您可以在 AWS 管理主控台、AWS CLI 或 RDS API 中進行檢視和管理。您可以檢閱其組態詳細資訊、監控效能，並判斷哪些代理需要修改或刪除。

若要讓資料庫應用程式透過代理路由流量，您必須在連線字串中指定代理端點。

## 主控台
<a name="rds-proxy-viewing.console"></a>

**在主控台檢視代理**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Proxies** (代理)。

1. 選取代理名稱以檢視其詳細資訊。

1. 在詳細資訊頁面上，**目標群組**區段會顯示代理程式如何連結至特定 RDS 資料庫執行個體。您可以導覽至預設目標群組頁面，以深入了解此關聯，包括在建立代理期間定義的組態設定。這些設定包括最大連線百分比、連線借用逾時、引擎系列，以及工作階段鎖定篩選條件。

## CLI
<a name="rds-proxy-viewing.cli"></a>

 若要使用 CLI 檢視代理，請使用 [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html) 命令。根據預設，要求會傳回您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](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html)。

1.  若要顯示連線參數 (例如代理可以使用的連線百分比上限)，請執行 [describe-db-proxy-target-groups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-target-groups.html) `--db-proxy-name`。使用代理的名稱做為參數值。

1.  若要查看與所傳回目標群組相關聯的 RDS 資料庫執行個體的詳細資訊，請執行 [describe-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-targets.html)。

## RDS API
<a name="rds-proxy-viewing.api"></a>

 若要使用 RDS API 檢視代理，請使用 [DescribeDBProxies](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxies.html) 操作。它會傳回 [DBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxy.html) 資料類型的值。

 若要查看代理的連線設定詳細資訊，請將來自此傳回值的代理識別符與 [DescribeDBProxyTargetGroups](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargetGroups.html) 操作搭配使用。它會傳回 [DBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTargetGroup.html) 資料類型的值。

 若要查看與代理相關聯的 RDS 執行個體或 Aurora 資料庫叢集，請使用 [DescribeDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargets.html) 操作。它會傳回 [DBProxyTarget](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTarget.html) 資料類型的值。

# 透過 RDS Proxy 連線至資料庫
<a name="rds-proxy-connecting"></a>

透過代理或藉由連線到資料庫來連線到 RDS 資料庫執行個體，其方式通常是相同的。如需詳細資訊，請參閱[代理端點概觀](rds-proxy-endpoints.md#rds-proxy-endpoints-overview)。

**Topics**
+ [使用資料庫登入資料連線至資料庫](#rds-proxy-connecting-native)
+ [使用 IAM 身分驗證連線至資料庫](#rds-proxy-connecting-iam)
+ [連線至 Microsoft SQL Server 的考量事項](#rds-proxy-connecting-sqlserver)
+ [連線至 PostgreSQL 的考量事項](#rds-proxy-connecting-postgresql)

## 使用資料庫登入資料連線至資料庫
<a name="rds-proxy-connecting-native"></a>

 使用下列步驟，使用資料庫登入資料連線至代理：

1.  尋找代理端點。在 中 AWS 管理主控台，您可以在對應代理的詳細資訊頁面上找到端點。透過 AWS CLI，您可以使用 [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html) 命令。下列範例會顯示作法。

   ```
   # 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"
           }
       ]
   ]
   ```

1.  在用戶端應用程式的連線字串中指定端點做為主機參數。例如，指定代理端點做為 `mysql -h` 選項或 `psql -h` 選項的值。

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

## 使用 IAM 身分驗證連線至資料庫
<a name="rds-proxy-connecting-iam"></a>

 當您搭配 RDS Proxy 使用 IAM 身分驗證時，有兩個在用戶端和代理之間進行身分驗證的選項：
+ 設定資料庫使用者以使用一般使用者名稱和密碼進行身分驗證。RDS Proxy 會從 Secrets Manager 擷取使用者名稱和密碼登入資料。從 RDS Proxy 連至底層資料庫的連線不會透過 IAM。
+ 您也可以使用end-to-end IAM 身分驗證，使用 IAM 透過代理連線到資料庫，而不需要資料庫登入資料。

 若要使用 IAM 身分驗證連線到 RDS Proxy，請使用相同的一般連線程序，搭配 RDS DB 執行個體進行 IAM 身分驗證。如需使用 IAM 的一般資訊，請參閱 [Amazon RDS 的安全性](UsingWithRDS.md)。如果您使用的是end-to-end IAM 身分驗證，請提供 IAM 身分驗證外掛程式給您的資料庫使用者。請參閱 [使用 IAM 身分驗證建立資料庫帳戶](UsingWithRDS.IAMDBAuth.DBAccounts.md)。

 RDS Proxy 的 IAM 使用方式的主要差異包含下列項目：
+ 使用標準 IAM 身分驗證，資料庫使用者在資料庫中具有一般登入資料。您設定包含這些使用者名稱和密碼的 Secrets Manager 私密，然後授權 RDS Proxy 擷取來自 Secrets Manager 的登入資料。IAM 身分驗證會套用到您用戶端程式與代理之間的連線。接著，代理會使用從 Secrets Manager 中擷取的使用者名稱和密碼登入資料，向資料庫進行身分驗證。
+ 透過end-to-end IAM 身分驗證，您不需要為資料庫登入資料設定 Secrets Manager 秘密。IAM 身分驗證適用於用戶端與代理之間的連線，以及代理與資料庫的連線。
+ 您會指定代理端點，而非執行個體、叢集或讀取器端點。如需代理端點的詳細資訊，請參閱[使用 IAM 身分驗證連接至資料庫執行個體](UsingWithRDS.IAMDBAuth.Connecting.md)。
+ 使用 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"
```

**提示**  
設定 RDS Proxy 連線的 IAM 身分驗證時，請遵循下列重要準則以避免連線問題：  
在維護相同資料庫使用者或`rds_iam`角色的一般密碼身分驗證時，請勿授予角色。
請記住，當用戶端使用 IAM 身分驗證連線至 RDS Proxy 時，RDS Proxy 一律會透過 Secrets Manager 使用密碼身分驗證連線至資料庫。
如果您經常發生連線終止和重新連線，請從使用者或角色移除任何現有的`rds_iam`授予，並僅使用密碼身分驗證。
確保您的密碼政策符合 SCRAM-SHA-256 安全字元要求。
混合相同資料庫使用者的 IAM 和密碼身分驗證方法可能會導致連線不穩定。

## 連線至 Microsoft SQL Server 的考量事項
<a name="rds-proxy-connecting-sqlserver"></a>

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

在某些情況下，代理無法共用資料庫連線，而是將用戶端應用程式到代理的連線鎖定為專用的資料庫連線。如需這些條件的詳細資訊，請參閱 [避免鎖定 RDS Proxy](rds-proxy-pinning.md)。

## 連線至 PostgreSQL 的考量事項
<a name="rds-proxy-connecting-postgresql"></a>

如果您建立新的 PostgreSQL 資料庫使用者以連線至 RDS Proxy，請確定您授予使用者對於資料庫的 `CONNECT` 權限。如果沒有此權限，使用者就無法建立連線。如需詳細資訊，請參閱[使用 RDS Proxy 時，將資料庫使用者新增至 PostgreSQL 資料庫](rds-proxy-new-db-user.md#rds-proxy-new-db-user-pg)。

當用戶端開始 PostgreSQL 資料庫的連線時，它會傳送啟動訊息。此訊息包含包含參數名稱和值字串的組合。如需詳細資訊，請參閱 PostgreSQL 文件的 [PostgreSQL 訊息格式](https://www.postgresql.org/docs/current/protocol-message-formats.html)中的 `StartupMessage`。

透過 RDS 代理連線時，啟動訊息可包含下列目前辨識的參數：
+  `user` 
+  `database`

 啟動訊息也可包含下列其他執行時間參數：
+ `[application\$1name](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME) `
+ `[client\$1encoding](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-CLIENT-ENCODING) `
+ `[DateStyle](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-DATESTYLE) `
+ `[TimeZone](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-TIMEZONE) `
+  `[extra\$1float\$1digits](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-EXTRA-FLOAT-DIGITS) `
+  `[ search\$1path ](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-SEARCH-PATH)` 

 如需 PostgreSQL 傳訊的詳細資訊，請參閱 PostgreSQL 文件中的[前端/後端通訊協定](https://www.postgresql.org/docs/current/protocol.html)。

 針對 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](rds-proxy-pinning.md)。如需如何使用 JDBC 連線的詳細資訊，請參閱 PostgreSQL 文件中的[連線至資料庫](https://jdbc.postgresql.org/documentation/setup/)。