

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

# 從標準 IAM 身分驗證移至 RDS Proxy end-to-end IAM 身分驗證
<a name="rds-proxy-iam-migration"></a>

 如果您目前使用 RDS Proxy 的標準 IAM 身分驗證，其中用戶端使用 IAM 向代理進行身分驗證，但代理使用秘密連接到資料庫，則可以遷移到用戶端end-to-end代理和proxy-to-database連線都使用 IAM 身分驗證的端對端 IAM 身分驗證。 client-to-proxy 

**移至end-to-end IAM 身分驗證**

1. **更新 RDS Proxy IAM 角色許可**

   建立包含 Secrets Manager 和 許可的已更新代理`rds:db-connect`許可政策：

   ```
   # Create updated proxy permission policy
   cat > updated-proxy-policy.json ≪ EOF
   ```

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "GetSecretsValue",
         "Action": [
           "secretsmanager:GetSecretValue"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-1234f"
         ]
       },
       {
         "Sid": "RdsDBConnect",
         "Action": [
           "rds-db:connect"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:rds-db:us-east-1:123456789012:dbuser:cluster-ABCDEFGHIJKL01234/jane_doe"
         ]
       }
     ]
   }
   ```

   更新代理您的角色政策：

   ```
   aws iam put-role-policy \
               --role-name RDSProxyRole \
               --policy-name UpdatedProxyPermissions \
               --policy-document file://updated-proxy-policy.json
   ```

1. 修改 RDS Proxy 以啟用end-to-end IAM 身分驗證

   ```
   aws rds modify-db-proxy \
     --db-proxy-name my-database-proxy \
     --default-auth-scheme IAM_AUTH \
     --region us-east-1
   ```

   確認 RDS Proxy 狀態為**可用**，並在繼續以確保遷移期間零停機時間`DefaultAuthScheme``IAM_AUTH`之前。

   ```
   aws rds describe-db-proxies --db-proxy-name my-database-proxy --region us-east-1
   ```

   預期的輸出結果：

   ```
   {
     "DBProxies": [
       {
         "DBProxyName": "my-database-proxy",
         "DBProxyArn": "arn:aws:rds:us-east-1:123456789012:db-proxy:prx-0123456789abcdef",
         "Status": "available",
         ...
         "DefaultAuthScheme": "IAM_AUTH"
       }
     ]
   }
   ```

1. 在資料庫上啟用 IAM 身分驗證

   ```
   aws rds modify-db-cluster \
     --db-cluster-identifier my-database-cluster \
     --enable-iam-database-authentication \
     --region us-east-1
   ```

1. 設定資料庫使用者進行 IAM 身分驗證

   對於 RDS for PostgreSQL：

   ```
   GRANT rds_iam TO jane_doe;
   ```

   對於 RDS for MySQL 和 RDS for MariaDB：

   ```
   ALTER USER 'jane_doe' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
   ALTER USER 'jane_doe'@'%' REQUIRE SSL;
   ```

1. 您的用戶端應用程式程式碼不需要變更。連線程序保持不變：

   對於 RDS for PostgreSQL：

   ```
   # Generate authentication token
   export PGPASSWORD=$(aws rds generate-db-auth-token \
     --hostname my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com \
     --port 5432 \
     --username jane_doe \
     --region us-east-1)
   
   # Connect to database through proxy
   psql "host=my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com port=5432 user=jane_doe dbname=postgres password=$PGPASSWORD sslmode=require sslrootcert=us-east-1-bundle.pem"
   ```

   對於 RDS for MySQL 和 RDS for MariaDB：

   ```
   # Generate authentication token
   export MYSQL_PWD=$(aws rds generate-db-auth-token \
     --hostname my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com \
     --port 3306 \
     --username jane_doe \
     --region us-east-1)
   
   # Connect to database through proxy
   mysql -h my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com \
     -P 3306 \
     -u jane_doe \
     --ssl-ca=us-east-1-bundle.pem \
     --enable-cleartext-plugin
   ```