AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 SSL 与 AWS Database Migration Service 配合使用

您可以使用安全套接字层 (SSL) 为源和目标终端节点的连接加密。要执行此操作,可以使用 AWS DMS 管理控制台或 AWS DMS API 将证书分配到终端节点。也可以使用 AWS DMS 控制台来管理证书。

并非所有数据库都以相同的方式使用 SSL。Amazon Aurora 与 MySQL 的兼容性 将服务器名称(集群中的主实例的终端节点)作为 SSL 的终端节点。Amazon Redshift 终端节点已使用 SSL 连接,并且不需要由 AWS DMS 设置 SSL 连接。Oracle 终端节点需要其他步骤;有关更多信息,请参阅 Oracle 终端节点的 SSL 支持

要将证书分配到某个终端节点,您需要提供对部署到终端节点的服务器 SSL 证书进行签名时使用的根证书或者直至根的中间 CA 证书链 (作为证书捆绑包)。只接受 PEM 格式的 X509 文件的证书。在导入证书时,您收到可用于为终端节点指定证书的 Amazon 资源名称 (ARN)。如果使用 Amazon RDS,则可以下载 Amazon RDS 在 https://s3.amazonaws.com.cn/rds-downloads/rds-combined-ca-bundle.pem 提供的根 CA 和证书捆绑包。

您可从多个 SSL 模式中选择用于 SSL 证书验证的模式。

  • none – 不加密连接。该选项不安全,但需要的开销较少。

  • require – 使用 SSL (TLS) 加密连接,但不进行任何 CA 验证。该选项更为安全,但需要的开销较多。

  • verify-ca – 加密连接。该选项更为安全,但需要的开销较多。该选项将验证服务器证书。

  • verify-full – 加密连接。该选项更为安全,但需要的开销较多。该选项验证服务器证书并验证服务器主机名与证书的主机名属性匹配。

并非所有 SSL 模式均适用于所有数据库终端节点。下表显示了各个数据库引擎支持哪些 SSL 模式。

数据库引擎

require

verify-ca

verify-full

MySQL/MariaDB/Amazon Aurora MySQL

默认值 不支持 支持 支持

Microsoft SQL Server

默认值 支持 不支持 支持

PostgreSQL

默认值 支持 支持 支持

Amazon Redshift

默认值 SSL 未启用 SSL 未启用 SSL 未启用

Oracle

默认值 不支持 支持 不支持

SAP ASE

默认值 SSL 未启用 SSL 未启用 支持

MongoDB

默认值 支持 不支持 支持

Db2 LUW

默认值 不支持 支持 不支持

将 SSL 用于 AWS Database Migration Service 的限制

  • 不支持与 Amazon Redshift 目标终端节点的 SSL 连接。AWS DMS 使用 S3 存储桶将数据传输到 Redshift 数据库。此传输默认情况下由 Amazon Redshift 加密。

  • 使用启用了 SSL 的 Oracle 终端节点执行 CDC 任务时,可能会出现 SQL 超时。如果您遇到此问题,其中 CDC 计数器未体现预期的数字,请在任务设置的 ChangeProcessingTuning 部分将 MinimumTransactionSize 参数设置为较低的值,可以从最低值 100 开始。有关 MinimumTransactionSize 参数的更多信息,请参阅更改处理优化设置

  • 证书只能以 .PEM 和 .SSO (Oracle wallet) 格式导入。

  • 如果您的服务器 SSL 证书使用中间 CA 签名,请确保将从中间 CA 直到根 CA 的整个证书链作为单个 .PEM 文件导入。

  • 如果在服务器上使用自签名证书,请选择 require 以作为 SSL 模式。require SSL 模式隐式信任服务器的 SSL 证书,而不会尝试验证证书是否由 CA 签名。

管理证书

您可以使用 DMS 控制台来查看和管理 SSL 证书。您也可以使用 DMS 控制台导入证书。


                         AWS Database Migration Service SSL 证书管理

为 MySQL 兼容、PostgreSQL 或 SQL Server 终端节点启用 SSL

您可以添加指向新创建终端节点或现有终端节点的 SSL 连接。

使用 SSL 创建 AWS DMS 终端节点

  1. 登录到 AWS 管理控制台,然后选择 AWS Database Migration Service。

    注意

    如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关数据库迁移所需权限的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

  2. 在导航窗格中,选择证书

  3. 选择导入证书

  4. 将要用于加密连接的证书上传到终端节点。

    注意

    在创建或修改终端节点时,也可以在 AWS DMS 控制台的 Create database endpoint (创建数据库终端节点) 页上选择 Add new CA certificate (添加新的 CA 证书) 以上传证书。

  5. 步骤 3:指定源和目标终端节点中所述创建终端节点

要修改现有 AWS DMS 终端节点以使用 SSL:

  1. 登录到 AWS 管理控制台,然后选择 AWS Database Migration Service。

    注意

    如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关数据库迁移所需权限的更多信息,请参阅 使用 AWS DMS 所需的 IAM 权限

  2. 在导航窗格中,选择证书

  3. 选择导入证书

  4. 将要用于加密连接的证书上传到终端节点。

    注意

    在创建或修改终端节点时,也可以在 AWS DMS 控制台的 Create database endpoint (创建数据库终端节点) 页上选择 Add new CA certificate (添加新的 CA 证书) 以上传证书。

  5. 在导航窗格中选择终端节点,选择要修改的终端节点,然后选择修改

  6. 选择 SSL 模式

    如果选择 verify-caverify-full 模式,您必须指定要使用的 CA 证书,如下所示。

    
                                     AWS Database Migration Service SSL 证书管理
  7. 选择 Modify

  8. 在修改终端节点后,选择终端节点,然后选择测试连接以确定 SSL 连接是否正常工作。

创建源和目标终端节点之后,创建使用这些终端节点的任务。有关创建任务的更多信息,请参阅步骤 4:创建任务

Oracle 终端节点的 SSL 支持

AWS DMS 中的 Oracle 终端节点支持 noneverify-ca SSL 模式。要将 SSL 用于 Oracle 终端节点,您必须上传终端节点的 Oracle wallet 而不是 .pem 证书文件。

为 Oracle SSL 使用现有证书

要使用现有的 Oracle 客户端安装,从 CA 证书文件创建 Oracle wallet 文件,请执行以下步骤。

在 AWS DMS 中为 Oracle SSL 使用现有 Oracle 客户端安装

  1. 通过运行以下命令,将 ORACLE_HOME 系统变量设置为 dbhome_1 目录的位置:

    prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1
  2. 将 $ORACLE_HOME/lib 附加到 LD_LIBRARY_PATH 系统变量中。

    prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  3. 为 $ORACLE_HOME/ssl_wallet 处的 Oracle wallet 创建一个目录。

    prompt>mkdir $ORACLE_HOME/ssl_wallet
  4. 将 CA 证书的 .pem 文件放入 ssl_wallet 目录中。Amazon RDS 客户可以从 https://s3.amazonaws.com.cn/rds-downloads/rds-ca-2015-root.pem 下载 RDS CA 证书文件。

  5. 运行下列命令以创建 Oracle wallet:

    prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert –cert $ORACLE_HOME/ssl_wallet/ca-cert.pem -auto_login_only

完成前面的步骤之后,您以通过指定 certificate-wallet 参数,使用 ImportCertificate API 来导入 wallet 文件。然后,在创建或修改 Oracle 终端节点时,如果选择 verify-ca 作为 SSL 模式,您可以使用导入的 wallet 证书。

注意

Oracle wallet 是二进制文件。AWS DMS 按原样接受这些文件。

使用适用于 Oracle SSL 的自签名证书

要使用适用于 Oracle SSL 的自签名证书,请执行以下操作。

在 AWS DMS 中使用适用于 Oracle SSL 的自签名证书

  1. 创建一个您将用于处理自签名证书的目录。

    mkdir <SELF_SIGNED_CERT_DIRECTORY>
  2. 转到您在上一步创建的目录中。

    cd <SELF_SIGNED_CERT_DIRECTORY>
  3. 创建根密钥。

    openssl genrsa -out self-rootCA.key 2048
  4. 使用在上一步中创建的根密钥对根证书进行自签名。

    openssl req -x509 -new -nodes -key self-rootCA.key -sha256 -days 1024 -out self-rootCA.pem
  5. 为 Oracle 数据库创建 Oracle wallet 目录。

    mkdir $ORACLE_HOME/self_signed_ssl_wallet
  6. 创建新的 Oracle wallet。

    orapki wallet create -wallet $ORACLE_HOME/self_signed_ssl_wallet -pwd <password> -auto_login_local
  7. 将根证书添加到 Oracle wallet。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -trusted_cert -cert self-rootCA.pem -pwd <password>
  8. 列出 Oracle wallet 的内容。该列表应包含根证书。

    orapki wallet display -wallet $ORACLE_HOME/self_signed_ssl_wallet
  9. 使用 ORAPKI 实用程序生成证书签名请求 (CSR)。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -dn "CN=dms" -keysize 2048 -sign_alg sha256 -pwd <password>
  10. 运行以下命令。

    openssl pkcs12 -in ewallet.p12 -nodes -out nonoracle_wallet.pem
  11. 将“dms”用作公用名。

    openssl req -new -key nonoracle_wallet.pem -out certrequest.csr
  12. 获取证书签名。

    openssl req -noout -text -in self-signed-oracle.csr | grep -i signature
  13. 如果步骤 12 的输出为 sha256WithRSAEncryption,则运行以下代码。

    openssl x509 -req -in self-signed-oracle.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out self-signed-oracle.crt -days 365 -sha256
  14. 如果步骤 12 的输出为 md5WithRSAEncryption,则运行以下代码。

    openssl x509 -req -in certrequest.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out certrequest.crt -days 365 -sha256
  15. 将证书添加到 wallet。

    orapki wallet add -wallet $ORACLE_HOME/self_signed_ssl_wallet -user_cert -cert certrequest.crt -pwd <password>
  16. 配置 sqlnet.ora 文件 ($ORACLE_HOME/network/admin/sqlnet.ora)。

    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = <ORACLE_HOME>/self_signed_ssl_wallet) ) ) SQLNET.AUTHENTICATION_SERVICES = (NONE) SSL_VERSION = 1.0 SSL_CLIENT_AUTHENTICATION = FALSE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
  17. 停止 Oracle 侦听器。

    lsnrctl stop
  18. listener.ora 文件 ($ORACLE_HOME/network/admin/listener.ora) 中添加 SSL 的条目。

    SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = <ORACLE_HOME>/self_signed_ssl_wallet) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = <SID>) (ORACLE_HOME = <ORACLE_HOME>) (SID_NAME = <SID>) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
  19. 配置 tnsnames.ora 文件 ($ORACLE_HOME/network/admin/tnsnames.ora)。

    <SID>= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) ) <SID>_ssl= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) )
  20. 重新启动 Oracle 侦听器。

    lsnrctl start
  21. 显示 Oracle 侦听器状态。

    lsnrctl status
  22. 使用 sqlplus 和 SSL tnsnames 条目测试从本地主机到数据库的 SSL 连接。

    sqlplus -L <ORACLE_USER>@<SID>_ssl
  23. 验证您已使用 SSL 成功连接。

    SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') -------------------------------------------------------------------------------- tcps
  24. 将目录更改为具有自签名证书的目录。

    cd <SELF_SIGNED_CERT_DIRECTORY>
  25. 创建 AWS DMS 将使用的新客户端 Oracle wallet。

    orapki wallet create -wallet ./ -auto_login_only
  26. 将自签名根证书添加到 Oracle wallet。

    orapki wallet add -wallet ./ -trusted_cert -cert rootCA.pem -auto_login_only
  27. 列出 AWS DMS 将使用的 Oracle wallet 的内容。该列表应包含自签名根证书。

    orapki wallet display -wallet ./
  28. 将您刚刚创建的 Oracle wallet 上传到 AWS DMS。