第 1 章 AMI 安全指导原则
Amazon 系统映像 (AMI) 提供启动实例 (云中的虚拟服务器) 所需的信息。 AMI 包括以下内容:
一个用于实例 (例如,操作系统、应用程序服务器和应用程序) 根卷的模板
控制可以使用 AMI 启动实例的 AWS 账户的启动许可
一个指定在实例启动时要附加到实例的卷的块储存设备映射。
AWS Marketplace 是一个在线商店,您可以在商店中出售或购买在 Amazon Web Services (AWS) 上运行的软件,AWS Marketplace 现在是通过 AWS 销售软件和服务的统一电子商务平台。您可以使用 AWS Marketplace 销售 AMI,AWS Marketplace 提供组织有序的购物体验,为提高您创建的 AMI 的可靠性,并缩小攻击面,请遵循以下指导性原则:
1.1 AMI 创建阶段
从现有的、维护良好的 EBS 支持的 AMI 中创建定制的 AMI,并具有明确定义的生命周期,请不要使用来历不明的 AMI,为节省成本推荐使用 Amazon Linux。
开发一个可重复的过程来构建、更新和重新发布 AMI。
在构建映像之前,请提前配置一个符合您软件运行环境的 EC2 实例。
构建映像后,在 Amazon EC2 环境中运行它以检查安装,功能和性能等内容。
使用最新的操作系统、软件包和软件构建 AMI。
1.2 AMI 安全防护
确保您的 AMI 不包含没有密码的用户帐户或包含默认密码的用户帐户。
使用为每个用户创建唯一密码或密钥的服务生成密码,并将密码直接发送给用户或创建强制功能以供用户更改密码。
只要有可能,对网络流量使用端对端加密。例如,使用安全套接字层(SSL)来保护您和您的客户之间的 HTTP 会话。确保您的服务仅使用有效和最新的证书。
使用安全组来控制对您的实例的入站流量访问。确保您的安全组被配置为只允许访问为您的服务提供必要功能所需的最小端口集。另外,只允许管理员访问必要的最小的一组端口和源 IP 地址范围。
构建您的 AMI 作为最低限度的安装来减少攻击面。您应该禁用或删除不必要的服务和程序。
禁用 sshd(SSH 守护进程)的远程 root 登录。要求所有用户使用他们的标准用户名进行 SSH。如果他们需要访问 root 权限,他们应该使用 sudo 命令。sudo 允许您控制允许哪些用户执行根功能并记录活动,以便有审计跟踪。
用户帐户的 SSH 访问应该通过为每个用户生成安全密钥来完成。不要为用户提供简单的基于密码的帐户。为每个用户生成安全密钥以启用对实例的 SSH 访问。
请确保敏感信息(如密码或密钥材料)绝不会以明文形式写入日志,标签或控制台等地方。对于 Windows,应检查 Ec2Config 服务配置以确保其符合您的安全策略。
通过仅允许具有访问系统的有效理由的 IP 地址范围(例如公司或组织中的 IP 地址范围)来限制对用于管理访问的端口的访问。
当发现新的 Internet 漏洞时,请及时更新 AMI 中的所有 Web 应用程序。
1.3 AMI 提交阶段
在 AWS Marketplace 上提交 AMI 之前,我们建议您尽可能确保映像不存在已知的漏洞和恶意软件。Chkrootkit,rkhunter 和 Nessus 都有一些工具可用于此目的。
在测试之后,确保通过移除测试中使用的所有用户,帐户,密码,密钥和文档(无论这些项目可能存储在哪里),从系统中删除所有用户凭据。
在 AWS Marketplace 上提交产品之前,请确保已经删除了用于测试目的的所有 SSH 密钥。有时 SSH 密钥存储在 AMI 的多个地方。检查您是否找到并删除了您不打算在 AMI 中运送的所有 SSH 密钥。
不要在您的 AMI 中包含收集和输出客户数据的软件。
1.4 AMI 维护阶段
一旦您的 AMI 发布,就有一个流程来监控 AMI 中部署的软件的漏洞和安全更新。确保基于 AMI 的正在运行的实例经常更新,尤其是在有新的更新可用时。
定期用最新的更新重建 AMI,以便基于 AMI 新创建的实例将具有最新的补丁。
考虑定期对 AWS 计算环境进行渗透测试。
第 2 章 AMI 上线操作指南
Marketplace AMI 主要是包括了 Seller 应用软件的一种分发形式,预安装、预配置,用户通过订阅快速部署到自己的 VPC,简化软件的安装配置过程。
首先,Seller 需要在 AWS 中国(宁夏)区域(cn-northwest-1)创建、共享 AMI,并通过安全审核,然后进行 Listing,需要选择 AMI 所要支持的 Region 以及产品相关的一些信息,最后到 Publishing,此时将由 Marketplace 运营团队分发 AMI 到所支持的 Region,并能在 Marketplace 进行订阅。
后面我们将详细介绍从零开始制作 AMI、从共享 AMI 生成自己的 AMI、从北京往宁夏复制 AMI、把虚拟机导入成一个 AMI 四种种情况进行说明。
2.1 从零开始制作 AMI
登录 AWS 中国控制台,选择 EC2,并从右上角切换到中国(宁夏)区域;
2.1.1 Linux AMI 制作过程
启动一个全新的 EC2 实例并安装、配置、打包您的软件到实例操作系统;
1.为了系统完全,尽可能选择较新的 AMI 作为基础环境;
2.为了节省成本,尽可能选择 Amazon Linux 作为基础环境;
3.做好磁盘规划,EBS 空间不要过大,以满足需要的最小空间为限,后期客户可根据需要自行调整;
4.如果软件有默认密码,请选择部署后的实例 ID(AMI 启动过程中可以通过实例元数据获得)作为密码;
在打包结束后,请参考第一章清理 SSH Key 相关信息,主要是清除下面的 Key 文件,不留后门,如果不清理过不了安全检查。
sudo shred -u /etc/ssh/_key /etc/ssh/_key.pub
sudo rm /root/.ssh/authorized_keys
sudo rm /home/ec2-user/.ssh/authorized_keys
或
sudo rm /home/用户/.ssh/authorized_keys
用户根据不同的操作系统会有所区别。
2.1.2 Windows Server 2016 及更高版本 AMI 制作过程
如果采用 Windows AMI 请参考下面的内容:
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ami-create-standard.html
系统准备 (Sysprep) 工具可简化复制 Microsoft Windows 自定义安装的过程。我们建议您使用 Sysprep 创建标准化 Amazon 系统映像 (AMI)。随后可以通过此标准化映像为 Windows 创建新的 Amazon EC2 实例。
建议您将 Sysprep 与 EC2Launch(Windows Server 2016 及更高版本)或 EC2Config 服务(Windows Server 2016 之前的版本)一起运行。
不要使用 Sysprep 创建实例备份。Sysprep 会删除特定于系统的信息;删除这些信息可能会对实例备份导致意外结果。
Windows 2016 及更高版本操作系统,生成 AMI 前请执行下面的操作:
制作 AMI 前需要运行一个操作(将 Sysprep 与 EC2Launch 结合使用)进行设置,并会自动停止 Windows,在停止的 Windows 实例上再做 AMI,就可以正常解密出密码了,如果不运行此操作生成的 AMI 无法获取密码。详细参考如下:
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ec2launch.html
使用 EC2Launch Settings 应用程序运行 Sysprep,步骤如下:
1.在 Amazon EC2 控制台中,找到或创建 Windows Server 2016 或更高版本 AMI。
2.从该 AMI 中启动 Windows 实例。
3.连接到您的 Windows 实例并对其进行自定义。
4.搜索并运行 EC2LaunchSettings 应用程序。默认情况下它位于以下内容:
C:\ProgramData\Amazon\EC2-Windows\Launch\Settings。
5.根据需要选中或清除选项。这些设置存储在 LaunchConfig.json 文件中。
6.对于 Administrator Password,请执行以下操作之一:
选择 Random。EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置,以便在重新启动或停止再启动实例后该密码仍然存在。
选择 Specify 并键入一个符合系统要求的密码。该密码以明文方式存储在 LaunchConfig.json 文件中,并且在 Sysprep 设置管理员密码时会被删除。如果现在就关闭,则会立即设置密码。EC2Launch 使用用户的密钥对密码进行加密。
选择 DoNothing 并在 unattend.xml 文件中指定密码。如果未在 unattend.xml 中指定密码,管理员账户会被禁用。
7.选择 Shutdown with Sysprep (使用 Sysprep 关闭)。
2.1.3 Windows Server 2016 之前版本 AMI 制作过程
通过以下过程可使用 Sysprep 和 EC2Config 服务创建标准化 AMI。
1.在 Amazon EC2 控制台中,查找或创建要复制的 AMI。
2.启动并连接到您的 Windows 实例。
3.对它进行自定义。
4.在 EC2Config 服务应答文件中指定配置设置:
C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml
5.在 Windows 开始菜单中,选择所有程序,然后选择 EC2ConfigService Settings。
6.在 Ec2 Service Properties 对话框中选择 Image 选项卡。有关 Ec2 Service Properties 对话框中的选项和设置的更多信息,请参阅 Ec2 服务属性。
7.选择管理员密码选项,然后选择 Shutdown with Sysprep 或 Shutdown without Sysprep。EC2Config 会根据您选择的密码选项编辑设置文件。
Random:EC2Config 生成一个密码,使用用户的密钥加密,并向控制台显示加密的密码。我们会在首次启动后禁用此设置,以便在重启或停止再启动实例后该密码仍然存在。
Specify:密码以非加密格式(明文)存储在 Sysprep 应答文件中。下一次运行 Sysprep 时,它将设置管理员密码。如果现在就关闭,则会立即设置密码。服务再次启动时,则会删除管理员密码。务必要记住此密码,因为以后无法将其取回。
Keep Existing:运行 Sysprep 或重新启动 EC2Config 时,管理员账户的现有密码不变。务必要记住此密码,因为以后无法将其取回。
8.选择 OK。
如果系统询问您是否想运行 Sysprep 并关闭该实例,请单击 Yes。您会看到 EC2Config 运行 Sysprep。然后,您会退出实例并且实例会关闭。如果您在 Amazon EC2 控制台中查看 Instances (实例) 页面,实例状态会从 running 变为 stopping,然后最终变为 stopped。此时,从该实例创建一个 AMI 是安全的。
第四步:创建映像(建议先停止实例)
创建时间因 EBS 卷大小而异,等待创建结束,在 AMI 里面可以看到刚创建的 AMI,请用此 AMI 去启动新的 AMI,看是否符合预期;
2.2 从共享 AMI 生成自己的 AMI
由于 Seller 需要提定专门的 AWS 帐户来共享 AMI 给 Marketplace 的帐户,如果是其他帐户共享给你的 AMI,你不能再次共享给 AWS 指定的 Marketplace 帐户,需要先拿共享 AMI 启动一个新的 EC2 实例,再创建一个属于自己的 AMI 并共享。
第一步:拿 AMI 启动一个新的实例
如果只是为了生成自己的 AMI,并不需要进系统做配置,可以选无密钥对方式。
创建 AMI 之前,如果是无密钥对方式可以忽略此步骤,如果有密钥对,请参考第一章清理 SSH Key 相关信息,主要是清除下面的 Key 文件,不留后门,如果不清理过不了安全检查。
sudo shred -u /etc/ssh/_key /etc/ssh/_key.pub
rm /home/ec2-user/.ssh/authorized_keys
2.3 从北京往宁夏复制 AMI
如果 Seller 已经在北京有了 AMI,可以直接复制到宁夏,但你必须 AMI 拥有者才允许此操作,否则参照第 2.2 章先生成自己的 AMI。
2.4 把虚拟机导入成 AMI
由于一些 Seller 采用自己定制 Linux 版本进行 AMI 的分发,现阶段没办法完全 100%能导入成功,可以参考 VMimport 的说明进行操作。
https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html
如果 VMimport 不能成功导入 AMI,请自行开 Case 寻求 AWS Support 或直接电话咨询 AWS 售后热线。
中国的 EC2 平台和 AWS Global 存在差异,在 Global 能导入的在中国不一定能导入,请提前测试,如果找不到好的解决办法,建议选中国的标准 AMI 重新部署您的软件。
2.5 如何共享 AMI
选中需要共享给 Marketplace 的 AMI,在权限 Tab 页选择“编辑”,输入帐号即可,大约 5 分钟之后 Marketplace 帐号那边就能看一共享过来的 AMI。
建议不要随便选择公有,在私有模式下
输入 12 位的 Marketplace 帐号
第 3 章 参考资源
3.1 EC2 AMI 技术说明
EC2 AMI 相关说明
https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/AMIs.html
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/AMIs.html
Linux AMI 指导原则
https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/building-shared-amis.html
Windows AMI 指导原则
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ami-create-standard.html
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ec2launch.html#ec2launch-sysprep
共享 AMI
https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/sharing-amis.html
VM Import/Export 虚拟机导入 AMI 说明
https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/vmie_prereqs.html
Public AMI Publishing: Hardening and Clean-up Requirements
https://aws.amazon.com/cn/articles/public-ami-publishing-hardening-and-clean-up-requirements/
How to Share and Use Public AMIs in A Secure Manner
https://aws.amazon.com/cn/articles/how-to-share-and-use-public-amis-in-a-secure-manner/
3.2 Global Marketplace AMI 指导
由于还没有 For China 的 Marketplace 门户网站,有一些 Global 的资源可以参考:
AWS Marketplace 文档中心
https://docs.aws.amazon.com/zh_cn/marketplace/latest/userguide/what-is-marketplace.html
AWS Marketplace 产品和 AMI 策略
https://docs.aws.amazon.com/zh_cn/marketplace/latest/userguide/product-and-ami-policies.html
Building AMIs for AWS Marketplace
https://aws.amazon.com/marketplace/help/seller-building-AMIs?ref=help_ln_sibling
Pricing, Listing and Updating AMIs
https://aws.amazon.com/marketplace/help/seller-AMIs?ref=help_ln_sibling
Help and FAQ
https://aws.amazon.com/marketplace/help?ref_=header_modules_help
Seller Help
https://aws.amazon.com/marketplace/help/seller-before-you-begin?ref=help_ln_sibling
Best Practices Guides
https://aws.amazon.com/marketplace/help/seller-naming-guidance
作者介绍:
蒋华
AWS APN 合作伙伴解决方案架构师,主要负责 AWS (中国)合作伙伴的技术支持工作,同时致力于 AWS 云服务在国内的应用及推广,并在关系型数据库服务、存储服务、分析服务、 HA/DR 及云端应用迁移方面有着丰富的设计和实战经验。加入 AWS 之前,曾在 IBM(中国) 工作 12 年,历任数据库售前工程师、UNIX 服务器资深售前工程师及解决方案架构师,熟悉传统企业 IT 架构、私有云及混合云部署,在数据库、数据仓库、高可用容灾及企业应用架构等方面有多年实践经验。
本文转载自 AWS 技术博客。
原文链接:
https://amazonaws-china.com/cn/blogs/china/aws-marketplace-china-ami-made-technology-direction/
评论