

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建置 AMIs 以搭配 使用的最佳實務 AWS Marketplace
<a name="best-practices-for-building-your-amis"></a>

本主題提供最佳實務和參考，協助您建置 Amazon Machine Image (AMIs) 以搭配 使用 AWS Marketplace。建置並提交至 AMIs AWS Marketplace 必須遵循所有 AWS Marketplace 產品政策。如需詳細資訊，請參閱下列區段。

**Topics**
+ [保護轉售權利](#rights)
+ [建置 AMI](#building-an-ami)
+ [準備和保護您的 AMI AWS Marketplace](#securing-an-ami)
+ [掃描您的 AMI 以取得發佈需求](#self-service-scanning)
+ [驗證您的軟體是否在 AWS Marketplace AMI 上執行](#verifying-ami-runtime)

## 保護轉售權利
<a name="rights"></a>

對於非免費 Linux 發行版本，除了 AWS提供的 Amazon Linux、RHEL 和 SUSE 之外，您需負責保護其轉售權利的安全。您不需要保護 Windows AMIs 的轉售權利。

## 建置 AMI
<a name="building-an-ami"></a>

使用下列準則來建置 AMIs：
+ 確保您的 AMI 符合所有[AWS Marketplace 政策](https://docs.aws.amazon.com/marketplace/latest/userguide/product-and-ami-policies.html)。
+ 在美國東部 （維吉尼亞北部） 區域中建立您的 AMI。
+ 從 Amazon Elastic Block Store (Amazon EBS) 支援的現有、維護良好的 AMIs 建立產品，其中包含信任且信譽良好的來源提供的明確定義生命週期，例如 AWS Marketplace。
+ 使用最新的作業系統、套件和軟體來建置 AMI。
+  確保您的 AMI 是以公有 Amazon EC2 AMI 為基礎，該 Amazon EC2 AMI 使用硬體虛擬機器 (HVM) 虛擬化和 64 位元架構。
+ 開發一套可重複建置、更新及重新發佈 AMI 的流程。
+ 在所有版本和產品中使用一致的作業系統 (OS) 使用者名稱。建議的預設使用者名稱`ec2-user`適用於 Linux 和其他類似 Unix 的系統，以及`Administrator`適用於 Windows。
+  AWS Marketplace 在提交要發佈的最終 AMI 之前，請從 AMI 啟動和測試執行個體，以驗證預期的最終使用者體驗。在此執行個體上測試所有安裝方法、功能和效能。
+ 檢查連接埠設定，如下所示：
  + 作為針對開放防火牆、反向代理和 SSRF 漏洞[的最佳實務安全組態](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)，**IMDS 支援**選項必須設定為僅限 **IMDSv2**。在最終建置階段註冊新的 AMI 時，可以使用下列 CLI：
    + `aws ec2 register-image --name my-image --root-device-name /dev/xvda --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} --architecture x86_64 --imds-support v2.0`

如需建立 AMI 的詳細資訊，請參閱下列資源：
+  《[Amazon EC2 使用者指南》中的建立 Amazon EBS 後端 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) *Amazon EC2 *
+  《[Amazon EC2 使用者指南》中的使用 Windows Sysprep 建立](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-create-win-sysprep.html) *Amazon EC2 *AMI 
+  [如何從 EBS 支援的執行個體建立 Amazon Machine Image (AMI)？](https://aws.amazon.com/premiumsupport/knowledge-center/create-ami-ebs-backed/) 
+  [Amazon Linux AMI](https://aws.amazon.com/amazon-linux-ami/) 
+  [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)和[執行個體類型](http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/instance-types.html?r=2153) 
+  根據預設[，設定 IMDS V2 使用的 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration) 

## 準備和保護您的 AMI AWS Marketplace
<a name="securing-an-ami"></a>

我們建議您遵循下列準則來建立安全的 AMIs：
+ 使用 *Amazon EC2 使用者指南*中的[共用 Linux AMIs 指導方針](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/building-shared-amis.html) 
+ 建構您的 AMI 以部署為最低安裝，以減少攻擊面。停用或移除不必要的服務和程式。
+ 盡可能使用網路流量的end-to-end加密。例如，使用 Secure Sockets Layer (SSL) 保護您和買方之間的 HTTP 工作階段。確保您的服務僅使用有效且up-to-date憑證。
+ 記錄您的 AMI 產品時，提供安全群組建議給買方，以控制其執行個體的傳入流量存取。您的建議應指定下列項目：
  + 您的服務運作所需的最小連接埠集。
  + 管理存取的建議連接埠和來源 IP 地址範圍。

  這些安全群組建議可協助買方實作適當的存取控制。如需如何將新版本新增至 AMI 產品的詳細資訊，請參閱 [新增新版本](single-ami-versions.md#single-ami-adding-version)。
+ 考慮定期對您的 AWS 運算環境執行滲透測試，或考慮聘請第三方代表您執行此類測試。如需詳細資訊，包括滲透測試申請表，請參閱[AWS 滲透測試](https://aws.amazon.com/security/penetration-testing/)。
+ 請注意 Web 應用程式的前 10 個漏洞，並相應地建置您的應用程式。若要進一步了解，請參閱[開放式 Web 應用程式安全專案 (OWASP) - 十大 Web 應用程式安全風險](https://owasp.org/www-project-top-ten/)。發現新的網際網路漏洞時，請立即更新 AMI 中隨附的任何 Web 應用程式。包含此資訊的資源範例包括 [SecurityFocus](http://www.securityfocus.com/vulnerabilities) 和 [NIST 國家漏洞資料庫](http://nvd.nist.gov/)。

如需安全性的詳細資訊，請參閱下列資源：
+  [AWS 雲端安全性](https://aws.amazon.com/security/) 
+  [網際網路安全中心 (CIS)：安全基準](http://benchmarks.cisecurity.org/downloads/benchmarks/) 
+  [開放式 Web 應用程式安全專案 (OWASP)：安全編碼實務 - 快速參考指南](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/) 
+  [OWASP 十大 Web 應用程式安全風險](https://owasp.org/www-project-top-ten/) 
+  [SANS (SysAdmin、稽核、網路和安全性） 常見弱點列舉 (CWE) 前 25 名最危險的軟體錯誤](http://www.sans.org/top25-software-errors/) 
+  [安全焦點](http://www.securityfocus.com/vulnerabilities) 
+  [NIST 國家漏洞資料庫](http://nvd.nist.gov/) 

## 掃描您的 AMI 以取得發佈需求
<a name="self-service-scanning"></a>

若要在 AWS Marketplace 目錄上發佈 AMI，您必須完成 AMI 掃描。AMI 掃描會檢查未修補的常見漏洞和暴露 (CVEs)，並驗證您的 AMI 是否遵循安全最佳實務。如需詳細資訊，請參閱[準備和保護 的 AMI AWS Marketplace](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html#securing-an-ami)

 若要執行 AMI 掃描，請選擇下列其中一個選項：

**選項 1：資產功能表**

此方法允許在產品建立流程之外掃描 AMIs。對於使用 SAAS Quick Launch 且需要掃描資產而不建立 AMI 產品的 SaaS 賣方也很有用。

1. 從 [AWS Marketplace 管理入口網站](https://aws.amazon.com/marketplace/management/homepage)導覽至**資產**功能表，然後選擇 **Amazon Machine Image**。

1. 若要開始掃描程序，請選擇**新增 AMI**。

1. 您可以返回此頁面來檢視 AMIs掃描狀態。

**選項 2：請求變更功能表**

此選項適用於已建立 AMI 產品的賣方。如需進一步了解，請參閱 [建立 AMI 型產品](ami-single-ami-products.md)。

1. 從 [AWS Marketplace 管理入口網站](https://aws.amazon.com/marketplace/management/homepage)導覽至**產品**選單，然後選擇**伺服器**。

1. 從**伺服器產品中選取您的產品**。這必須是 AMI 型產品。產品可以處於任何狀態，不需要處於**公**有發佈狀態即可進行後續步驟。

1. 導覽至**請求變更**選單，然後選取**更新版本**。

1. 選取**測試「新增版本」**。依照提示提交包含 AMI 詳細資訊的請求。如果請求成功，這表示 AMI 已成功通過掃描。與**新增版本**選項不同，如果掃描成功，**測試「新增版本」**不會將新版本新增至 AMI 型產品。

**注意**  
若要了解如何授予 AMI 的 AWS Marketplace 存取權，請參閱 [提供 AMI 的 AWS Marketplace 存取權](single-ami-marketplace-ami-access.md)。

## 驗證您的軟體是否在 AWS Marketplace AMI 上執行
<a name="verifying-ami-runtime"></a>

我們強烈建議您的軟體在執行時間驗證其是否在從 AMI 產品建立的 Amazon EC2 執行個體上執行。

若要驗證是否已從您的 AMI 產品建立 Amazon EC2 執行個體，請使用內建於 Amazon EC2 的執行個體中繼資料服務。下列步驟會引導您完成此驗證。如需使用中繼資料服務的詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的[執行個體中繼資料和使用者資料](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)。

1. *取得執行個體身分文件*

   每個執行中的執行個體都有可從執行個體存取的身分文件，可提供執行個體本身的資料。下列範例顯示從執行個體使用 curl 來擷取執行個體身分文件。

   IMDSv2：（建議）

   ```
   TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   && curl -H "X-aws-ec2-metadata-token: $TOKEN" 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"
   }
   ```

   IMDSv1：

   ```
   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"
   }
   ```

1. *驗證執行個體身分文件*

   您可以使用簽章來驗證執行個體身分是否正確。如需此程序的詳細資訊，請參閱《*Amazon Elastic Compute Cloud 使用者指南*》中的[執行個體身分文件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)。

1. *驗證產品代碼*

   當您最初提交 AMI 產品進行發佈時，您的產品會獲指派一個[產品代碼](https://docs.aws.amazon.com/marketplace/latest/userguide/ami-getting-started.html#ami-product-codes) AWS Marketplace。您可以檢查執行個體身分文件中`marketplaceProductCodes`的欄位來驗證產品代碼，也可以直接從中繼資料服務取得：

   IMDSv2：

   ```
   TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/product-codes
   ```

   如果產品代碼與您的 AMI 產品相符，則執行個體是從您的產品建立的。