本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 在 AWS Organizations 中集中分发软件包
Pradip kumar Pandey、Chintamani Aphale、T.V.R.L.Phani Kumar Dadi、Pratap Kumar Nanda、Aarti Rajput 和 Mayuri Shinde,Amazon Web Services
Summary
为了 AWS 区域 在工作负载之间建立强大的隔离屏障 AWS 账户 ,企业通常会维护多个分散在多个工作负载中的多个分布。为了保持安全和合规,他们的管理团队安装了基于代理的工具,例如CrowdStrikeSentinelOne
Distributor 是 AWS Systems Manager 的一项功能,它通过单一简化界面,自动将软件打包和发布到云端和本地服务器上的托管 Microsoft Windows 和 Linux 实例。此模式演示了如何使用 Terraform 进一步简化管理软件安装的过程,并以最少的努力在大量实例和成员帐户中 AWS Organizations 运行脚本。
此解决方案适用于由 Systems Manager 管理的 Amazon、Linux 和 Windows 实例。
先决条件和限制
包含待安装软件的 Distributor 软件包
Terraform
版本 0.15.0 或更高版本 由 Systems Manager 管理并具有访问目标账户中的亚马逊简单存储服务 (Amazon S3 EC2) 的基本权限的亚马逊弹性计算云 (Amazon S3
) 实例 通过使用 AWS Control Tower 为贵组织设置的登录区
架构
资源详细信息
此模式使用 Account F actory for Terraform (AFT) 创建所有必需的 AWS 资源,并使用代码管道在部署账户
全局自定义包含 Terraform 代码,该代码将在所有注册了 AFT 的账户中运行。
账户自定义包含将在部署账户中运行的 Terraform 代码。
您也可以在不使用 AFT 的情况下部署此解决方案,方法是在账户自定义文件夹中运行 Terraform
Terraform 代码部署了以下资源:
AWS Identity and Access Management (IAM) 角色和策略
SystemsManager-AutomationExecutionRole 授予用户在目标账户中运行自动化的权限。
SystemsManager-AutomationAdministrationRole 授予用户在多个账户和组织单位中运行自动化的权限(OUs)。
软件包的压缩文件和 manifest.json
在 Systems Manager 中,软件包至少包含一个软件或可安装资产 .zip 文件。
JSON 清单包含指向软件包代码文件的指针。
S3 存储桶
在整个组织中共享的分布式程序包安全地存储在 Amazon S3 存储桶中。
AWS Systems Manager 文档(SSM 文档)
DistributeSoftwarePackage包含将软件包分发到成员账户中每个目标实例的逻辑。AddSoftwarePackageToDistributor包含打包可安装软件资产并将其添加到 Automation 的逻辑,该功能为 AWS Systems Manager。
Systems Manager 关联
Systems Manager 关联用于部署解决方案。
架构和工作流

下图说明了以下步骤:
要从集中式账户运行解决方案,您需要将软件包或软件与部署步骤一起上传到 S3 存储桶。
您的自定义包将显示在 Systems Manager 控制台文档
部分的我拥有选项卡中。 State Manager 是 Systems Manager 的一项功能,用于在整个组织中创建、安排和运行软件包的关联。该关联规定,软件包必须先在托管式节点上安装并运行,然后才能安装到目标节点上。
该关联指示 Systems Manager 在目标节点上安装软件包。
对于后续的任何安装或更改,用户可以定期或从单个位置手动运行相同的关联,以跨账户执行部署。
在成员账户中,Automation 会向 Distributor 发送部署命令。
Distributor 跨实例分发软件包。
此解决方案使用其中的管理帐户 AWS Organizations,但您也可以指定一个帐户(委托管理员)来代表组织对其进行管理。
工具
Amazon Web Services
Amazon Simple Storage Service(Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。此模式使用 Amazon S3 集中并安全地存储分发式程序包。
AWS Systems Manager 可帮助您管理在 AWS Cloud端运行的应用程序和基础设施。它简化了应用程序和资源管理,缩短了检测和解决操作问题的时间,并帮助您大规模安全地管理 AWS 资源。此模式使用了 Systems Manager 的以下功能:
Distributor 可以帮助您打包软件并将其发布到 Systems Manager 托管实例。
自动化简化了许多 AWS 服务的常见维护、部署和补救任务。
文档在您的组织和账户中对您的 Systems Manager 托管实例执行操作。
AWS Organizations是一项账户管理服务,可帮助您将多个 AWS 账户整合到一个由您创建和集中管理的组织中。
其他工具
Terraform
是一款基础设施即代码 (IaC) 工具 HashiCorp ,可帮助您创建和管理云和本地资源。
代码存储库
此模式的说明和代码可在 GitHub 集中式包分发
最佳实践
要向关联分配标签,请使用 AWS Command Line Interface (AWS CLI) 或 AWS Tools for PowerShell。不支持使用 Systems Manager 控制台将标签添加到关联。有关更多信息,请参阅 Systems Manager 文档中的标记 Systems Manager 资源。
要使用共享自另一个账户的文档的新版本来运行关联,将文档版本设置为
default。要仅为目标节点添加标签,请使用一个标签键。如果要使用多个标签键将您的节点设为目标,请使用资源组选项。
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
克隆存储库。 |
| DevOps 工程师 |
更新全局变量。 | 在
| DevOps 工程师 |
更新账户变量。 | 在
| DevOps 工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
更新 State Manager 关联的输入参数。 | 更新
| DevOps 工程师 |
准备软件包的压缩文件和 | 此模式在文件夹中提供了带有 PowerShell 安装和卸载脚本的可安装文件示例(Windows 为.msi,Linux 为.rpm)。
| DevOps 工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
初始化 Terraform 配置。 | 要使用 AFT 自动部署解决方案,请将代码推送到 AWS CodeCommit:
您也可以在不使用 AFT 的情况下通过从
| DevOps 工程师 |
预览更改。 | 要预览 Terraform 将对基础设施所做的更改,请运行以下命令:
此命令评估 Terraform 配置,以确定已声明的资源的所需状态。它还将所需状态与要在工作区中预调配的实际基础设施进行比较。 | DevOps 工程师 |
应用更改。 | 运行以下命令以实现您对
| DevOps 工程师 |
| Task | 说明 | 所需技能 |
|---|---|---|
验证 SSM 文档创建。 |
您应看到 | DevOps 工程师 |
验证自动化部署成功。 |
| DevOps 工程师 |
验证软件包已部署到目标成员账户实例。 |
| DevOps 工程师 |
问题排查
| 问题 | 解决方案 |
|---|---|
State Manager 关联失败或停留在待处理状态。 | 请参阅 AWS 知识中心中的疑难解答信息 |
计划关联无法运行。 | 您的日程安排可能无效。State Manager 目前不支持在 cron 表达式中为关联指定月数。使用 cron 或 rate 表达式来确认计划。 |