本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS Lambda 自动化功能 AWS 账户 从 AWS Managed Microsoft AD 正面移除 Amazon EC2 条目
由 Rahul Sharad Gaikwad 博士 () 和 Tamilselvan P () AWS 创作 AWS
摘要
Active Directory (AD) 是一款 Microsoft 脚本工具,用于管理域信息和用户与网络服务的交互。它在托管服务提供商 (MSPs) 中被广泛用于管理员工凭证和访问权限。由于 AD 攻击者可以使用不活跃的帐户来尝试入侵组织,因此找到不活跃的帐户并在例行维护计划中将其禁用非常重要。使用 AWS Directory Service for Microsoft Active Directory,你可以将 Microsoft Active Directory 作为托管服务运行。此模式可以帮助您配置 AWS Lambda 自动化,以快速查找和删除不活跃的帐户。
如果以下情况适用于您的组织,则此模式可以为您提供帮助:
集中式广告管理 — 如果您的组织有多个账户 AWS 账户,每个账户都有自己的 AD 部署,那么在所有账户中一致地管理用户账户和访问权限可能会很困难。借助跨账户 AD 清理解决方案,您可以集中方式禁用或删除所有 AD 实例中的非活动账户。
AD 重组或迁移 — 如果您的组织计划重组或迁移其 AD 部署,则跨账户 AD 清理解决方案可以帮助您准备环境。该解决方案可以帮助您删除不必要或不活跃的帐户,简化迁移过程并减少潜在的冲突或问题。
当你使用这种模式时,你可以获得以下好处:
提高数据库和服务器性能,修复来自非活动帐户的安全漏洞。
如果您的 AD 服务器托管在云中,则删除不活跃的帐户还可以降低存储成本,同时提高性能。您的每月账单可能会减少,因为带宽费用和计算资源都可能下降。
使用干净的活动目录将潜在的攻击者拒之门外。
先决条件和限制
先决条件
一个活跃的家长 AWS 账户 和一个或多个子女账户。在这种模式中,父账户是创建活动目录的地方。子帐户托管 Windows 服务器,并通过父帐户 Active Directory 加入。
Git 已在本地工作站上安装
和配置。 在本地工作站上安装
和配置 Terraform。 AWS Managed Microsoft AD 在家长帐户中配置并共享给所有子女帐户的目录。有关更多详细信息,请参阅《管理指南》中的教程:共享您的 AWS Managed Microsoft AD 目录以实现无缝EC2域加入。AWS Directory Service
(父账户VPC)和亚马逊弹性计算云(亚马逊)实例 AWS Directory Service (子账户)之间可用的虚拟私有云 (EC2) 对等 AWS Transit Gateway 连接或连接。VPC VPC有关更多详细信息,请参阅《AWS Directory Service 管理指南》中的在目录所有者和目录使用者帐户之间配置对VPC等连接。
一台 Windows 计算机,在所有父帐户和子帐户上都配置了该
EC2WindowsUserdata
脚本。该脚本文件位于此模式的代码存储库的根目录中。 每个子账户上都有一个跨账户 AWS Identity and Access Management (IAM) 角色,该账户配置了信任策略,允许使用父账户中的 AWS Lambda 功能。有关更多信息,请参阅《亚马逊 EventBridge 用户指南》 AWS 账户 中的在亚马逊 EventBridge之间发送和接收事件。
父账户的 AWS Systems Manager 参数存储中提供以下密钥值:
domainJoinUser
— 目录服务的用户名domainJoinPassword
— 目录服务的密码
有关密钥的更多信息,请参阅《AWS Secrets Manager 用户指南》中的创建 AWS Secrets Manager 密钥。
限制
Terraform 不会自动在儿童账户中创建资源。您必须使用手动创建以下资源 AWS Management Console:
亚马逊 EventBridge 规定将亚马逊终EC2止事件发送到母账户
使用信任政策在子EC2账户中创建亚马逊跨账户角色
VPC对等连接或 Transit Gateway 连接
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分
。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。
产品版本
架构
下图显示了该解决方案的高级架构。
架构图说明了以下过程:
在儿童账户中,该 EventBridge 规则会收集所有 Amazon EC2 终止事件。该规则将父账户中存在的事件发送到 EventBridge 这些事件。
从父账户 EventBridge 收集所有事件并包含触发 Lambda 函数的规则。
ADcleanup-Lambda
父账户从父账户或子账户接收任何终止事件并触发 Lambda 函数。
Lambda 函数使用 Python boto 模块调用 Amazon A EC2 uto Scaling 群组并获取随机实例 ID。实例 ID 用于执行 Systems Manager 命令。
Lambda 函数使用 boto 模块再次调EC2用亚马逊。Lambda 函数获取正在运行的 Windows 服务器的私有 IP 地址,并将这些地址存储在临时变量中。在步骤 5.1 和 5.2 中,正在运行的 Windows EC2 实例是从子账户中收集的。
Lambda 函数再次调用 Systems Manager 以获取连接到的计算机信息。 AWS Directory Service
AWS Systems Manager 文档有助于在 Amazon EC2 Windows 服务器上执行 PowerShell 命令,以获取连接到 AD 的计算机的私有 IP 地址。(Systems Manager 文档使用在步骤 4 中获得的实例 ID。)
AD 域用户名和密码存储在 AWS Systems Manager 参数存储中。 AWS Lambda 然后 Systems Manager 调用 Parameter Store 并获取用于连接 AD 的用户名和密码值。
使用 Systems Manager 文档,使用先前在步骤 4 中获得的实例 ID 在亚马逊 EC2 Windows 服务器上执行 PowerShell 脚本。
Amazon 使用 PowerShell 命令EC2连接并移除未使用或处于非活动状态的计算机。 AWS Directory Service
工具
AWS 服务
AWS Directory Service提供了多种使用微软 Active Directory (AD) 的方法, AWS 服务 例如亚马逊弹性计算云 (亚马逊EC2)、适用于SQL服务器的亚马逊关系数据库服务 (亚马逊RDS) 和FSx适用于 Windows 文件服务器的亚马逊。
AWS Directory Service for Microsoft Active Directory允许你的目录感知工作负载和 AWS 资源使用中的 Microsoft Active Directory。 AWS Cloud
亚马逊弹性计算云 (AmazonEC2) 在中提供可扩展的计算容量 AWS Cloud。您可以根据需要启动任意数量的虚拟服务器,并快速扩展或缩减它们。
Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如, AWS Lambda 函数、使用API目的地的HTTP调用端点或其他 AWS 账户中的事件总线。
AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。借IAM助,您可以指定谁或什么人可以访问中的服务和资源 AWS,集中管理细粒度的权限,并分析访问权限以细化权限。 AWS
AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
AWS Systems Manager 可帮助您管理在 AWS Cloud中运行的应用程序和基础设施。它简化了应用程序和资源管理,缩短了检测和解决操作问题的时间,并帮助您大规模安全地管理 AWS 资源。
AWS Systems Manager 文档定义了 Systems Manager 对您的托管实例执行的操作。Systems Manager 包括 100 个预先配置的文档,您可以在运行时通过指定参数进行使用。
AWS Systems Manager Parameter Store 是一项 AWS Systems Manager 功能,可为配置数据管理和密钥管理提供安全的分层存储。
其他工具
HashiCorp Terraform
是一款开源基础设施即代码 (IaC) 工具,可帮助您使用代码来配置和管理云基础架构和资源。 PowerShell
是一款在 Windows、Linux 和 macOS 上运行的微软自动化和配置管理程序。 Python
是通用的计算机编程语言。
代码存储库
此模式的代码可在 GitHub aws-lambda-ad-cleanup-terraform-
最佳实践
自动加入域名。当您启动要成为 AWS Directory Service 域一部分的 Windows 实例时,请在实例创建过程中加入该域,而不是稍后手动添加该实例。要自动加入域,请在启动新实例时从 “域加入目录” 下拉列表中选择正确的目录。有关更多详细信息,请参阅《AWS Directory Service 管理指南》中的 “将 Amazon EC2 Windows 实例无缝加入您的 AWS Managed Microsoft AD 活动目录”。
删除未使用的帐户。在 AD 中找到从未使用过的账户是很常见的。与保留在系统中的已禁用或非活动帐户一样,被忽视的未使用帐户可能会减慢广告系统的速度或使您的组织容易受到数据泄露的影响。
自动清理活动目录。为了帮助降低安全风险并防止过时的账户影响广告性能,应定期进行广告清理。您可以通过编写脚本来完成大多数 AD 管理和清理任务。示例任务包括删除已禁用和非活动帐户、删除空组和非活动群组以及查找过期的用户帐户和密码。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
在子账号中创建跨账户角色。 | 要在儿童账户中创建跨账户角色,请执行以下操作:
| DevOps 工程师 |
在儿童账户中创建活动规则。 | 要为每个儿童账户创建 EventBridge 规则,请执行以下操作:
有关更多详细信息,请参阅《亚马逊 EventBridge 用户指南》中的创建对亚马逊 EventBridge事件做出反应的规则。 | DevOps 工程师 |
创建EC2实例并加入 AD。 | 要为 Windows 创建EC2实例,请执行以下操作:
| DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
创建项目文件夹并添加文件。 | 要克隆存储库并创建项目文件夹,请执行以下操作:
| DevOps 工程师 |
生成 | 要压缩
| DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
为 Terraform 变量提供值。 | 对于子账户,在
| DevOps 工程师 |
初始化 Terraform 配置。 | 要初始化包含 Terraform 文件的工作目录,请运行以下命令:
| DevOps 工程师 |
预览更改。 | 在部署基础架构之前,您可以预览 Terraform 将对基础架构所做的更改。要验证 Terraform 是否会根据需要进行更改,请运行以下命令:
| DevOps 工程师 |
执行建议的操作。 | 要验证
| DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
执行并测试 Lambda 函数。 | 要验证部署是否成功完成,请执行以下操作:
执行结果显示函数的输出。 | DevOps 工程师 |
查看父账户执行 EventBridge 规则的结果。 | 要查看基于父账户的 Amazon EC2 终止事件的 EventBridge 规则结果,请执行以下操作:
在 CloudWatch 控制台中,日志组页面显示 Lambda 函数的结果。 | DevOps 工程师 |
查看子账号执行 EventBridge 规则的结果。 | 要查看基于子女账户的 Amazon EC2 终止事件的 EventBridge 规则结果,请执行以下操作:
在 CloudWatch 控制台中,日志组页面显示 Lambda 函数的结果。 | DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
清理基础架构。 | 要清理您创建的基础架构,请使用以下命令:
要确认该 | DevOps 工程师 |
清理后进行验证。 | 验证资源是否已成功删除。 | DevOps 工程师 |
故障排除
事务 | 解决方案 |
---|---|
AWS Directory Service (父账户)和 Amazon EC2 实例(子账户)之间的连接问题 — 即使有对VPC等互连功能,您也无法将子账户的计算机加入到 AD。 | 在中添加路由VPCs。有关说明,请参阅 AWS Directory Service 文档中的配置目录所有者和目录使用者帐户之间的对VPC等连接。 |
相关资源
AWS 文档
其他资源
AWS 提供者
(Terraform 文档) 后端配置
(Terraform 文档) Python boto 模块
(Python Package 索引存储库) Terraform 二进制文件下载
(Terraform 文档)