使用 AWS Lambda 自动化功能 AWS 账户 从 AWS Managed Microsoft AD 中移除 Amazon EC2 条目 - AWS Prescriptive Guidance

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

使用 AWS Lambda 自动化功能 AWS 账户 从 AWS Managed Microsoft AD 中移除 Amazon EC2 条目

由 Rahul Sharad Gaikwad 博士 () 和 Tamilselvan P () AWS 创作 AWS

代码存储库:terraform-aws-lambda-ad- cleanup

环境:PoC 或试点

技术: DevOps;基础架构;存储和备份;管理和治理

工作负载:所有其他工作负载;Microsoft

AWS服务:AWS托管微软 AD;AWSLambda;亚马逊;Identity and Access Managem AWS entEC2;D AWS irectory Service;S AWS ystems Manager;亚马逊;Auto Scal EventBridge in AWS g

Summary

Active Directory (AD) 是一款 Microsoft 脚本工具,用于管理域信息和用户与网络服务的交互。它在托管服务提供商 (MSPs) 中被广泛用于管理员工凭证和访问权限。由于 AD 攻击者可以使用不活跃的帐户来尝试入侵组织,因此找到不活跃的帐户并在例行维护计划中将其禁用非常重要。使用 AWS Directory Service for Microsoft Active Directory,你可以将 Microsoft Active Directory 作为托管服务运行。

此模式可以帮助您配置 AWS Lambda 自动化,以快速查找和删除不活跃的帐户。当你使用这种模式时,你可以获得以下好处:

  • 提高数据库和服务器性能,修复来自非活动帐户的安全漏洞。

  • 如果您的 AD 服务器托管在云中,则移除不活跃的帐户还可以降低存储成本,同时提高性能。您的每月账单可能会减少,因为带宽费用和计算资源都可能下降。

  • 使用干净的活动目录将潜在的攻击者拒之门外。

先决条件和限制

先决条件

限制

产品版本

架构

下图显示了此模式的工作流和体系结构组件。

使用 Lambda 自动化从托管的 Microsoft AD 中删除EC2条目的流程。

图表显示了以下工作流:

  1. Amazon 根据 cron 表达式 EventBridge 触发该 AWS Lambda 函数。(对于这种模式,cron 表达式计划为每天一次。)

  2. 所需的IAM角色和策略是 AWS Lambda 通过 Terraform 创建并附加到的。

  3. 使用 Python boto 模块执行该 AWS Lambda 函数并调用亚马逊弹性计算云 (AmazonEC2) Auto Scaling Groups。Lambda 函数获取随机实例 ID。实例 ID 用于执行 AWS Systems Manager 命令。

  4. AWS Lambda EC2使用 boto 模块再次调用 Amazon,获取正在运行的 Windows 服务器的私有 IP 地址,并将这些地址存储在临时变量中。

  5. AWS Lambda 再次调用 Systems Manager 以获取所连接的计算机信息 AWS Directory Service。

  6. AWS Systems Manager 文档有助于在 Amazon EC2 Windows 服务器上执行 PowerShell 脚本,以获取与 AD 连接的计算机的私有 IP 地址。

  7. AD 域用户名和密码存储在 AWS Systems Manager 参数存储中。 AWS Lambda 然后 Systems Manager 调用 Parameter Store 并获取用于连接 AD 的用户名和密码值。

  8. 使用 Systems Manager 文档,使用先前在步骤 3 中获得的实例 ID 在亚马逊 EC2 Windows 服务器上执行 PowerShell 脚本。

  9. Amazon 使用 PowerShell 命令 AWS Directory Service 进行EC2连接,并移除未使用或处于非活动状态的计算机。

工具

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 是通用的计算机编程语言。

C 代码存储库

此模式的代码可在 GitHub 自定义 AD 清理自动化解决方案存储库中找到。

最佳实践

  • 自动加入域名。当您启动要成为 AWS Directory Service 域一部分的 Windows 实例时,请在实例创建过程中加入该域,而不是稍后手动添加该实例。要自动加入域,请在启动新实例时从 “域加入目录” 下拉列表中选择正确的目录。有关更多详细信息,请参阅《AWS Directory Service 管理指南》中的 “将 Amazon EC2 Windows 实例无缝加入您的 AWS Managed Microsoft AD 活动目录”。

  • 删除未使用的帐户。在 AD 中找到从未使用过的账户是很常见的。与保留在系统中的已禁用或非活动帐户一样,被忽视的未使用帐户可能会减慢广告系统的速度或使您的组织容易受到数据泄露的影响。

  • 自动清理活动目录。为了帮助降低安全风险并防止过时的账户影响广告性能,应定期进行广告清理。您可以通过编写脚本来完成大多数 AD 管理和清理任务。示例任务包括删除已禁用和非活动帐户、删除空组和非活动群组以及查找过期的用户帐户和密码。

操作说明

任务描述所需技能

创建项目文件夹,然后添加文件。

要克隆存储库并创建项目文件夹,请执行以下操作:

  1. 打开此模式的GitHub 存储库

  2. 选择 “代码” 按钮,在 “克隆” 下拉列表中查看要克隆的选项。

  3. HTTPS选项卡上,使用网络复制 Clone 中URL提供的内容URL

  4. 在您的计算机上创建一个文件夹,并使用您的项目名称命名。

  5. 在本地计算机上打开终端,然后导航到该文件夹。

  6. 要克隆 git 存储库,请使用以下命令。

    git clone <repository-URL>.git

  7. 克隆存储库后,使用以下命令转到克隆的目录。

    cd <directory name>

  8. 在克隆的存储库中,在您选择的集成开发环境 (IDE) 中打开此项目。

DevOps 工程师
任务描述所需技能

初始化 Terraform 配置。

要初始化包含 Terraform 文件的工作目录,请运行以下命令。

terraform init

DevOps 工程师

预览更改。

在部署基础架构之前,您可以预览 Terraform 将对基础架构所做的更改。要验证 Terraform 是否会根据需要进行更改,请运行以下命令。

terraform plan

DevOps 工程师

执行建议的操作。

要验证terraform plan命令的结果是否符合预期,请执行以下操作:

  1. 运行以下命令。

    terraform apply

  2. 登录并 AWS Management Console验证资源是否存在。

DevOps 工程师

清理基础架构。

要清理您创建的基础架构,请使用以下命令。

terraform destroy

要确认销毁命令,请键入yes

DevOps 工程师
任务描述所需技能

执行并测试 Lambda 函数。

要验证部署是否成功完成,请执行以下操作:

  1. 登录 AWS Management Console 并打开控制台。打开函数页面,然后选择以 ADcleanup-Lambda- * 开头的函数名称。

  2. 在函数概述页面上,在 “代码” 部分的 “代码” 选项卡上选择 “测试”。

  3. 要保存测试事件,请提供该事件的名称并选择保存。然后,要测试该事件,请再次选择测试

执行结果显示函数的输出。

DevOps 工程师

查看 Lambda 函数的结果。

在这种模式中, EventBridge 规则每天执行 Lambda 函数一次。要查看 Lambda 函数的结果,请执行以下操作:

  1. 登录 AWS Management Console 并打开 AWS Lambda 控制台。打开函数页面,选择以 ADcleanup-Lambda- * 开头的函数名称。

  2. 选择 “监控” 选项卡,然后选择 “查看 CloudWatch 日志”。

在 CloudWatch 控制台中,日志组页面显示 Lambda 函数的结果。

DevOps 工程师
任务描述所需技能

清理基础设施。

要清理您创建的基础架构,请使用以下命令。

terraform destroy

要确认销毁命令,请键入yes

DevOps 工程师

清理后进行验证。

验证资源是否已成功删除。

DevOps 工程师

故障排除

问题解决方案

如果您尝试移除 AD 计算机,则会收到 “访问被拒绝” 消息。无法删除 AD 计算机,因为默认情况下,该操作会尝试删除作为 AD 服务一部分连接的两个私有 IP 地址。

要避免出现此错误,请在列出 AD 计算机输出与运行 Windows 的计算机的输出之间的差异时,使用以下 Python 操作忽略前两台计算机。

Difference = Difference[2:]

当 Lambda 在 Windows 服务器上执行 PowerShell 脚本时,它预计 Active Directory 模块在默认情况下可用。如果模块不可用,Lambda 函数会生成一个错误,指出 “未在实例上安装 G AdComputer et-”。

为避免此错误,请使用EC2实例的用户数据安装所需的模块。使用此模式 GitHub 存储库中的EC2WindowsUserdata脚本。

相关资源

AWS 文档

其他资源