本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 在 AWS Organizations 中集中分发软件包
由 Pradip kumar Pandey (AWS)、Aarti Rajput (AWS)、Chintamani Aphale (AWS)、T.V.R.L.Phani Kumar Dadi (AWS)、Mayuri Shinde (AWS) 和 Pratap Kumar Nanda (AWS) 创作
摘要
为了 AWS 区域 在工作负载之间建立强大的隔离屏障 AWS 账户 ,企业通常会维护多个分散在多个工作负载中的多个分布。为了保持安全和合规,他们的管理团队安装了基于代理的工具,例如CrowdStrikeSentinelOne
Dist@@ ri butor 是一项功能 AWS Systems Manager,它通过一个简化的界面,自动将软件打包和发布到云端和本地服务器上的托管 Microsoft Windows 和 Linux 实例。此模式演示了如何使用 Terraform 进一步简化管理软件安装的过程,并以最少的努力在大量实例和成员帐户中 AWS Organizations 运行脚本。
此解决方案适用于由 Systems Manager 管理的亚马逊、Linux 和 Windows 实例。
先决条件和限制
包含要安装的软件的分销商软件包
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 会向分销商发送部署命令。
分销商跨实例分发软件包。
此解决方案使用其中的管理帐户 AWS Organizations,但您也可以指定一个帐户(委托管理员)来代表组织对其进行管理。
工具
Amazon Web Services
Amazon Simple Storage Service(Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。这种模式使用 Amazon S3 来集中和安全地存储分发的软件包。
AWS Systems Manager 可帮助您管理在 AWS 云中运行的应用程序和基础设施。它简化了应用程序和资源管理,缩短了检测和解决操作问题的时间,并帮助您大规模安全地管理 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 | 描述 | 所需技能 |
---|---|---|
更新状态管理器关联的输入参数。 | 更新
| DevOps 工程师 |
准备压缩文件和软件包的 | 此模式在文件夹中提供了带有 PowerShell 安装和卸载脚本的可安装文件示例(Windows 为.msi,Linux 为.rpm)。
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
初始化 Terraform 配置。 | 要使用 AFT 自动部署解决方案,请将代码推送到 AWS CodeCommit:
您也可以在不使用 AFT 的情况下通过从文件夹中运行 Terraform 命令来部署此解决方案。
| DevOps 工程师 |
预览更改。 | 要预览 Terraform 将对基础架构所做的更改,请运行以下命令:
此命令评估 Terraform 配置,以确定已声明资源的所需状态。它还将所需状态与要在工作空间中配置的实际基础架构进行比较。 | DevOps 工程师 |
应用更改。 | 运行以下命令以实现您对
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
验证 SSM 文档的创建。 |
您应该会看到 | DevOps 工程师 |
验证自动化是否成功部署。 |
| DevOps 工程师 |
验证软件包是否已部署到目标成员账户实例。 |
| DevOps 工程师 |
故障排除
事务 | 解决方案 |
---|---|
状态经理关联失败或停留在待处理状态。 | 请参阅 AWS 知识中心中的疑难解答信息 |
计划关联无法运行。 | 您的日程安排规格可能无效。状态管理器目前不支持在 cron 表达式中为关联指定月份。使用 cron 或费率表达式来确认日程安排。 |