将 Kerberos 身份验证与 AWS Database Migration Service - AWS数据库迁移服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Kerberos 身份验证与 AWS Database Migration Service

从 DMS v3.5.3 开始,您可以将 Oracle 或 SQL Server 源端点配置为使用 Kerberos 身份验证连接到数据库实例。DMS 支持Directory Service微软 Active Directory 和 Kerberos 身份验证。有关对 Microsoft AWS Active Directory 服务的托管访问权限的更多信息,请参阅什么是Directory Service?

AWS DMSKerberos 身份验证架构概述

下图简要概述了 AWS DMS Kerberos 身份验证工作流程。

Kerberos 身份验证架构

使用 Kerberos 身份验证的限制 AWS DMS

将 Kerberos 身份验证与以下限制一起使用:AWS DMS

  • DMS 复制实例支持一个 Kerberos krb5.conf 文件和一个密钥缓存文件。

  • 您必须在票证到期前至少 30 分钟更新 Secrets Manager 中的 Kerberos 密钥缓存文件。

  • 启用 Kerberos 的 DMS 端点仅适用于启用了 Kerberos 的 DMS 复制实例。

先决条件

开始之前,您必须在现有 Active Directory 或通过 Kerberos 进行身份验证的主机中满足以下先决条件:

  • 与您的本地 AD 建立 Active Directory 信任关系。有关更多信息,请参阅教程:在您的AWS托管 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 进行身份验证的主机上运行以下步骤以生成密钥缓存文件。

    • 创建一个 Kerberos keytab 文件。您可以使用 kutilktpass 实用程序生成 keytab 文件。

      有关 Microsoft ktpass 实用程序的更多信息,请参阅 Windows Server 文档中的 ktpass

      有关 MIT kutil 实用程序的更多信息,请参阅 MIT Kerberos 文档中的 kutil

    • 使用 kinit 实用程序从 keytab 文件创建 Kerberos 密钥缓存文件。有关 kinit 实用程序的更多信息,请参阅 MIT Kerberos 文档中的 kinit

  • 使用 SecretBinary 参数将 Kerberos 密钥缓存文件存储在 Secrets Manager 中。当您将密钥缓存文件上传到 Secrets Manager 时,DMS 会对其进行检索,然后大约每 30 分钟更新一次本地缓存文件。当本地密钥缓存文件超过预定义的过期时间戳时,DMS 会平稳地停止任务。为避免正在进行的复制任务期间身份验证失败,请在票证到期前至少 30 分钟更新 Secrets Manager 中的密钥缓存文件。有关更多信息,请参阅《Secrets Manager API 参考》中的 createsecret。以下AWS CLI示例显示了如何在 Secrets Manager 中以二进制格式存储密钥缓存文件:

    aws secretsmanager create-secret —name keycache —secret-binary fileb://keycachefile
  • 向 IAM 角色授予从 Secrets Manager 获取密钥缓存文件的 GetSecretValueDescribeSecret 权限。确保 IAM 角色包含 dms-vpc-role 信任策略。有关 dms-vpc-role 信任策略的更多信息,请参阅创建要与一起使用的 IAM 角色 AWS DMS

以下示例演示了具有 Secrets Manager GetSecretValueDescribeSecret 权限的 IAM 角色策略。该<keycache_secretsmanager_arn>值是您在上一步中创建的 Keycache Secrets Manager ARN。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "*" } ] }

在 AWS DMS 复制实例上启用 Kerberos 支持

Kerberos 领域与 Windows 中的域相同。为了解析主领域,Kerberos 依赖于域名服务(DNS)。当您设置 dns-name-servers 参数时,您的复制实例将使用您预定义的一组自定义 DNS 服务器来解析 Kerberos 域领域。解决 Kerberos 领域查询的另一种选择是在复制实例虚拟私有云(VPC)上配置 Amazon Route 53。有关更多信息,请参阅 Route 53

使用在 DMS 复制实例上启用 Kerberos 支持 AWS 管理控制台

要使用控制台启用 Kerberos 支持,请在创建复制实例修改复制实例页面的 Kerberos 身份验证部分输入以下信息:

  • krb5.conf 文件中的内容

  • 包含密钥缓存文件的 Secrets Manager 密钥的 ARN

  • 有权访问 Secret Manager ARN 并有权检索密钥缓存文件的 IAM 角色的 ARN

使用在 DMS 复制实例上启用 Kerberos 支持 AWS CLI

以下AWS 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 协议向源数据库进行身份验证。您可以使用AWS DMS诊断 AMI 在与复制 EC2 实例相同的 VPC 上启动 Amazon 实例,然后测试 kerberos 身份验证。有关 AMI 的更多信息,请参阅使用AWS DMS诊断支持 AMI

使用 AWS DMS 控制台

端点数据库的访问权限下,选择 Kerberos 身份验证

使用 AWS CLI

指定端点设置参数并将 AuthenticationMethod 选项设置为 kerberos。例如:

Oracle

aws dms create-endpoint --endpoint-identifier my-endpoint --endpoint-type source --engine-name oracle --username dmsuser@MYDOMAIN.ORG --server-name mydatabaseserver --port 1521 --database-name mydatabase --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-name mydatabaseserver --port 1433 --database-name mydatabase --microsoft-sql-server-settings "{\"AuthenticationMethod\": \"kerberos\"}"

测试源端点

您必须针对启用了 Kerberos 的复制实例测试启用了 Kerberos 的端点。如果您未正确配置复制实例或源端点进行 Kerberos 身份验证,则端点 test-connection 操作将失败,并可能返回与 Kerberos 相关的错误。有关更多信息,请参阅 test-connection