本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對於 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 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 Management Console 建立秘密和秘密存取角色。
-
為端點建立並指定所需的機密和機密存取角色端點設定後,請在將要執行 CreateEndpoint
或 ModifyEndpoint
API 要求的使用者帳戶上使用這些機密詳細資料更新許可。確保這些帳戶許可包含秘密存取角色的IAM:GetRole
許可和秘密的SecretsManager:DescribeSecret
許可。 AWS DMS 需要這些許可來驗證存取角色及其秘密。
若要提供和驗證所需的使用者許可
-
登入 AWS Management Console 並在 開啟 AWS Identity and Access Management 主控台https://console.aws.amazon.com/iam/
。 -
選擇使用者,然後選取用於呼叫
CreateEndpoint
和ModifyEndpoint
API 的使用者 ID。 -
在許可索引標籤中,選擇 {} JSON。
-
請確定使用者具有以下列出的許可。
{ "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "
SECRET_ACCESS_ROLE_ARN
" }, { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "SECRET_ARN
" } ] } -
如果使用者沒有這些許可,請新增許可。
-
如果您是使用 IAM 角色進行 DMS API 呼叫,請針對個別角色重複上述步驟。
-
開啟終端機,並使用 AWS CLI 來驗證是否已透過擔任上述角色或使用者正確授予許可。
-
使用 IAM
get-role
命令驗證使用者對 SecretAccessRole 的許可。aws iam get-role --role-name
ROLE_NAME
將
ROLE_NAME
替換為SecretsManagerAccessRole
的名稱。如果命令傳回錯誤訊息,請確定已正確授予權限。
-
使用 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 可用來驗證來源和目標端點連線的資料庫
-
登入 AWS Management Console 並在 開啟 AWS Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/
。 -
選擇儲存新機密。
-
在儲存一個新的機密頁面的選取機密類型下,選擇其他類型的機密,接著選擇純文字。
注意
從這點開始連線到端點資料庫,這是您唯一需要輸入純文字憑證的位置。
-
在純文字欄位中:
-
對於您將身分指派給
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
是 Web 上的資料庫服務器名稱 (地址),如下列範例所示。db_server_name
{ "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 端點設定值指定的完整清單。
其中,
是存取 Oracle ASM 的名稱,asm_username
是 Oracle ASM 使用者的密碼,而asm_user_password
是 Web 上的 Oracle ASM 伺服器名稱 (地址),包括連接埠,如下列範例所示。asm_server_name
{ "asm_user": "oracle_asm_user", "asm_password": "oracle_asm_password", "asm_server": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com:8190/+ASM" }
-
-
選取 AWS KMS 加密金鑰來加密秘密。您可以接受 AWS Secrets Manager 為服務建立的預設加密金鑰,或選取您建立的 AWS KMS 金鑰。
-
指定要參照此機密的名稱及選用描述。這是您用來作為
SecretsManagerSecretId
或SecretsManagerOracleAsmSecretId
值的易記名稱。 -
如果您想要在秘密中啟用自動輪換,則需要選取或建立具有許可的 AWS Lambda 函數,以輪換秘密的登入資料,如所述。但是,在設定自動輪換以使用 Lambda 函數之前,請確定函數的組態設定會在
EXCLUDE_CHARACTERS
環境變數的值中新增以下四個字元。;.:+{}
AWS DMS 不允許在用於端點登入資料的密碼中包含這些字元。請設定 Lambda 函數以排除這些字元,以防止 AWS Secrets Manager 在產生輪換密碼值時包含這些字元。在您將自動輪換設定為使用 Lambda 函數後, AWS Secrets Manager 會立即輪換秘密以驗證您的秘密組態。
注意
根據您的資料庫引擎組態不同,資料庫可能無法擷取輪換的認證。在此情況下,您需要手動重新啟動任務以重新整理憑證。
-
檢閱並存放您的秘密 AWS Secrets Manager。然後,您可以依其易記名稱在 中查詢每個秘密 AWS Secrets Manager,然後擷取秘密 ARN 做為 的值,
SecretsManagerSecretId
或SecretsManagerOracleAsmSecretId
視需要驗證對端點資料庫連線和 Oracle ASM (如果使用的話) 的存取。
建立秘密存取政策和角色以設定您的 SecretsManagerAccessRoleArn
或 SecretsManagerOracleAsmAccessRoleArn
,以允許 AWS DMSAWS Secrets Manager 存取您的適當秘密
-
登入 AWS Management Console ,並在 https://console.aws.amazon.com/iam/
:// 開啟 AWS Identity and Access Management (IAM) 主控台。 -
選擇政策,然後選擇建立政策。
-
選擇 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
, } ] }其中,
是機密的 ARN,您可以視情況取得secret_arn
SecretsManagerSecretId
或SecretsManagerOracleAsmSecretId
,而
是用來加密 AWS KMS 的金鑰 ARN,如下列範例所示。kms_key_arn
{ "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_arn
指定額外的 JSON 資源對象即可。如果您的機密位於不同的帳戶中,則
SecretsManagerAccessRoleArn
角色需要額外的政策才能驗證跨帳戶機密。對於這類使用案例,請將動作secretsmanager:DescribeSecret
新增至政策。如需設定跨帳戶秘密的詳細資訊,請參閱不同帳戶中使用者的 AWS Secrets Manager 秘密許可。 -
檢閱並使用易記名稱建立政策,並視需要提供說明。
-
選擇角色,然後選擇建立角色。
-
選擇 AWS 服務作為信任的實體類型。
-
從服務清單中選擇 DMS 作為信任的服務,然後選擇下一步:許可。
-
查詢並附加您在步驟 4 中建立的政策,然後繼續新增任何標籤並檢閱您的角色。此時,請編輯角色的信任關係,以使用您的 AWS DMS 區域服務委託人做為信任的實體。此主體的格式如下。
dms.
region-name
.amazonaws.com其中,
是區域的名稱,例如region-name
us-east-1
。因此,此區域的 AWS DMS 區域服務主體如下。dms.us-east-1.amazonaws.com
-
編輯角色的受信任實體之後,請使用易記名稱和選用說明建立角色。您現在可以透過 IAM 中的易記名稱查詢新角色,然後擷取角色 ARN 作為
SecretsManagerAccessRoleArn
或SecretsManagerOracleAsmAccessRoleArn
值以驗證端點資料庫連線。
若要使用 Secrets Manager 搭配私有子網路中的複寫執行個體
-
建立 Secrets Manager VPC 端點,並記下端點的 DNS。如需建立 Secrets Manager VPC 端點的詳細資訊,請參閱《AWS Secrets Manager 使用指南》中的「透過 VPC 端點連線至 Secrets Manager」。
-
將複寫執行個體安全群組連接至密碼管理員 VPC 端點。
-
針對複寫執行個體安全群組輸出規則,允許目的地
0.0.0.0/0
的所有流量。 -
設定端點額外連線屬性
secretsManagerEndpointOverride=
以提供 Secret Manager VPC 端點 DNS,如下列範例所示。secretsManager endpoint DNS
secretsManagerEndpointOverride=vpce-1234a5678b9012c-12345678.secretsmanager.eu-west-1.vpce.amazonaws.com