View a markdown version of this page

设置自托管式 Active Directory - Amazon Relational Database Service

设置自托管式 Active Directory

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

步骤 1:在 AD 中创建组织单位

重要

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

在 AD 中创建 OU
  1. 以域管理员身份连接到您的 AD 域。

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

  3. 打开域的上下文菜单,选择新建,然后选择组织单元

  4. 为 OU 输入名称。

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

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

步骤 2:在您的 AD 中创建 AD 域服务账户

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

在 AD 中创建 AD 域服务账户
  1. 打开 Active Directory 用户和计算机,然后选择要在其中创建用户的域和 OU。

  2. 打开用户的上下文菜单,然后依次选择新建用户

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

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

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

步骤 3:将控制权委派给 AD 域服务账户

A 部分:使用控制权委派向导委派权限

将控制权委派给域中的 AD 域服务账户
  1. 打开 Active Directory 用户和计算机 Microsoft 管理控制台(MMC)管理单元,然后选择要在其中创建用户的域。

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

  3. 控制权委派向导上,选择下一步

  4. 用户或组部分,选择添加

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

  6. 用户或组部分,确认您的 AD 域服务账户已添加,然后选择下一步

  7. 要委派的任务部分,选择创建要委派的自定义任务,然后选择下一步

  8. Active Directory 对象类型部分:

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

    2. 选择用户对象

    3. 选择在此文件夹中创建选定对象

    4. 选择删除此文件夹中的选定对象,然后选择下一步

  9. 权限部分:

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

    2. 选择特定于属性

    3. 选择创建/删除特定的子对象

    4. 选择重置密码

    5. 选择读取 msDS-SupportedEncryptionTypes

    6. 选择写入 msDS-SupportedEncryptionTypes

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

B 部分:使用 PowerShell 委派 servicePrincipalName 权限

控制权委派向导不会公开用户对象的 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:创建 AWS KMS 密钥

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

注意

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

创建 AWS KMS 密钥
  1. https://console.aws.amazon.com/kms/ 上,打开 AWS KMS 控制台。选择创建密钥

  2. 对于密钥类型,选择对称

  3. 对于密钥用法,选择加密和解密

  4. 对于 Advanced options (高级选项)

    1. 对于密钥材料源,选择 KMS

    2. 对于区域性,选择单区域密钥,然后选择下一步

  5. 对于别名,提供 KMS 密钥的名称。

  6. (可选)对于描述,提供 KMS 密钥的描述。

  7. (可选)对于标签,提供 KMS 密钥的标签,然后选择下一步

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

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

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

  11. 审核配置。

  12. 对于密钥策略,请在策略声明中包括以下内容:

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

步骤 5:创建 AWS 密钥

注意

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

创建密钥
  1. 打开位于 https://console.aws.amazon.com/secretsmanager/ 的 AWS Secrets Manager 控制台。选择存储新密钥

  2. 对于密钥类型,请选择其他密钥类型

  3. 对于键/值对,请添加您的两个密钥:

    1. 对于第一个密钥,请输入 SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME

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

    3. 对于第二个密钥,请输入 SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD

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

  4. 对于加密密钥,输入您在上一步中创建的 KMS 密钥,然后选择下一步

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

  6. (可选)对于描述,输入密钥名称的描述。

  7. 对于资源权限,选择编辑

  8. 将以下策略添加到权限策略中:

    注意

    我们建议您在策略中使用 aws:sourceAccountaws:sourceArn 条件,以避免出现混淆代理人问题。将您的 AWS 账户用于 aws:sourceAccount,并将 RDS for Db2 数据库实例 ARN 用于 aws:sourceArn。有关更多信息,请参阅 防范跨服务混淆代理问题

    { "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:*" } } } ] }
  9. 选择保存,然后选择下一步

  10. 对于配置轮换设置,保留原定设置值并选择下一步

  11. 查看密钥的设置,然后选择存储

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

步骤 6:创建或修改 Db2 数据库实例

您可以使用 AWS CLI 将 RDS for Db2 数据库实例与自行管理的 AD 域关联。您可以通过下列方式之一来执行该操作:

使用 AWS 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"