

# 设置自托管式 Active Directory
<a name="db2-self-managed-active-directory.SettingUp"></a>

要设置自托管式 AD，请执行以下步骤。

**Topics**
+ [步骤 1：在 AD 中创建组织单位](#db2-self-managed-active-directory.SettingUp.CreateOU)
+ [步骤 2：在您的 AD 中创建 AD 域服务账户](#db2-self-managed-active-directory.SettingUp.CreateADuser)
+ [步骤 3：将控制权委派给 AD 域服务账户](#db2-self-managed-active-directory.SettingUp.DelegateControl)
+ [步骤 4：创建 Amazon KMS 密钥](#db2-self-managed-active-directory.SettingUp.CreateKMSkey)
+ [步骤 5：创建 Amazon 密钥](#db2-self-managed-active-directory.SettingUp.CreateSecret)
+ [步骤 6：创建或修改 Db2 数据库实例](#db2-self-managed-active-directory.SettingUp.CreateModify)

## 步骤 1：在 AD 中创建组织单位
<a name="db2-self-managed-active-directory.SettingUp.CreateOU"></a>

**重要**  
对于任何 Amazon 账户，如果它拥有已加入自行管理的 AD 域的 RDS for Db2 数据库实例，我们建议为它创建专用 OU 以及作用域为该 OU 的服务凭证。通过指定专用 OU 和服务凭证，您可以避免权限冲突并遵循最低权限原则。

**在 AD 中创建 OU**

1. 以域管理员身份连接到您的 AD 域。

1. 打开 **Active Directory 用户和计算机**，然后选择要在其中创建 OU 的域。

1. 打开域的上下文菜单，选择**新建**，然后选择**组织单元**。

1. 为 OU 输入名称。

1. 选中**保护容器免遭意外删除**复选框。

1. 选择**确定**。您的新 OU 将出现在您的域下。

## 步骤 2：在您的 AD 中创建 AD 域服务账户
<a name="db2-self-managed-active-directory.SettingUp.CreateADuser"></a>

将域服务账户凭证用作 Amazon Secrets Manager 中的密钥。

**在 AD 中创建 AD 域服务账户**

1. 打开 **Active Directory 用户和计算机**，然后选择要在其中创建用户的域和 OU。

1. 打开**用户**的上下文菜单，然后依次选择**新建**和**用户**。

1. 输入用户的名字、姓氏和登录名。选择**下一步**。

1. 输入用户的密码。请勿选择**用户下次登录时必须更改密码**。请勿选择**账户已禁用**。选择**下一步**。

1. 选择**确定**。新用户将出现在您的域下。

## 步骤 3：将控制权委派给 AD 域服务账户
<a name="db2-self-managed-active-directory.SettingUp.DelegateControl"></a>

### A 部分：使用控制权委派向导委派权限
<a name="db2-self-managed-active-directory.SettingUp.DelegateControl.Wizard"></a>

**将控制权委派给域中的 AD 域服务账户**

1. 打开 **Active Directory 用户和计算机** Microsoft 管理控制台（MMC）管理单元，然后选择要在其中创建用户的域。

1. 打开您之前创建的 OU 的上下文菜单，然后选择**委派控制权**。

1. 在**控制权委派向导**上，选择**下一步**。

1. 在**用户或组**部分，选择**添加**。

1. 在**选择用户、计算机或组**部分，输入您创建的 AD 域服务账户，然后选择**检查名称**。如果您的 AD 域服务账户检查获得成功，请选择**确定**。

1. 在**用户或组**部分，确认您的 AD 域服务账户已添加，然后选择**下一步**。

1. 在**要委派的任务**部分，选择**创建要委派的自定义任务**，然后选择**下一步**。

1. 在 **Active Directory 对象类型**部分：

   1. 选择**仅文件夹中的以下对象**。

   1. 选择**用户对象**。

   1. 选择**在此文件夹中创建选定对象**。

   1. 选择**删除此文件夹中的选定对象**，然后选择**下一步**。

1. 在**权限**部分：

   1. 将**常规**保持为选中状态。

   1. 选择**特定于属性**。

   1. 选择**创建/删除特定的子对象**。

   1. 选择**重置密码**。

   1. 选择**读取 msDS-SupportedEncryptionTypes**。

   1. 选择**写入 msDS-SupportedEncryptionTypes**。

1. 对于**完成控制权委派向导**，请检查并确认您的设置，然后选择**完成**。

### B 部分：使用 PowerShell 委派 servicePrincipalName 权限
<a name="db2-self-managed-active-directory.SettingUp.DelegateControl.PowerShell"></a>

控制权委派向导不会公开用户对象的 `servicePrincipalName` 属性。在域控制器上运行以下 PowerShell 脚本，来向 `servicePrincipalName` 授予对 OU 中的用户对象进行 AD 域服务账户读写访问的权限。

将 {{service-account}} 替换为您在步骤 2 中创建的 AD 域服务账户的名称，并更新 OU 可分辨名称以匹配您在步骤 1 中创建的 OU。

```
$ou = "OU={{my-AD-test-OU}},DC={{my-AD-test}},DC={{my-AD}},DC={{my-domain}}"
$user = Get-ADUser "{{service-account}}"
$acl = Get-Acl "AD:\$ou"

$schemaPath = (Get-ADRootDSE).schemaNamingContext
$spnSchema = Get-ADObject -SearchBase $schemaPath -Filter {lDAPDisplayName -eq "servicePrincipalName"} -Properties schemaIDGUID
$spnGuid = New-Object Guid (,$spnSchema.schemaIDGUID)
$userGuid = New-Object Guid "bf967aba-0de6-11d0-a285-00aa003049e2"

$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
   $user.SID,
   "ReadProperty,WriteProperty",
   "Allow",
   $spnGuid,
   "Descendents",
   $userGuid
)

$acl.AddAccessRule($ace)
Set-Acl "AD:\$ou" $acl
```

要验证权限是否已正确地应用，请运行以下 PowerShell 脚本：

```
$acl = Get-Acl "AD:\$ou"
$acl.Access | Where-Object { $_.IdentityReference -like "*{{service-account}}*" } | Format-List
```

## 步骤 4：创建 Amazon KMS 密钥
<a name="db2-self-managed-active-directory.SettingUp.CreateKMSkey"></a>

KMS 密钥用于加密您的 Amazon 密钥。

**注意**  
对于**加密密钥**，请勿使用 Amazon 原定设置 KMS 密钥。确保在包含要加入自行管理的 AD 的 RDS for Db2 数据库实例的相同 Amazon 账户中创建 Amazon KMS 密钥。

**创建 Amazon KMS 密钥**

1. 在 [https://console.aws.amazon.com/kms/](https://console.amazonaws.cn/kms/) 上，打开 Amazon KMS 控制台。选择**创建密钥**。

1. 对于**密钥类型**，选择**对称**。

1. 对于**密钥用法**，选择**加密和解密**。

1. 对于 **Advanced options (高级选项)**：

   1. 对于**密钥材料源**，选择 **KMS**。

   1. 对于**区域性**，选择**单区域密钥**，然后选择**下一步**。

1. 对于**别名**，提供 KMS 密钥的名称。

1. （可选）对于**描述**，提供 KMS 密钥的描述。

1. （可选）对于**标签**，提供 KMS 密钥的标签，然后选择**下一步**。

1. 对于**密钥管理员**，提供 IAM 用户的名称并将其选中。

1. 对于**密钥删除**，确保选中**允许密钥管理员删除此密钥**复选框，然后选择**下一步**。

1. 对于**密钥用户**，请提供上一步中的 IAM 用户并将其选中。选择**下一步**。

1. 审核配置。

1. 对于**密钥策略**，请在策略**声明**中包括以下内容：

   ```
   {
       "Sid": "Allow use of the KMS key on behalf of RDS",
       "Effect": "Allow",
       "Principal": {
           "Service": [
               "rds.amazonaws.com"
           ]
       },
       "Action": "kms:Decrypt",
       "Resource": "*"
   }
   ```

1. 选择**结束**。

## 步骤 5：创建 Amazon 密钥
<a name="db2-self-managed-active-directory.SettingUp.CreateSecret"></a>

**注意**  
确保在包含要加入自行管理的 AD 的 RDS for Db2 数据库实例的相同 Amazon 账户中创建密钥。

**创建密钥**

1. 打开位于 [https://console.aws.amazon.com/secretsmanager/](https://console.amazonaws.cn/secretsmanager/) 的 Amazon Secrets Manager 控制台。选择**存储新密钥**。

1. 对于**密钥类型**，请选择**其他密钥类型**。

1. 对于**键/值对**，请添加您的两个密钥：

   1. 对于第一个密钥，请输入 `SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME`。

   1. 对于第一个密钥的值，请仅输入 AD 用户的用户名（不带域前缀）。请勿包含域名，因为这会导致实例创建失败。

   1. 对于第二个密钥，请输入 `SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD`。

   1. 对于第二个密钥的值，请输入您在域中为 AD 用户创建的密码。

1. 对于**加密密钥**，输入您在上一步中创建的 KMS 密钥，然后选择**下一步**。

1. 在**密钥名称**中，输入一个描述性名称，以便您稍后查找自己的密钥。

1. （可选）对于**描述**，输入密钥名称的描述。

1. 对于**资源权限**，选择**编辑**。

1. 将以下策略添加到权限策略中：
**注意**  
我们建议您在策略中使用 `aws:sourceAccount` 和 `aws:sourceArn` 条件，以避免出现*混淆代理人*问题。将您的 Amazon 账户用于 `aws:sourceAccount`，并将 RDS for Db2 数据库实例 ARN 用于 `aws:sourceArn`。有关更多信息，请参阅 [防范跨服务混淆代理问题](cross-service-confused-deputy-prevention.md)。

   ```
   {
       "Version":"2012-10-17",
       "Statement":
       [
           {
               "Effect": "Allow",
               "Principal":
               {
                   "Service": "rds.amazonaws.com"
               },
               "Action": "secretsmanager:GetSecretValue",
               "Resource": "*",
               "Condition":
               {
                   "StringEquals":
                   {
                       "aws:sourceAccount": "123456789012"
                   },
                   "ArnLike":
                   {
                       "aws:sourceArn": "arn:aws:rds:us-west-2:123456789012:db:*"
                   }
               }
           }
       ]
   }
   ```

1. 选择**保存**，然后选择**下一步**。

1. 对于**配置轮换设置**，保留原定设置值并选择**下一步**。

1. 查看密钥的设置，然后选择**存储**。

1. 选择您创建的密钥，然后复制**密钥 ARN** 的值。在下一步中使用此值来设置自行管理的 Active Directory。

## 步骤 6：创建或修改 Db2 数据库实例
<a name="db2-self-managed-active-directory.SettingUp.CreateModify"></a>

您可以使用 Amazon CLI 将 RDS for Db2 数据库实例与自行管理的 AD 域关联。您可以通过下列方式之一来执行该操作：
+ 使用 [create-db-instance](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html) CLI 命令创建新的 Db2 数据库实例。有关说明，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。
+ 使用 [modify-db-instance](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) CLI 命令修改现有 Db2 数据库实例。有关说明，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

使用 Amazon CLI 时，数据库实例需要以下参数才能使用您创建的自行管理的 AD 域：
+ 对于 `--domain-fqdn` 参数，请使用自托管式 AD 的完全限定域名（FQDN）。
+ 对于 `--domain-ou` 参数，请使用您在自托管式 AD 中创建的 OU。
+ 对于 `--domain-auth-secret-arn` 参数，使用您在上一步中创建的密钥 ARN 的值。
+ 对于 `--domain-dns-ips` 参数，请使用自托管式 AD 的 DNS 服务器的主要 IPv4 地址和辅助 IPv4 地址。如果您没有辅助 DNS 服务器 IP 地址，请输入主 IP 地址两次。

以下 CLI 命令创建一个新的 RDS for Db2 数据库实例并将其加入自行管理的 AD 域。

对于 Linux、macOS 或 Unix：

```
aws rds create-db-instance \
    --db-instance-identifier {{my-DB-instance}} \
    --db-instance-class db.m6i.large \
    --allocated-storage 50 \
    --engine db2-se \
    --engine-version 11.5 \
    --master-username {{my-master-username}} \
    --master-user-password {{my-master-password}} \
    --domain-fqdn {{my_AD_domain.my_AD.my_domain}} \
    --domain-ou {{OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain}} \
    --domain-auth-secret-arn "arn:aws:secretsmanager:{{region}}:{{account-number}}:secret:{{my-AD-test-secret-123456}}" \
    --domain-dns-ips "{{10.11.12.13}}" "{{10.11.12.14}}"
```

对于 Windows：

```
aws rds create-db-instance ^
    --db-instance-identifier {{my-DB-instance}} ^
    --db-instance-class db.m6i.large ^
    --allocated-storage 50 ^
    --engine db2-se ^
    --engine-version 11.5 ^
    --master-username {{my-master-username}} ^
    --master-user-password {{my-master-password}} ^
    --domain-fqdn {{my_AD_domain.my_AD.my_domain}} ^
    --domain-ou {{OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain}} ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:{{region}}:{{account-number}}:secret:{{my-AD-test-secret-123456}}" ^
    --domain-dns-ips "{{10.11.12.13}}" "{{10.11.12.14}}"
```