

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

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

Amazon RDS 中的 RDS Proxy 會使用 AWS Secrets Manager 來安全地存放和管理資料庫登入資料。您可以將代理與包含必要身分驗證詳細資訊的 Secrets Manager 秘密建立關聯，而不是在應用程式中內嵌憑證。您在 Aurora 資料庫叢集上為代理連線的每個資料庫使用者帳戶建立個別的 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}}\"}",
...
```