

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

# 将 Kerberos 身份验证与 AWS Database Migration Service
<a name="CHAP_Security.Kerberos"></a>

从 DMS v3.5.3 开始，您可以将 Oracle 或 SQL Server 源端点配置为使用 Kerberos 身份验证连接到数据库实例。DMS 支持 Directory Service 微软 Active Directory 和 Kerberos 身份验证。有关对 Microsoft AWS Active Directory 服务的托管访问权限的更多信息，请参阅[什么是 Directory Service？](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html) 。

## AWS DMS Kerberos 身份验证架构概述
<a name="CHAP_Security.Kerberos.architecture"></a>

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

![\[Kerberos 身份验证架构\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/images/datarep-kerberos-architecture.jpg)


## 使用 Kerberos 身份验证的限制 AWS DMS
<a name="CHAP_Security.Kerberos.limitations"></a>

将 Kerberos 身份验证与以下限制一起使用： AWS DMS
+ DMS 复制实例支持一个 Kerberos `krb5.conf` 文件和一个密钥缓存文件。
+ 您必须在票证到期前至少 30 分钟更新 Secrets Manager 中的 Kerberos 密钥缓存文件。
+ 启用 Kerberos 的 DMS 端点仅适用于启用了 Kerberos 的 DMS 复制实例。

## 先决条件
<a name="CHAP_Security.Kerberos.prerequisites"></a>

开始之前，您必须在现有 Active Directory 或通过 Kerberos 进行身份验证的主机中满足以下先决条件：
+ 与您的本地 AD 建立 Active Directory 信任关系。有关更多信息，请参阅[教程：在您的 AWS 托管 Microsoft AD 和自行管理的 Active Directory 域之间创建信任关系](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_setup_trust.html)。
+ 准备 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 文件。您可以使用 **kutil** 或 **ktpass** 实用程序生成 keytab 文件。

    有关 Microsoft **ktpass** 实用程序的更多信息，请参阅 *Windows Server 文档*中的 [ktpass](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ktpass)。

    有关 MIT **kutil** 实用程序的更多信息，请参阅 *MIT Kerberos 文档*中的 [kutil](https://web.mit.edu/kerberos/krb5-1.12/doc/admin/admin_commands/ktutil.html)。
  + 使用 **kinit** 实用程序从 keytab 文件创建 Kerberos 密钥缓存文件。有关 **kinit** 实用程序的更多信息，请参阅 *MIT Kerberos 文档*中的 [kinit](https://web.mit.edu/kerberos/krb5-1.12/doc/user/user_commands/kinit.html)。
+ 使用 `SecretBinary` 参数将 Kerberos 密钥缓存文件存储在 Secrets Manager 中。当您将密钥缓存文件上传到 Secrets Manager 时，DMS 会对其进行检索，然后大约每 30 分钟更新一次本地缓存文件。当本地密钥缓存文件超过预定义的过期时间戳时，DMS 会平稳地停止任务。为避免正在进行的复制任务期间身份验证失败，请在票证到期前至少 30 分钟更新 Secrets Manager 中的密钥缓存文件。有关更多信息，请参阅《Secrets Manager API 参考》**中的 [createsecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html)。以下 AWS 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 角色 AWS DMS](security-iam.md#CHAP_Security.APIRole)。

以下示例演示了具有 Secrets Manager `GetSecretValue` 和 `DescribeSecret` 权限的 IAM 角色策略。该*<keycache\$1secretsmanager\$1arn>*值是你在上一步中创建的 Keycache Secrets Manager ARN。

------
#### [ JSON ]

****  

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

------

## 在 AWS DMS 复制实例上启用 Kerberos 支持
<a name="CHAP_Security.Kerberos.enable.instance"></a>

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

### 使用在 DMS 复制实例上启用 Kerberos 支持 AWS 管理控制台
<a name="CHAP_Security.Kerberos.enable.instance.console"></a>

要使用控制台启用 Kerberos 支持，请在**创建复制实例**或**修改复制实例**页面的 **Kerberos 身份验证**部分输入以下信息：
+ 您 `krb5.conf` 文件中的内容
+ 包含密钥缓存文件的 Secrets Manager 密钥的 ARN
+ 有权访问 Secret Manager ARN 并有权检索密钥缓存文件的 IAM 角色的 ARN

### 使用在 DMS 复制实例上启用 Kerberos 支持 AWS CLI
<a name="CHAP_Security.Kerberos.enable.instance.cli"></a>

以下 AWS CLI 示例调用创建了一个支持 Kerberos 的私有 DMS 复制实例。复制实例使用自定义 DNS 来解析 Kerberos 领域。有关更多信息，请参阅 [create-replication-instance](https://docs.aws.amazon.com/cli/latest/reference/dms/create-replication-instance.html)。

```
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 支持
<a name="CHAP_Security.Kerberos.enable.endpoint"></a>

在 DMS Oracle 或 SQL Server 源端点上启用 Kerberos 身份验证之前，请确保您可以从客户端计算机使用 Kerberos 协议向源数据库进行身份验证。您可以使用 AWS DMS 诊断 AMI 在与复制实例相同的 VPC 上启动 Amazon EC2 实例，然后测试 kerberos 身份验证。有关 AMI 的更多信息，请参阅[使用 AWS DMS 诊断支持 AMI](CHAP_SupportAmi.md)。

### 使用 AWS DMS 控制台
<a name="CHAP_Security.Kerberos.enable.endpoint.console"></a>

在**端点数据库的访问权限**下，选择 **Kerberos 身份验证**。

### 使用 AWS CLI
<a name="CHAP_Security.Kerberos.enable.endpoint.cli"></a>

指定端点设置参数并将 `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\"}"
```

## 测试源端点
<a name="CHAP_Security.Kerberos.test"></a>

您必须针对启用了 Kerberos 的复制实例测试启用了 Kerberos 的端点。如果您未正确配置复制实例或源端点进行 Kerberos 身份验证，则端点 `test-connection` 操作将失败，并可能返回与 Kerberos 相关的错误。有关更多信息，请参阅[ test-connection](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dms/test-connection.html)。