使用機密存取 AWS Database Migration Service 端點 - AWS 資料庫遷移服務

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

使用機密存取 AWS Database Migration Service 端點

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

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

注意

您無法使用 Amazon RDS Aurora 管理的主要憑證。這些憑證不包含主機或連接埠資訊,這些資訊 AWS DMS 需要建立連線。作為替代,請建立新的使用者和機密。如需建立使用者和機密的相關資訊,請參閱下列的 使用 AWS Management Console 建立秘密和秘密存取角色

如需 的詳細資訊 AWS Secrets Manager,請參閱 AWS Secrets Manager 使用者指南 中的什麼是 AWS Secrets Manager?

AWS DMS 在支援的來源和目標端點上支援下列內部部署或受 AWS管資料庫的秘密身分驗證:

  • Amazon DocumentDB

  • IBM Db2 LUW

  • Microsoft SQL 伺服器

  • MongoDB

  • 我的SQL

  • Oracle

  • PostgreSQL

  • Amazon Redshift

  • SAP ASE

若要連線到這些資料庫中的任何一個,您可以選擇輸入下列其中一組值 (但不能同時輸入兩組值) 作為端點設定的一部分:

  • 純文字值,以使用 UserNamePasswordServerNamePort 設定來驗證資料庫連線。對於也使用 Oracle 的 Oracle 端點ASM,請包含其他純文字值,以ASM使用 AsmUserNameAsmPasswordAsmServerName設定進行身分驗證。

  • 使用 SecretsManagerSecretIdSecretsManagerAccessRoleArn 設定值的機密驗證。對於使用 Oracle 的 Oracle 端點ASM, SecretsManagerOracleAsmSecretIdSecretsManagerOracleAsmAccessRoleArn設定包含其他值。這些設定的機密值包括下列項目:

    • SecretsManagerSecretId – 您已為 中的端點資料庫存取建立的秘密的完整 Amazon Resource Name (ARN)ARN、部分 或易記名稱 AWS Secrets Manager。

    • SecretsManagerAccessRoleArn – 您在 中建立ARN的秘密存取角色,IAM以代表您提供此SecretsManagerSecretId秘密的 AWS DMS 存取權。

    • SecretsManagerOracleAsmSecretId – 您在 中為 Oracle ASM存取建立之秘密的完整 Amazon Resource Name (ARN)ARN、部分 或易記名稱 AWS Secrets Manager。

    • SecretsManagerOracleAsmAccessRoleArn – 您在 中建立ARN的秘密存取角色,IAM以代表您提供 AWS DMS 此SecretsManagerOracleAsmSecretId秘密的存取權。

    注意

    您也可以使用單一秘密存取角色來提供對SecretsManagerSecretId秘密和SecretsManagerOracleAsmSecretId秘密的 AWS DMS 存取。如果您為這兩個秘密建立此單一秘密存取角色,請確定將此存取角色ARN的相同指派給 SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn。例如,如果您兩個秘密的秘密存取角色都ARN指派給變數 ,ARN2xsecrets您可以設定這些ARN設定,如下所示:

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

    如需建立這些值的詳細資訊,請參閱:使用 AWS Management Console 建立秘密和秘密存取角色

為端點建立並指定必要的秘密和秘密存取角色端點設定後,請使用這些秘密詳細資訊更新將執行 CreateEndpointModifyEndpointAPI請求的使用者帳戶許可。確保這些帳戶許可包含秘密存取角色的IAM:GetRole許可和秘密的SecretsManager:DescribeSecret許可。 AWS DMS 需要這些許可來驗證存取角色及其秘密。

若要提供和驗證所需的使用者許可
  1. 登入 AWS Management Console 並在 開啟 AWS Identity and Access Management 主控台https://console.aws.amazon.com/iam/

  2. 選擇使用者 ,然後選擇用於撥打 CreateEndpointModifyEndpointAPI呼叫的使用者 ID

  3. 許可索引標籤中,選擇 {} JSON

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

    { "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "SECRET_ACCESS_ROLE_ARN" }, { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "SECRET_ARN" } ] }
  5. 如果使用者沒有這些許可,請新增許可。

  6. 如果您使用IAM角色進行DMSAPI呼叫,請針對個別角色重複上述步驟。

  7. 開啟終端機並使用 AWS CLI ,以假設上述使用的角色或使用者,來驗證是否正確授予許可。

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

      aws iam get-role --role-name ROLE_NAME

      Replace (取代) ROLE_NAME 名稱為 SecretsManagerAccessRole

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

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

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

      使用者可以是易記的名稱、部分名稱ARN或完整名稱ARN。如需詳細資訊,請參閱 describe-secret

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

使用 AWS Management Console 建立秘密和秘密存取角色

您可以使用 AWS Management Console 建立端點身分驗證的秘密,並建立允許 代表您 AWS DMS 存取秘密的政策和角色。

使用 建立秘密 AWS Management Console ,該 AWS DMS 可用來驗證來源和目標端點連線的資料庫
  1. 登入 AWS Management Console 並在 開啟 AWS Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/

  2. 選擇儲存新機密

  3. 儲存一個新的機密頁面的選取機密類型下,選擇其他類型的機密,接著選擇純文字

    注意

    從這點開始連線到端點資料庫,這是您唯一需要輸入純文字憑證的位置。

  4. 純文字欄位中:

    • 對於您指派給 身分的秘密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 }
      注意

      這是ASM為 Oracle 端點驗證 Oracle 所需的JSON成員最低清單。它也是您可以根據可用 Oracle ASM端點設定指定的完整清單。

      這裡asm_username是存取 Oracle 的使用者名稱ASM、asm_user_passwordOracle ASM使用者的密碼,asm_server_name也是網站上的 Oracle ASM 伺服器名稱 (地址),包括連接埠,如下列範例所示。

      { "asm_user": "oracle_asm_user", "asm_password": "oracle_asm_password", "asm_server": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com:8190/+ASM" }
  5. 選取 AWS KMS 加密金鑰來加密秘密。您可以接受 AWS Secrets Manager 為服務建立的預設加密金鑰,或選取您建立的 AWS KMS 金鑰。

  6. 指定要參照此機密的名稱及選用描述。這是您用來作為 SecretsManagerSecretIdSecretsManagerOracleAsmSecretId 值的易記名稱。

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

    ;.:+{}

    AWS DMS 不允許在用於端點憑證的密碼中包含這些字元。請設定 Lambda 函數以排除這些字元,以防止 AWS Secrets Manager 在產生輪換密碼值時包含這些字元。將自動輪換設定為使用 Lambda 函數之後, AWS Secrets Manager 會立即輪換秘密以驗證秘密組態。

    注意

    根據您的資料庫引擎組態不同,資料庫可能無法擷取輪換的認證。在此情況下,您需要手動重新啟動任務以重新整理憑證。

  8. 檢閱並將您的秘密存放在 中 AWS Secrets Manager。然後,您可以依其在 中的易記名稱來查詢每個秘密 AWS Secrets Manager,然後擷取秘密ARN作為 SecretsManagerSecretId 或 的值SecretsManagerOracleAsmSecretId,以驗證對端點資料庫連線和 Oracle ASM(如果使用) 的存取。

建立秘密存取政策和角色,以設定您的 SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn,允許 AWS DMSAWS Secrets Manager 存取您的適當秘密
  1. 登入 AWS Management Console 並在 開啟 AWS Identity and Access Management (IAM) 主控台https://console.aws.amazon.com/iam/

  2. 選擇政策,然後選擇建立政策

  3. 選擇JSON並輸入下列政策,以啟用對秘密的存取和解密。

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

    這裡secret_arn是您的秘密ARN的 ,您可以從 SecretsManagerSecretId或 取得SecretsManagerOracleAsmSecretId,如適用,kms_key_arn也是您用來加密秘密ARN的 AWS KMS 金鑰,如下列範例所示。

    { "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

    如果您想要您的政策提供對這兩個秘密的存取,只需為另一個秘密指定其他JSON資源物件 secret_arn.

    如果您的機密位於不同的帳戶中,則 SecretsManagerAccessRoleArn 角色需要額外的政策才能驗證跨帳戶機密。對於這類使用案例,請將動作 secretsmanager:DescribeSecret 新增至政策。如需設定跨帳戶秘密的詳細資訊,請參閱不同帳戶中使用者的 AWS Secrets Manager 秘密許可

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

  5. 選擇角色,然後選擇建立角色

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

  7. DMS 從服務清單中選擇 做為信任的服務,然後選擇下一步:許可

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

    dms.region-name.amazonaws.com

    在此,region-name 是您區域的名稱,例如 us-east-1。因此,此區域的 AWS DMS 區域服務主體如下。

    dms.us-east-1.amazonaws.com
  9. 編輯角色的受信任實體之後,請使用易記名稱和選用說明建立角色。您現在可以在 中依新角色的易記名稱來查詢新角色IAM,然後將角色擷取ARN為 SecretsManagerAccessRoleArnSecretsManagerOracleAsmAccessRoleArn值,以驗證您的端點資料庫連線。

若要使用 Secrets Manager 搭配私有子網路中的複寫執行個體
  1. 建立秘密管理員VPC端點,並記下端點DNS的 。如需建立秘密管理員VPC端點的詳細資訊,請參閱 秘密管理員使用者指南中的透過VPC端點連線至 Secrets Manager。 AWS

  2. 將複寫執行個體安全群組連接至秘密管理員VPC端點。

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

  4. 設定端點額外連線屬性,secretsManagerEndpointOverride=secretsManager endpoint DNS以提供秘密管理員VPC端點 DNS,如下列範例所示。

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