在 Amazon Database Migration Service 中使用 Kerberos 身份验证
从 DMS v3.5.3 开始,您可以将 Oracle 或 SQL Server 源端点配置为使用 Kerberos 身份验证连接到数据库实例。DMS 支持 Amazon Directory Service for Microsoft Active Directory 和 Kerberos 身份验证。有关对 Microsoft Active Directory Services 的 Amazon 托管访问权限的更多信息,请参阅什么是Amazon Directory Service?。
Amazon DMS Kerberos 身份验证架构概述
下图提供了 Amazon DMS Kerberos 身份验证工作流程的简要概述。
在 Amazon DMS 中使用 Kerberos 身份验证的限制
在 Amazon DMS 中使用 Kerberos 身份验证时,以下限制适用:
DMS 复制实例支持一个 Kerberos
krb5.conf文件和一个密钥缓存文件。您必须在票证到期前至少 30 分钟更新 Secrets Manager 中的 Kerberos 密钥缓存文件。
启用 Kerberos 的 DMS 端点仅适用于启用了 Kerberos 的 DMS 复制实例。
先决条件
开始之前,您必须在现有 Active Directory 或通过 Kerberos 进行身份验证的主机中满足以下先决条件:
与您的本地 AD 建立 Active Directory 信任关系。有关更多信息,请参阅教程:在 Amazon 托管的 Microsoft AD 与自管理 Active Directory 域之间创建信任关系。
准备 Kerberos
krb5.conf配置文件的简化版本。包括有关领域、域管理服务器的位置以及主机名到 Kerberos 领域的映射的信息。您需要验证krb5.conf内容是否使用正确的混合大小写格式来表示领域和域领域名称。例如:[libdefaults] dns_lookup_realm = true dns_lookup_kdc = true forwardable = true default_realm = MYDOMAIN.ORG [realms] MYDOMAIN.ORG = { kdc = mydomain.org admin_server = mydomain.org } [domain_realm] .mydomain.org = MYDOMAIN.ORG mydomain.org = MYDOMAIN.ORG准备一个 Kerberos 密钥缓存文件。该文件包含客户端主体信息的临时 Kerberos 凭证。该文件不存储客户端的密码。您的 DMS 任务使用此缓存票证信息无需密码即可获取其他凭证。在现有的 Active Directory 或通过 Kerberos 进行身份验证的主机上运行以下步骤以生成密钥缓存文件。
-
使用
SecretBinary参数将 Kerberos 密钥缓存文件存储在 Secrets Manager 中。当您将密钥缓存文件上传到 Secrets Manager 时,DMS 会对其进行检索,然后大约每 30 分钟更新一次本地缓存文件。当本地密钥缓存文件超过预定义的过期时间戳时,DMS 会平稳地停止任务。为避免正在进行的复制任务期间身份验证失败,请在票证到期前至少 30 分钟更新 Secrets Manager 中的密钥缓存文件。有关更多信息,请参阅《Secrets Manager API 参考》中的 createsecret。以下 Amazon CLI 示例显示了如何在 Secrets Manager 中以二进制格式存储密钥缓存文件:aws secretsmanager create-secret —name keycache —secret-binary fileb://keycachefile 向 IAM 角色授予从 Secrets Manager 获取密钥缓存文件的
GetSecretValue和DescribeSecret权限。确保 IAM 角色包含dms-vpc-role信任策略。有关dms-vpc-role信任策略的更多信息,请参阅创建 IAM 角色以用于 Amazon DMS。
以下示例演示了具有 Secrets Manager GetSecretValue 和 DescribeSecret 权限的 IAM 角色策略。<keycache_secretsmanager_arn> 值是您在上一步中创建的 Keycache Secrets Manager ARN。
在 Amazon DMS 复制实例上启用 Kerberos 支持
Kerberos 领域与 Windows 中的域相同。为了解析主领域,Kerberos 依赖于域名服务(DNS)。当您设置 dns-name-servers 参数时,您的复制实例将使用您预定义的一组自定义 DNS 服务器来解析 Kerberos 域领域。解决 Kerberos 领域查询的另一种选择是在复制实例虚拟私有云(VPC)上配置 Amazon Route 53。有关更多信息,请参阅 Route 53。
使用 Amazon Web Services 管理控制台 在 DMS 复制实例上启用 Kerberos 支持
要使用控制台启用 Kerberos 支持,请在创建复制实例或修改复制实例页面的 Kerberos 身份验证部分输入以下信息:
您
krb5.conf文件中的内容包含密钥缓存文件的 Secrets Manager 密钥的 ARN
有权访问 Secret Manager ARN 并有权检索密钥缓存文件的 IAM 角色的 ARN
使用 Amazon CLI 在 DMS 复制实例上启用 Kerberos 支持
以下 Amazon CLI 示例调用创建了一个支持 Kerberos 的私有 DMS 复制实例。复制实例使用自定义 DNS 来解析 Kerberos 领域。有关更多信息,请参阅 create-replication-instance。
aws dms create-replication-instance --replication-instance-identifier my-replication-instance --replication-instance-class dms.t2.micro --allocated-storage 50 --vpc-security-group-ids sg-12345678 --engine-version 3.5.4 --no-auto-minor-version-upgrade --kerberos-authentication-settings'{"KeyCacheSecretId":<secret-id>,"KeyCacheSecretIamArn":<secret-iam-role-arn>,"Krb5FileContents":<krb5.conf file contents>}' --dns-name-servers<custom dns server>--no-publicly-accessible
在源端点上启用 Kerberos 支持
在 DMS Oracle 或 SQL Server 源端点上启用 Kerberos 身份验证之前,请确保您可以从客户端计算机使用 Kerberos 协议向源数据库进行身份验证。您可以使用 Amazon DMS 诊断 AMI 在与复制实例相同的 VPC 上启动 Amazon EC2 实例,然后测试 kerberos 身份验证。有关 AMI 的更多信息,请参阅使用 Amazon DMS 诊断支持 AMI。
使用 Amazon DMS 控制台
在端点数据库的访问权限下,选择 Kerberos 身份验证。
使用 Amazon CLI
指定端点设置参数并将 AuthenticationMethod 选项设置为 kerberos。例如:
(Oracle)
aws dms create-endpoint --endpoint-identifier my-endpoint --endpoint-type source --engine-name oracle --username dmsuser@MYDOMAIN.ORG --server-namemydatabaseserver--port 1521 --database-namemydatabase--oracle-settings "{\"AuthenticationMethod\": \"kerberos\"}"
SQL Server
aws dms create-endpoint --endpoint-identifier my-endpoint --endpoint-type source --engine-name sqlserver --username dmsuser@MYDOMAIN.ORG --server-namemydatabaseserver--port 1433 --database-namemydatabase--microsoft-sql-server-settings "{\"AuthenticationMethod\": \"kerberos\"}"
测试源端点
您必须针对启用了 Kerberos 的复制实例测试启用了 Kerberos 的端点。如果您未正确配置复制实例或源端点进行 Kerberos 身份验证,则端点 test-connection 操作将失败,并可能返回与 Kerberos 相关的错误。有关更多信息,请参阅 test-connection