构建 AMI 的最佳实操 - AWS Marketplace

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

构建 AMI 的最佳实操

本主题提供了一些最佳实践和参考,可帮助您构建用于的 Amazon 系统映像 (AMI)。 AWS Marketplace创建并提交给的 AMI AWS Marketplace 必须遵守所有 AWS Marketplace 产品政策。

保护转售权

您有责任保护非免费 Linux 发行版的转售权,但 AWS提供的亚马逊 Linux、RHEL、SUSE 和 Windows AMI 除外。

构建 AMI

可采用以下准则来构建 AMI:

  • 确保您的 AMI 符合所有 AWS Marketplace 政策,包括禁用 root 登录。

  • 在美国东部(弗吉尼亚州北部)区域中创建 AMI。

  • 从现有受到良好维护且由 Amazon Elastic Block Store (Amazon EBS) 支持的 AMI 创建产品,并且产品必须具有由可信、可靠来源(例如, AWS Marketplace)提供的明确定义的生命周期。

  • 使用最多的 up-to-date 操作系统、软件包和软件构建 AMI。

  • 确保所有 AMI 都必须从一个使用硬件虚拟机 (HVM) 虚拟化和 64 位架构的公有 AMI 开始。

  • 制定一个用于构建、更新和重新发布 AMI 的可重复过程。

  • 跨所有版本和产品使用一致的操作系统 (OS) 用户名。我们建议您使用 ec2-user

  • 根据所需的最终用户体验从最终 AMI 配置一个运行实例,并测试所有安装方法、特征和性能,然后 提交给 AWS Marketplace。

  • 按如下方式检查端口设置:

    • 基于 Linux 的 AMI – 确保有效的 SSH 端口处于打开状态。默认 SSH 端口为 22。

    • 基于 Windows 的 AMI – 确保 RDP 端口处于打开状态。默认端口为 3389。此外,WinRM 端口(默认为 5985)必须打开到 10.0.0.0/16 和 10.2.0.0/16。

有关创建 AMI 的更多信息,请参阅以下资源:

Amazon EC2 用户指南中@@ 创建您自己的 AMI

Amazon EC2 用户指南中@@ 创建自定义 Windows AMI

如何从由 EBS 支持的 实例创建 亚马逊机器映像 (AMI)?

Amazon Linux AMI

Amazon EC2 实例类型实例类型

为您的 AMI 做好准备和保护 AWS Marketplace

我们建议按照以下准则来创建安全的 AMI:

  • 使用亚马逊 EC2 用户指南中的共享 Linux AM I 指南

  • 设计 AMI 的架构以便将其部署为最小安装,从而减小攻击面。禁用或删除不必要的服务和程序。

  • 只要有可能,就对网络流量使用 end-to-end 加密。例如,使用安全套接字层 (SSL) 保护您与买家之间的 HTTP 会话。确保您的服务仅使用有效的和 up-to-date 证书。

  • 向 AMI 产品添加新版本时,请配置安全组以控制对您的实例的入站流量访问。确保您的安全组配置为仅允许访问为服务提供必需功能所需的最少一组端口。允许对所需的最少一组端口和源 IP 地址范围进行管理访问。有关如何向 AMI 产品添加新版本的更多信息,请参阅添加新版本

  • 可以考虑定期对您的 AWS 计算环境进行渗透测试,或者考虑聘请第三方代表您进行此类测试。有关更多信息,包括渗透测试申请表单,请参阅 AWS 渗透测试

  • 注意 Web 应用程序的十大漏洞并相应地构建您的应用程序。要了解更多信息,请参阅开源 Web 应用程序安全计划 (OWASP) – 十大 Web 应用程序安全风险。当发现新的 Internet 漏洞时,迅速更新您的 AMI 中随附的任何 Web 应用程序。包含此信息的资源示例包括SecurityFocusNIST 国家漏洞数据库

有关安全性的更多信息,请参阅以下相关资源:

扫描您的 AMI 以了解发布要求

为了在将您的 AMI 作为新产品或版本提交之前对其进行验证,您可以使用自助扫描。自助扫描器将检查未修补的常见漏洞和漏洞 (CVE),并验证是否遵循了安全最佳实操。有关更多信息,请参阅为您的 AMI 做好准备和保护 AWS Marketplace

从中 AWS Marketplace 管理门户,从 “资产” 菜单中选择 Amazon 系统映像。选择添加 AMI 以开始扫描过程。返回此页面,您可以查看 AMI 的扫描状态。

注意

要了解如何授予对您的 AMI 的 AWS Marketplace 访问权限,请参阅允许 AWS Marketplace 访问您的 AMI

验证您的软件是否在 AWS Marketplace AMI 上运行

您可能希望让您的软件在运行时验证它是否在使用您的 AMI 产品创建的 Amazon EC2 实例上运行。

要验证 Amazon EC2 实例是通过您的 AMI 产品创建的,请使用 Amazon EC2 中内置的实例元数据服务。以下步骤将引导您完成此验证。有关使用元数据服务的更多信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的实例元数据和用户数据

  1. 获取实例身份证件

    每个正在运行的实例都有一个可从该实例访问的身份证件,该文件提供有关实例本身的数据。以下示例演示如何使用实例中的 curl 检索实例身份文档。

    curl http://169.254.169.254/latest/dynamic/instance-identity/document { "accountId" : "0123456789", "architecture" : "x86_64", "availabilityZone" : "us-east-1e", "billingProducts" : null, "devpayProductCodes" : null, "marketplaceProductCodes" : [ "0vg0000000000000000000000" ], "imageId" : "ami-0123456789abcdef1", "instanceId" : "i-0123456789abcdef0", "instanceType" : "t2.medium", "kernelId" : null, "pendingTime" : "2020-02-25T20:23:14Z", "privateIp" : "10.0.0.2", "ramdiskId" : null, "region" : "us-east-1", "version" : "2017-09-30" }
  2. 验证实例身份文档

    您可以使用签名验证实例身份是否正确。有关此过程的详细信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的实例身份文档

  3. 验证产品代码

    当您最初提交 AMI 产品以供发布时, AWS Marketplace会为您的产品分配一个产品代码。您可以通过检查实例身份文档中的 marketplaceProductCodes 字段来验证产品代码,也可以直接从元数据服务获取产品代码:

    curl http://169.254.169.254/latest/meta-data/product-codes 0vg0000000000000000000000

    如果产品代码与您的 AMI 产品的代码相匹配,则该实例是根据您的产品创建的。

您可能还希望验证实例身份证件中的其他信息,例如 instanceId 和实例 privateIp