

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

# 使用秘密存取 AWS Database Migration Service 端點
<a name="security_iam_secretsmanager"></a>

對於 AWS DMS，*秘密*是一種加密金鑰，您可以使用它來代表一組使用者登入資料，透過*秘密身分驗證*來驗證支援的 AWS DMS 來源或目標端點的資料庫連線。對於也使用 Oracle Automatic Storage Management (ASM) 的 Oracle 端點， AWS DMS 需要代表使用者憑證的額外秘密才能存取 Oracle ASM。

您可以使用安全建立、儲存和擷取登入資料的 服務 AWS Secrets Manager，以存取雲端和內部部署中的應用程式、服務和 IT 資源，來建立秘密，或使用 進行秘密身分驗證 AWS DMS 所需的秘密。這項服務的支援包括無需您操作即可自動定期輪換加密機密值，為您的憑證提供額外的安全性層級。在 中啟用秘密值輪換 AWS Secrets Manager 也可確保此秘密值輪換對依賴秘密的任何資料庫遷移沒有任何影響。若要秘密地驗證端點資料庫連線，請建立身分或 ARN 指派給 `SecretsManagerSecretId` 的機密，並將其包含在端點設定中。若要秘密地驗證 Oracle ASM 為 Oracle 端點的一部分，請建立身分或 ARN 指派給 `SecretsManagerOracleAsmSecretId` 的機密，並將其包含在端點設定中。

**注意**  
您無法使用由 Amazon RDS Aurora 管理的主要憑證。這些登入資料不包含 AWS DMS 需要建立連線的主機或連接埠資訊。作為替代，請建立新的使用者和機密。如需建立使用者和機密的相關資訊，請參閱下列的 [使用 AWS 管理主控台 建立秘密和秘密存取角色](#security_iam_secretsmanager.console)。

如需詳細資訊 AWS Secrets Manager，請參閱*AWS Secrets Manager 《 使用者指南*》中的[什麼是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。

AWS DMS 在支援的來源和目標端點上支援下列內部部署或 AWS受管資料庫的秘密身分驗證：
+ Amazon DocumentDB
+ IBM Db2 LUW
+ Microsoft SQL Server
+ MongoDB
+ MySQL
+ Oracle
+ PostgreSQL
+ Amazon Redshift
+ SAP ASE

若要連線到這些資料庫中的任何一個，您可以選擇輸入下列其中一組值 (但不能同時輸入兩組值) 作為端點設定的一部分：
+ 純文字值，以使用 `UserName`、`Password`、`ServerName` 和 `Port` 設定來驗證資料庫連線。對於同樣使用 Oracle ASM 的 Oracle 端點，請包括其他純文字值，以便使用 `AsmUserName`、`AsmPassword` 和 `AsmServerName` 設定來驗證 ASM。
+ 使用 `SecretsManagerSecretId` 和 `SecretsManagerAccessRoleArn` 設定值的機密驗證。對於使用 Oracle ASM 的 Oracle 端點，請包含 `SecretsManagerOracleAsmSecretId` 和 `SecretsManagerOracleAsmAccessRoleArn` 設定的其他值。這些設定的機密值包括下列項目：
  + `SecretsManagerSecretId` – 您在 AWS Secrets Manager中為端點資料庫存取權所建立機密的完整 Amazon Resource Name (ARN)、部分 ARN 或易記名稱。
  + `SecretsManagerAccessRoleArn` – 您在 IAM 中建立的秘密存取角色 ARN，以代表您提供此`SecretsManagerSecretId`秘密的 AWS DMS 存取權。
  + `SecretsManagerOracleAsmSecretId` – 您在 AWS Secrets Manager中為 Oracle ASM 存取權所建立機密的完整 Amazon Resource Name (ARN)、部分 ARN 或易記名稱。
  + `SecretsManagerOracleAsmAccessRoleArn` – 您在 IAM 中所建立機密存取角色的 ARN，用於代表您將 AWS DMS 存取權提供此 `SecretsManagerOracleAsmSecretId` 機密。
**注意**  
您也可以使用單一秘密存取角色來提供對`SecretsManagerSecretId`秘密和`SecretsManagerOracleAsmSecretId`秘密的 AWS DMS 存取。如果您為這兩個機密建立此單一機密存取角色，請確定將此存取角色的相同 ARN 指派給 `SecretsManagerAccessRoleArn` 和 `SecretsManagerOracleAsmAccessRoleArn`。例如，如果兩個機密的機密存取角色都將其 ARN 指派給變數 `ARN2xsecrets`，您可以按照下列方式設定這些 ARN：  

  ```
  SecretsManagerAccessRoleArn = ARN2xsecrets;
  SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;
  ```

  如需建立這些值的詳細資訊，請參閱：[使用 AWS 管理主控台 建立秘密和秘密存取角色](#security_iam_secretsmanager.console)。

為端點建立並指定所需的機密和機密存取角色端點設定後，請在將要執行 `CreateEndpoint` 或 `ModifyEndpoint` API 要求的使用者帳戶上使用這些機密詳細資料更新許可。確保這些帳戶許可包含秘密存取角色的 `IAM:GetRole` 許可和秘密的 `SecretsManager:DescribeSecret`許可。 AWS DMS 需要這些許可來驗證存取角色及其秘密。

**若要提供和驗證所需的使用者許可**

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

1. 選擇**使用者**，然後選取用於呼叫 `CreateEndpoint` 和 `ModifyEndpoint` API 的**使用者 ID**。

1. 在**許可**索引標籤中，選擇 **\$1\$1 JSON**。

1. 請確定使用者具有以下列出的許可。

   ```
   {
   	"Statement": [{
   			"Effect": "Allow",
   			"Action": [
   				"iam:GetRole",
   				"iam:PassRole"
   			],
   			"Resource": "SECRET_ACCESS_ROLE_ARN"
   		},
   		{
   			"Effect": "Allow",
   			"Action": "secretsmanager:DescribeSecret",
   			"Resource": "SECRET_ARN"
   		}
   	]
   }
   ```

1. 如果使用者沒有這些許可，請新增許可。

1. 如果您是使用 IAM 角色進行 DMS API 呼叫，請針對個別角色重複上述步驟。

1. 開啟終端機，並使用 驗證是否已透過擔任上述使用的角色或使用者正確授予 AWS CLI 許可。

   1. 使用 IAM `get-role` 命令驗證使用者對 SecretAccessRole 的許可。

      ```
      aws iam get-role --role-name ROLE_NAME
      ```

      將 *ROLE\$1NAME* 替換為 `SecretsManagerAccessRole` 的名稱。

      如果命令傳回錯誤訊息，請確定已正確授予權限。

   1. 使用 Secrets Manager `describe-secret` 命令驗證使用者對機密的許可。

      ```
      aws secretsmanager describe-secret --secret-id SECRET_NAME OR SECRET_ARN --region=REGION_NAME
      ```

      使用者可以是易記名稱、部分 ARN 或完整的 ARN。如需詳細資訊，請參閱 [describe-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)。

      如果命令傳回錯誤訊息，請確定已正確授予權限。

## 使用 AWS 管理主控台 建立秘密和秘密存取角色
<a name="security_iam_secretsmanager.console"></a>

您可以使用 來 AWS 管理主控台 建立端點身分驗證的秘密，以及建立允許 代表您 AWS DMS 存取秘密的政策和角色。

**使用 AWS 管理主控台 AWS DMS 驗證來源和目標端點連線資料庫的 來建立秘密**

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

1. 選擇**儲存新機密**。

1. 在**儲存一個新的機密**頁面的**選取機密類型**下，選擇**其他類型的機密**，接著選擇**純文字**。
**注意**  
從這點開始連線到端點資料庫，這是您唯一需要輸入純文字憑證的位置。

1. 在**純文字**欄位中：
   + 對於您將身分指派給 `SecretsManagerSecretId` 的機密，請輸入下列 JSON 結構。

     ```
     {
       "username": db_username,
       "password": db_user_password,
       "port": db_port_number,
       "host": db_server_name
     }
     ```
**注意**  
這是驗證端點資料庫所需的最低限度 JSON 成員清單。您可以將任何其他 JSON 端點設定以全小寫的形式新增為 JSON 成員。不過， AWS DMS 在端點驗證時會忽略任何其他 JSON 成員。

     其中，`db_username` 是存取資料庫的使用者名稱，`db_user_password` 是資料庫使用者的密碼，`db_port_number` 是存取資料庫的連接埠號碼，而 `db_server_name` 是 Web 上的資料庫服務器名稱 (地址)，如下列範例所示。

     ```
     {
       "username": "admin",
       "password": "some_password",
       "port": "8190",
       "host": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com"
     }
     ```
   + 對於您將身分指派給 `SecretsManagerOracleAsmSecretId` 的機密，請輸入下列 JSON 結構。

     ```
     {
       "asm_user": asm_username,
       "asm_password": asm_user_password,
       "asm_server": asm_server_name
     }
     ```
**注意**  
這是驗證 Oracle 端點 Oracle ASM 所需的最低限度 JSON 成員清單。這也是您能夠根據可用 Oracle ASM 端點設定值指定的完整清單。

     其中，`asm_username` 是存取 Oracle ASM 的名稱，`asm_user_password` 是 Oracle ASM 使用者的密碼，而 `asm_server_name` 是 Web 上的 Oracle ASM 伺服器名稱 (地址)，包括連接埠，如下列範例所示。

     ```
     { 
       "asm_user": "oracle_asm_user", 
       "asm_password": "oracle_asm_password",
       "asm_server": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com:8190/+ASM" 
     }
     ```

1. 選取 AWS KMS 加密金鑰來加密秘密。您可以接受 AWS Secrets Manager 為服務建立的預設加密金鑰，或選取您建立的 AWS KMS 金鑰。

1. 指定要參照此機密的名稱及選用描述。這是您用來作為 `SecretsManagerSecretId` 或 `SecretsManagerOracleAsmSecretId` 值的易記名稱。

1. 如果您想要在秘密中啟用自動輪換，則需要選取或建立具有許可的 AWS Lambda 函數，以輪換秘密的登入資料，如所述。但是，在設定自動輪換以使用 Lambda 函數之前，請確定函數的組態設定會在 `EXCLUDE_CHARACTERS` 環境變數的值中新增以下四個字元。

   ```
   ;.:+{}*&,%\
   ```

   AWS DMS 不允許在用於端點登入資料的密碼中包含這些字元。請設定 Lambda 函數以排除這些字元，以防止 AWS Secrets Manager 在產生輪換密碼值時包含這些字元。在您將自動輪換設定為使用 Lambda 函數之後， 會 AWS Secrets Manager 立即輪換秘密以驗證您的秘密組態。
**注意**  
根據您的資料庫引擎組態不同，資料庫可能無法擷取輪換的認證。在此情況下，您需要手動重新啟動任務以重新整理憑證。

1. 檢閱並存放您的秘密 AWS Secrets Manager。然後，您可以在 中依秘密的易記名稱來查詢每個秘密 AWS Secrets Manager，然後擷取秘密 ARN 作為 的值，`SecretsManagerSecretId`或`SecretsManagerOracleAsmSecretId`視情況而定，以驗證對端點資料庫連線和 Oracle ASM （如果使用的話） 的存取。

**建立秘密存取政策和角色以設定您的 `SecretsManagerAccessRoleArn`或 `SecretsManagerOracleAsmAccessRoleArn`， AWS DMS 允許 AWS Secrets Manager 存取您的適當秘密**

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

1. 選擇**政策**，然後選擇**建立政策**。

1. 選擇 **JSON** 並輸入以下政策以啟用機密的存取和解密。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "secretsmanager:GetSecretValue",
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "kms:Decrypt",
           "kms:DescribeKey"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

   其中，`secret_arn` 是機密的 ARN，您可以視情況取得 `SecretsManagerSecretId` 或 `SecretsManagerOracleAsmSecretId`，而 `kms_key_arn` 是用來加密 AWS KMS 的金鑰 ARN，如下列範例所示。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "secretsmanager:GetSecretValue",
               "Resource": "arn:aws:secretsmanager:us-east-2:123456789012:secret:MySQLTestSecret-qeHamH"
           },
           {
                "Effect": "Allow",
                "Action": [
                           "kms:Decrypt",
                           "kms:DescribeKey"
                         ],
                "Resource": "arn:aws:kms:us-east-2:123456789012:key/761138dc-0542-4e58-947f-4a3a8458d0fd"
           }
        ]
   }
   ```

------
**注意**  
如果您使用 建立的預設加密金鑰 AWS Secrets Manager，則不需要指定 的 AWS KMS 許可`kms_key_arn`。  
如果您希望政策提供對這兩個機密的存取權，只需為另一個 *secret\$1arn* 指定額外的 JSON 資源對象即可。  
如果您的機密位於不同的帳戶中，則 `SecretsManagerAccessRoleArn` 角色需要額外的政策才能驗證跨帳戶機密。對於這類使用案例，請將動作 `secretsmanager:DescribeSecret` 新增至政策。如需設定跨帳戶秘密的詳細資訊，請參閱[不同帳戶中使用者的 AWS Secrets Manager 秘密許可](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples_cross.html)。

1. 檢閱並使用易記名稱建立政策，並視需要提供說明。

1. 選擇**角色**，然後選擇**建立角色**。

1. 選擇 **AWS 服務**作為信任的實體類型。

1. 從服務清單中選擇 **DMS** 作為信任的服務，然後選擇**下一步：許可**。

1. 查詢並附加您在步驟 4 中建立的政策，然後繼續新增任何標籤並檢閱您的角色。此時，請編輯角色的信任關係，以使用您的 AWS DMS 區域服務委託人做為信任的實體。此主體的格式如下。

   ```
   dms.region-name.amazonaws.com
   ```

   其中，*`region-name`* 是區域的名稱，例如 `us-east-1`。因此，此區域的 AWS DMS 區域服務主體如下。

   ```
   dms.us-east-1.amazonaws.com
   ```

1. 編輯角色的受信任實體之後，請使用易記名稱和選用說明建立角色。您現在可以透過 IAM 中的易記名稱查詢新角色，然後擷取角色 ARN 作為 `SecretsManagerAccessRoleArn` 或 `SecretsManagerOracleAsmAccessRoleArn` 值以驗證端點資料庫連線。

**若要使用 Secrets Manager 搭配私有子網路中的複寫執行個體**

1. 建立 Secrets Manager VPC 端點，並記下端點的 DNS。如需建立 Secrets Manager VPC 端點的詳細資訊，請參閱《*AWS Secrets Manager 使用指南*》中的「[透過 VPC 端點連線至 Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint)[]()」。

1. 對於 VPC 端點安全群組輸入規則，允許來自複寫執行個體私有 IP 地址或連接到複寫執行個體之安全群組的 HTTPS 流量。

1. 針對複寫執行個體安全群組輸出規則，允許目的地 `0.0.0.0/0` 的所有流量。

1. 設定端點額外連線屬性 `secretsManagerEndpointOverride=secretsManager endpoint DNS` 以提供 Secret Manager VPC 端點 DNS，如下列範例所示。

   ```
   secretsManagerEndpointOverride=vpce-1234a5678b9012c-12345678.secretsmanager.eu-west-1.vpce.amazonaws.com
   ```