

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

# Amazon EC2 的 Amazon Machine Images
<a name="AMIs"></a>

Amazon Machine Image (AMI) 是一種映像，提供設定並啟動 Amazon EC2 執行個體所需的軟體。每個 AMI 也包含區塊型儲存設備映射，用於指定要附加到您啟動的執行個體的區塊型儲存設備。在您啟動執行個體時，必須指定 AMI。AMI 必須與您為執行個體選擇的執行個體類型相容。您可以使用由 提供的 AMI AWS、公有 AMI、其他人與您共用的 AMI，或是您從 購買的 AMI AWS Marketplace。

AMI 視以下內容而有所不同：
+ 區域
+ 作業系統
+ 處理器架構
+ 根磁碟區類型
+ 虛擬化類型

當您需要多個具有相同組態的執行個體時，可以從單一 AMI 啟動多個執行個體。當您需要具有不同組態的執行個體時，可以使用不同的 AMI 啟動執行個體，如下圖所示。

![\[從 AMI 啟動多個執行個體。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/launch-from-ami.png)


您可從 Amazon EC2 執行個體建立 AMI，然後使用它來啟動具有相同配置的執行個體。您可以將 AMI 複製到另一個 AWS 區域，然後使用它在該區域中啟動執行個體。您也可與其他帳戶共用您建立的 AMI，以便其可使用相同配置來啟動執行個體。您可以使用 來銷售您的 AMI AWS Marketplace。

**Topics**
+ [AMI 特性](ComponentsAMIs.md)
+ [尋找 AMI](finding-an-ami.md)
+ [中的付費 AMIs AWS Marketplace](paid-amis.md)
+ [AMI 生命週期](ami-lifecycle.md)
+ [開機模式](ami-boot.md)
+ [AMI 加密](AMIEncryption.md)
+ [共用 AMI](sharing-amis.md)
+ [監控 AMI 事件](monitor-ami-events.md)
+ [了解 AMI 帳單](ami-billing-info.md)
+ [AMI 配額](ami-quotas.md)

# Amazon EC2 的 AMI 類型和特性
<a name="ComponentsAMIs"></a>

當您啟動執行個體時，您選擇的 AMI 必須與您選擇的執行個體類型相容。您可以根據下列特性來選取要使用的 AMI：
+ [區域](using-regions-availability-zones.md)
+ 作業系統
+ 處理器架構
+ [啟動許可](#launch-permissions)
+ [根磁碟區類型](#storage-for-the-root-device)
+ [虛擬化類型](#virtualization_types)

## 啟動許可
<a name="launch-permissions"></a>

啟動許可確定誰可使用 AMI 來啟動執行個體。您可將啟動許可視為[共用 AMI](sharing-amis.md) – 若您授予啟動許可，則將與其他使用者共用 AMI。僅 AMI 的擁有者可藉由指定啟動許可來確定其可用性。啟動許可分為以下類別。


| 啟動許可 | 描述 | 
| --- | --- | 
| public | 擁有者會將啟動許可授予所有 AWS 帳戶。 | 
| explicit | 擁有者會將啟動許可授予特定 AWS 帳戶、組織或組織單位 (OUs)。 | 
| implicit | 擁有者具有 AMI 的絕對啟動許可。 | 

Amazon 和 Amazon EC2 社群可大量選取公用 AMI。如需詳細資訊，請參閱 [了解 Amazon EC2 的共用 AMI 使用情況](sharing-amis.md)。開發人員可以收取其 AMI 的費用。如需詳細資訊，請參閱[AWS Marketplace 適用於 Amazon EC2 執行個體的 中的付費 AMIs](paid-amis.md)。

## 根磁碟區類型
<a name="storage-for-the-root-device"></a>

所有 AMI 都會分類為 *Amazon EBS 支援*或 *Amazon S3 支援*。
+ Amazon EBS 支援的 AMI – 從 AMI 啟動之執行個體的根磁碟區是從 Amazon EBS 快照建立的 Amazon Elastic Block Store (Amazon EBS) 磁碟區。同時支援 Linux 和 Windows AMI。
+ Amazon S3 支援的 AMI –從 AMI 所啟動之執行個體的根磁碟區是從 Amazon S3 中存放的範本建立的執行個體儲存體磁碟區。僅支援 Linux AMI。Windows AMI 不支援根磁碟區的執行個體儲存體。

如需詳細資訊，請參閱[Amazon EC2 執行個體的根磁碟區](RootDeviceStorage.md)。

**注意**  
Amazon S3 支援的 AMI 被認為生命週期結束，且不建議用於新用途。其僅在以下舊版執行個體類型上受支援：C1、C3、D2、I2、M1、M2、M3、R3 與 X1。

下表摘要說明使用兩種類型之 AMI 時的重要差異。


| 特性 | Amazon EBS 後端 AMI | Amazon S3 支援的 AMI | 
| --- | --- | --- | 
| 根磁碟區 | EBS 磁碟區 | 執行個體儲存體磁碟區 | 
| 執行個體的開機時間 | 通常少於 1 分鐘 | 通常少於 5 分鐘 | 
| 資料持久性  |  根據預設，該執行個體終止時會刪除根磁碟區。\$1 任何其他 EBS 磁碟區上的資料在執行個體終止之後，預設為會持續留存。  |  只有在執行個體的生命週期，才會持續保存執行個體儲存體磁碟區上的資料。  | 
| 停止狀態 |  可以處於停止狀態。即使執行個體已停止且未執行，根磁碟區仍會保留在 Amazon EBS。  |  無法進入停止狀態；執行個體正在執行或已終止。  | 
| 修改 |  在執行個體停止時，可以變更執行個體類型、核心、RAM 磁碟和使用者資料。  |  在執行個體的生命週期，執行個體屬性是固定的。  | 
| 費用 |  會向您收取執行個體使用費、EBS 磁碟區使用費，以及將 AMI 存放為 EBS 快照的費用。  |  會向您收取執行個體使用費，以及在 Amazon S3 中存放 AMI 的費用。  | 
| AMI 建立/綁定 | 使用單一命令/呼叫 | 需要安裝和使用 AMI 工具 | 

\$1 根據預設，EBS 根磁碟區會將 `DeleteOnTermination` 標記設定為 `true`。如需如何變更此標記，以便在終止之後持續保存磁碟區的資訊，請參閱 [在 Amazon EC2 執行個體終止後保留 Amazon EBS 根磁碟區](configure-root-volume-delete-on-termination.md)。

\$1\$1 僅支援 `io2` EBS Block Express。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[佈建 IOPS SSD Block Express 磁碟區](https://docs.aws.amazon.com/ebs/latest/userguide/provisioned-iops.html#io2-block-express)。

# 依據 AMI 確定的根磁碟區類型
<a name="display-ami-root-device-type"></a>

您用來啟動 EC2 執行個體的 AMI 決定了根磁碟區的類型。EC2 執行個體的根磁碟區為 EBS 磁碟區或執行個體儲存體磁碟區。

[基於 Nitro 的執行個體](instance-types.md#instance-hypervisor-type)僅支援 EBS 根磁碟區。僅下面的上一代執行個體類型是支援執行個體儲存體根磁碟區的執行個體類型：C1、C3、D2、I2、M1、M2、M3、R3 和 X1。

------
#### [ Console ]

**確定依據 AMI 決定的根磁碟區類型**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選取 **AMIs**，然後選取 AMI。

1. 在 **Details** (詳細資訊) 索引標籤中，檢查 **Root device type** (根設備類型) 的值，如下所示：
   + `ebs` – 透過此 AMI 啟動的執行個體會獲得 EBS 根磁碟區
   + `instance store` – 透過此 AMI 啟動的執行個體會獲得執行個體儲存體根磁碟區。

------
#### [ AWS CLI ]

**確定依據 AMI 決定的根磁碟區類型**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[].RootDeviceType
```

以下為範例輸出。

```
ebs
```

------
#### [ PowerShell ]

**確定依據 AMI 決定的根磁碟區類型**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
(Get-EC2Image `
    -ImageId ami-0abcdef1234567890).RootDeviceType.Value
```

以下為範例輸出。

```
ebs
```

------

## 虛擬化類型
<a name="virtualization_types"></a>

Amazon Machine Image 會使用兩種虛擬化類型的其中之一：全虛擬化 (PV) 或硬體虛擬機器 (HVM)。PV 和 HVM AMI 之間的主要區別在於開機的方式以及是否可以利用特殊的硬體延伸 (CPU、網路和儲存) 來獲得更好的效能。Windows AMI 為 HVM AMI。

下表比較 HVM 和 PV AMI。


| 特性 | HVM | PV | 
| --- | --- | --- | 
| 描述 | 透過執行映像之根區塊型儲存設備的主開機記錄，HVM AMI 會以完全虛擬化的一組硬體呈現並開機。這種虛擬化類型提供在沒有任何修改的情況下直接在虛擬機器上執行作業系統之能力，就像執行在裸機硬體上一樣。Amazon EC2 主機系統模擬提供給訪客部分或全部底層硬體。 | PV AMIs 使用稱為 PV-GRUB 的特殊開機載入器開機，該開機載入器會啟動開機週期，然後將 menu.lst 檔案中指定的核心載入映像中。全虛擬化訪客可以在不明確支援虛擬化的主機硬體上執行。如需 Amazon EC2 中 PV-GRUB 及其用途的詳細資訊，請參閱[使用者提供的核心](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)。 | 
| 支援的執行個體類型 | 所有目前世代的執行個體類型都支援 HVM AMI。 | 下列的前代執行個體類型支援 PV AMI：C1、C3、M1、M3、M2 和 T1。最新一代執行個體類型不支援 PV AMI。 | 
| 硬體延伸支援 | HVM 訪客可以利用硬體延伸來快速存取主機系統上的底層硬體。其需使用增強型網路和 GPU 處理。為了將指令傳遞給專用網路和 GPU 裝置，作業系統必須能夠存取本地硬體平台；HVM 虛擬化提供此存取。如需詳細資訊，請參閱[增強 Amazon EC2 執行個體的聯網能力](enhanced-networking.md)。 | 不支援，它們無法利用特殊的硬體延伸，例如增強聯網或 GPU 處理。 | 
| [如何尋找](finding-an-ami.md) | 使用主控台或 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令來確認 AMI 的虛擬化類型已設定為 hvm。 | 使用主控台或 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令來確認 AMI 的虛擬化類型已設定為 paravirtual。 | 

**HVM 上的 PV**  
全虛擬化訪客傳統上在儲存和網路操作效能上較 HVM 訪客更佳，因為他們可以利用特殊的 I/O 驅動程式避免模擬網路和硬碟硬體的成本，而 HVM 訪客必須將這些指令轉換為模擬硬體。現在，PV 驅動程式可用於 HVM 訪客，因此無法移植到全虛擬化環境中執行的作業系統，仍然可以藉此在儲存體和網路 I/O 中看到效能優勢。使用 HVM 驅動程式上的這些 PV，HVM 訪客可以取得與全虛擬化訪客相同或更佳的效能。

# 尋找符合 EC2 執行個體需求的 AMI
<a name="finding-an-ami"></a>

AMI 包含啟動執行個體所需的元件和應用程式，例如作業系統和根磁碟區類型。若要啟動執行個體，您必須找到符合您需求的 AMI。

選取 AMI 時，請針對要啟動的執行個體，考慮下列可能會有的要求：
+ AMI 做為 AMI IDs AWS 的區域對於每個區域都是唯一的。
+ 作業系統 (例如 Linux 或 Windows)。
+ 架構 (例如，32 位元、64 位元或 64 位元 ARM)。
+ 根磁碟區類型 (例如 Amazon EBS 或執行個體儲存體)。
+ 供應商 (例如，Amazon Web Services)。
+ 其他軟體 (例如，SQL Server)。

------
#### [ Console ]

當您使用啟動執行個體精靈來啟動執行個體時，可以從 AMI 清單中選取，也可以使用**映像**頁面搜尋所有可用的 AMI。

**如需使用啟動執行個體精靈來尋找 Quick Start AMI**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 從導覽列選取要在其中啟動執行個體的區域。無論您的位置為何，皆可選取任何可用的區域。AMI IDs對每個 AWS 區域都是唯一的。

1. 從主控台儀表板選擇 **Launch Instance** (啟動執行個體)。

1. 在**應用程式和作業系統映像 (Amazon Machine Image)** 下，選取**快速入門**，為您的執行個體選取作業系統 (OS)，然後在 **Amazon Machine Image (AMI)** 中，從清單中選取其中一個常用的 AMI。若未看到您需要的 AMI，您可選擇 **Browser more AMIs** (瀏覽更多 AMI) 以瀏覽完整的 AMI 目錄。如需詳細資訊，請參閱[應用程式和作業系統映像 (Amazon Machine Image)](ec2-instance-launch-parameters.md#liw-ami)。

**使用 AMI 頁面來尋找 AMI**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 從導覽列選取要在其中啟動執行個體的區域。無論您的位置為何，皆可選取任何可用的區域。AMI IDs對每個 AWS 區域都是唯一的。

1. 在導覽窗格中，選擇 **AMI**。

1. (選用) 利用 Filter (篩選) 和 Search (搜尋) 選項來限定所顯示 AMI 的清單範圍，只列出符合標準的 AMI。

   例如，若要列出 提供的所有 AMIs AWS，請選擇**公有映像**。然後使用 Search (搜尋) 選項進一步確定顯示 AMI 清單的範圍。選擇 ** Search** (搜尋) 列，然後從選單中依序選擇 **Owner alias**(擁有者別名)、**=** 運算子和值 **amazon**。若要尋找符合特定平台 (例如 Linux 或 Windows) 的 AMI，請再次選擇**搜尋**列，並依序選擇**平台**、**=** 運算子，然後從提供的清單選擇作業系統。

1. (選用) 選擇**喜好設定**圖示，以選取要顯示的映像屬性，例如根磁碟區類型。或者，您可以從清單中選取 AMI，然後在 **Details** (詳細資訊) 索引標籤上檢視其屬性。

1. 在選取 AMI 之前，重要的是檢查 AMI 是否為執行個體儲存體支援的執行個體或 Amazon EBS 支援的執行個體，而且您知悉這種差異造成的影響。如需詳細資訊，請參閱[根磁碟區類型](ComponentsAMIs.md#storage-for-the-root-device)。

1. 若要從這個 AMI 啟動執行個體，請先選取該 AMI，然後再選擇**從映像啟動執行個體**。如需有關使用主控台啟動執行個體的詳細資訊，請參閱[使用主控台中的啟動執行個體精靈，啟動 EC2 執行個體](ec2-launch-instance-wizard.md)。如果您目前尚未準備好要啟動執行個體，請記下該 AMI ID，以待日後使用。

------
#### [ AWS CLI ]

請使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令，來尋找滿足您要求的 AMI。此命令預設會傳回全部公有、您擁有，以及與您共用的 AMI。

**如需尋找 Amazon 擁有的 AMI**  
使用 `--owners` 選項並搭配 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images --owners amazon
```

**如需尋找 Windows AMI**  
新增下列篩選條件只會顯示 Windows AMI。

```
--filters "Name=platform,Values=windows"
```

**如需尋找 EBS 支援的 AMI**  
新增下列篩選條件只會顯示 Amazon EBS 支援的 AMI：

```
--filters "Name=root-device-type,Values=ebs"
```

------
#### [ PowerShell ]

請使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet，來尋找滿足您要求的 AMI。此 cmdlet 預設會傳回全部公有、您擁有，或者與您共用的 AMI。

**如需尋找 Amazon 擁有的 AMI**  
使用 `-Owner` 參數搭配 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 命令。

```
Get-EC2Image -Owner amazon
```

**如需尋找 Windows AMI**  
新增下列篩選條件只會顯示 Windows AMI。

```
-Filter @{Name="platform"; Values="windows"}
```

如需額外範例，請參閱 *AWS Tools for PowerShell 使用者指南*中的[使用 Windows PowerShell 尋找 Amazon 系統映像](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-ec2-get-amis.html)。

------

**相關資源**

若要了解特定作業系統 AMI 的相關詳細資訊，請參閱以下各項：
+ Amazon Linux 2023 – *Amazon Linux 2023 使用者指南*中的 [AL2023 on Amazon EC2](https://docs.aws.amazon.com/linux/al2023/ug/ec2.html)
+ Ubuntu – *Canonical Ubuntu 網站*上的 [Amazon EC2 AMI 定位器](https://cloud-images.ubuntu.com/locator/ec2/)
+ RHEL – Red Hat 網站的 [Amazon Web Services (AWS) 提供的 Red Hat Enterprise Linux Images (AMI)](https://access.redhat.com/solutions/15356)
+ Windows Server – [AWS Windows AMI 參考](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/windows-amis.html)

如需您可以在 上訂閱AMIs 相關資訊， AWS Marketplace 請參閱 [AWS Marketplace 適用於 Amazon EC2 執行個體的 中的付費 AMIs](paid-amis.md)。

若要了解有關如何使用 Systems Manager，協助使用者尋找在啟動執行個體時應使用的最新 AMI 的詳細資訊，請參閱以下各項：
+ [使用 Systems Manager 來參數參考 AMI](using-systems-manager-parameter-to-find-AMI.md)
+ [使用 Systems Manager 公有參數來參考最新的 AMI](finding-an-ami-parameter-store.md)

# 使用 Systems Manager 來參數參考 AMI
<a name="using-systems-manager-parameter-to-find-AMI"></a>

當您在 Amazon EC2 主控台中使用 EC2 啟動執行個體精靈啟動執行個體時，您可以從清單中選擇 AMI，也可以選取指向 AMI ID 的 AWS Systems Manager 參數 （本節中說明）。 Amazon EC2 如果您使用自動化程式碼來啟動執行個體，則可以指定 Systems Manager 參數而非 AMI ID。

Systems Manager 參數是您可以在 Systems Manager 參數存放區中建立的客戶定義索引鍵/值組。參數存放區提供一個中央存放區，可將您的應用程式組態值外部化。如需詳細資訊，請參閱*「AWS Systems Manager 使用者指南」*中的 [AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)。

當您建立指向 AMI ID 的參數時，請務必將資料類型指定為 `aws:ec2:image`。指定此資料類型可確保在建立或修改參數時，參數值會驗證為 AMI ID。如需詳細資訊，請參閱*「AWS Systems Manager 使用者指南」*中的 [Amazon Machine Image ID 的原生參數支援](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)。

**Topics**
+ [使用案例](#systems-manager-parameter-use-case)
+ [許可](#systems-manager-permissions)
+ [限制](#AMI-systems-manager-parameter-limitations)
+ [使用 Systems Manager 參數啟動執行個體](#systems-manager-parameter-launch-instance)

## 使用案例
<a name="systems-manager-parameter-use-case"></a>

使用 Systems Manager 參數指向 AMI ID 時，能讓使用者在啟動執行個體時更輕鬆選取正確的 AMI。Systems Manager 參數還可以簡化自動化程式碼的維護。

**Easier for users (對使用者更簡單)**

如果您要求使用特定 AMI 啟動執行個體，且該 AMI 定期更新，我們建議您要求使用者選取 Systems Manager 參數來尋找 AMI。透過要求使用者選取 Systems Manager 參數，您可以確保使用最新的 AMI 來啟動執行個體。

例如，您可以在組織中每月建立新版本 AMI，其中包含最新的作業系統和應用程式修補程式。您也要求使用者使用最新版本的 AMI 來啟動執行個體。為了確保您的使用者使用最新版本，您可以建立指向正確 AMI ID 的 Systems Manager 參數 (例如 `golden-ami`)。每次建立新版 AMI 時，您都會更新參數中的 AMI ID 值，使其永遠指向最新的 AMI。您的使用者不需要知道 AMI 的定期更新，因為他們每次都會繼續選取相同的 Systems Manager 參數。使用 AMI 的 Systems Manager 參數可在啟動執行個體時更輕鬆地選取正確的 AMI。

**Simplify automation code maintenance (簡化自動化程式碼維護)**

如果您使用自動化程式碼來啟動執行個體，則可以指定 Systems Manager 參數而非 AMI ID。如果新版本的 AMI 已建立，您可以變更參數中的 AMI ID 值，使其指向最新的 AMI。每次建立新版本的 AMI 時，都不需要修改參考參數的自動化程式碼。如此可簡化自動化維護作業，並有助於降低部署成本。

**注意**  
當您變更 Systems Manager 參數指向的 AMI ID 時，執行中的執行個體不會受到影響。

## 許可
<a name="systems-manager-permissions"></a>

如果您在啟動執行個體精靈中使用指向 AMI ID 的 Systems Manager 參數，則必須新增下列許可至 IAM 政策：
+ `ssm:DescribeParameters` - 授予許可，以檢視及選取 Systems Manager 參數。
+ `ssm:GetParameters` - 授予許可，以擷取 Systems Manager 參數值。

您也可以限制對特定 Systems Manager 參數的存取。如需更多資訊與範例 IAM 政策，請參閱 [範例：使用 EC2 啟動執行個體精靈](iam-policies-ec2-console.md#ex-launch-wizard)。

## 限制
<a name="AMI-systems-manager-parameter-limitations"></a>

AMI 和 Systems Manager 參數是區域特定的。若要跨區域使用相同的 Systems Manager 參數名稱，請在每個區域中建立具有相同名稱的 Systems Manager 參數 (例如 `golden-ami`)。在每個區域中，將 Systems Manager 參數指向該區域中的 AMI。

參數名稱區分大小寫。參數名稱的反斜線只有在參數是階層的一部分時才需要，例如 `/amis/production/golden-ami`。如果參數不是階層架構的一部分，則可以省略反斜線。

## 使用 Systems Manager 參數啟動執行個體
<a name="systems-manager-parameter-launch-instance"></a>

啟動執行個體時，您可以指定指向 AMI ID 的 Systems Manager 參數，而非指定 AMI ID。

若要以程式設定方式指定參數，請使用下列語法，其中 `resolve:ssm` 是標準字首，`parameter-name` 是不重複的參數名稱。

```
resolve:ssm:parameter-name
```

Systems Manager 參數擁有版本支援。參數的每個反覆項目都會指定一個唯一的版本號碼。您可以參考參數的版本，如下所示，其中 `version` 是不重複的版本號碼。根據預設，在未指定任何版本時，會使用最新版本的參數。

```
resolve:ssm:parameter-name:version
```

若要使用 提供的公有參數啟動執行個體 AWS，請參閱 [使用 Systems Manager 公有參數來參考最新的 AMI](finding-an-ami-parameter-store.md)。

------
#### [ Console ]

**如需使用 Systems Manager 參數來尋找 AMI**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 從導覽列選取要在其中啟動執行個體的區域。無論您的位置為何，皆可選取任何可用的區域。

1. 從主控台儀表板選擇 **Launch Instance** (啟動執行個體)。

1. 在 **Application and OS Images (Amazon Machine Image)** (應用程式和作業系統映像 (Amazon Machine Image)) 下，選擇 **Browse more AMIs** (瀏覽更多 AMI)。

1. 選擇搜尋列右側的箭頭按鈕，然後選擇 **Search by Systems Manager parameter** (依 Systems Manager 參數搜尋)。

1. 對於 **Systems Manager parameter** (Systems Manager 參數)，請選取一個參數。對應的 AMI ID 會出現在 **Currently resolves to** (目前解析為) 下方。

1. 選擇 **Search** (搜尋)。與 AMI ID 相符的 AMI 會顯示在清單中。

1. 從清單中選取 AMI，然後選取 **Select** (選取)。

如需有關使用啟動執行個體精靈啟動執行個體的詳細資訊，請參閱 [使用主控台中的啟動執行個體精靈，啟動 EC2 執行個體](ec2-launch-instance-wizard.md)。

------
#### [ AWS CLI ]

**如需使用 Systems Manager 參數來啟動執行個體**  
請使用 `--image-id` 選項並搭配 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令。此範例使用名稱為 **golden-ami** 的 Systems Manager 參數，這會指定 AMI ID。

```
--image-id resolve:ssm:/golden-ami
```

您可建立 Systems Manager 參數版本。下列範例會指定 **golden-ami** 參數的版本 2。

```
--image-id resolve:ssm:/golden-ami:2
```

------
#### [ PowerShell ]

**如需使用 Systems Manager 參數來啟動執行個體**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 搭配 `-ImageId` 參數。此範例使用名稱為 **golden-ami** 的 Systems Manager 參數，這會指定 AMI ID。

```
-ImageId "resolve:ssm:/golden-ami"
```

您可建立 Systems Manager 參數版本。下列範例會指定 **golden-ami** 參數的版本 2。

```
-ImageId "resolve:ssm:/golden-ami:2"
```

------

# 使用 Systems Manager 公有參數來參考最新的 AMI
<a name="finding-an-ami-parameter-store"></a>

AWS Systems Manager 為 維護的公有 AMIs 提供公有參數 AWS。您可在啟動執行個體時使用公有參數來確保您使用的是最新 AMI。例如，公有參數 `/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-arm64` 可在所有區域中使用，並且一律指向指定區域中適用於 arm64 架構的 Amazon Linux 2023 AMI 最新版本。

公有參數可從以下路徑取得：
+ **Linux** – `/aws/service/ami-amazon-linux-latest`
+ **Windows** – `/aws/service/ami-windows-latest`

如需詳細資訊，請參閱*「AWS Systems Manager 使用者指南」*中的[使用公有參數](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html)。

## 列示 Amazon Linux AMI
<a name="list-ami-amazon-linux-latest"></a>

------
#### [ AWS CLI ]

**列出目前區域中AMIs AWS**  
請使用下面的 [get-parameters-by-path](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html) 命令。`--path` 參數的值為 Linux AMI 特定。

```
aws ssm get-parameters-by-path \
    --path /aws/service/ami-amazon-linux-latest \
    --query "Parameters[].Name"
```

------
#### [ PowerShell ]

**列出目前區域中AMIs AWS**  
使用 [Get-SSMParametersByPath](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMParametersByPath.html) cmdlet。

```
Get-SSMParametersByPath `
    -Path "/aws/service/ami-amazon-linux-latest" | `
    Sort-Object Name | Format-Table Name
```

------

## 列示 Windows AMI
<a name="list-ami-windows-latest"></a>

------
#### [ AWS CLI ]

**列出目前 AWS 區域中AMIs**  
請使用下面的 [get-parameters-by-path](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html) 命令。`--path` 參數的值為 Windows AMI 特定。

```
aws ssm get-parameters-by-path \
    --path /aws/service/ami-windows-latest \
    --query "Parameters[].Name"
```

------
#### [ PowerShell ]

**列出目前 AWS 區域中AMIs**  
使用 [Get-SSMParametersByPath](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMParametersByPath.html) cmdlet。

```
Get-SSMParametersByPath `
    -Path "/aws/service/ami-windows-latest" | `
    Sort-Object Name | Format-Table Name
```

------

## 使用公有參數啟動執行個體
<a name="launch-instance-public-parameter"></a>

如需在啟動執行個體時指定公有參數，請使用下列語法：`resolve:ssm:public-parameter`，其中 `resolve:ssm` 是標準字首，而 `public-parameter` 是公有參數的路徑和名稱。

------
#### [ AWS CLI ]

**使用公有參數啟動執行個體**  
請使用 `--image-id` 選項並搭配 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令。此範例指定映像 ID 的 Systems Manager 公有參數，以使用最新 Amazon Linux 2023 AMI 啟動執行個體

```
--image-id resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
```

------
#### [ PowerShell ]

**使用公有參數啟動執行個體**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 搭配 `-ImageId` 參數。此範例指定映像 ID 的 Systems Manager 公有參數，以使用最新 AMI for Windows Server 2022 啟動執行個體

```
-ImageId "resolve:ssm:/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-Base"
```

------

如需使用 Systems Manager 參數的更多範例，請參閱[使用 AWS Systems Manager 參數存放區查詢最新的 Amazon Linux AMI IDs ](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/) 和[使用 AWS Systems Manager 參數存放區查詢最新的 Windows AMI](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)。

# AWS Marketplace 適用於 Amazon EC2 執行個體的 中的付費 AMIs
<a name="paid-amis"></a>

*付費 AMI* 是在 AWS Marketplace列出待銷售的 AMI。 AWS Marketplace 是一個線上商店，您可以在其中購買 上執行的軟體 AWS，包括可用來啟動 EC2 執行個體AMIs。 AWS Marketplace AMIs 會組織成各種類別，例如開發人員工具，讓您找到符合您需求的產品。如需 的詳細資訊 AWS Marketplace，請參閱 [AWS Marketplace](https://aws.amazon.com/marketplace)網站。

您可以從 AWS Marketplace 第三方購買 中的 AMIs，包括來自 Red Hat 等組織的服務合約隨附的 AMIs。您也可以建立 AMI，並在 中將它銷售 AWS Marketplace 給其他 Amazon EC2 使用者。只要遵循一些簡單準則，您即可經由簡單明瞭的程序建立供公眾取用的安全可用 AMI。如需如何建立和使用共用 AMI 的資訊，請參閱 [了解 Amazon EC2 的共用 AMI 使用情況](sharing-amis.md)。

從已支付 AMI 啟動執行個體與從任何其他的 AMI 啟動執行個體的方式相同。不需額外的參數。執行個體會根據 AMI 擁有者設定的費率收費，其相關 Web 服務的標準使用費 (例如在 Amazon EC2 中執行 m5.small 執行個體類型的每小時費率) 也相同。可能也需支付額外稅金。已支付 AMI 的擁有者可確認特定執行個體是否使用該已支付 AMI 啟動。

**重要**  
Amazon DevPay 不再接受新的賣方或產品。 現在 AWS Marketplace 是用於透過 銷售軟體和服務的唯一、統一的電子商務平台 AWS。如需有關如何從中部署和銷售軟體的資訊 AWS Marketplace，請參閱在 [Marketplace 中 AWS 銷售](https://aws.amazon.com/marketplace/partners/management-tour)。 AWS Marketplace 支援 Amazon EBS 支援的 AMIs。

**Topics**
+ [在 中銷售您的 AMI AWS Marketplace](#selling-your-ami)
+ [尋找已支付 AMI](using-paid-amis-finding-paid-ami.md)
+ [在 中購買付費 AMI AWS Marketplace](using-paid-amis-purchasing-paid-ami.md)
+ [從執行個體擷取 AWS Marketplace 產品程式碼](get-product-code.md)
+ [針對支援 AWS Marketplace 的產品使用付費支援](using-paid-amis-support.md)
+ [已支付及支援的 AMI 的帳單](#using-paid-amis-bills)
+ [管理您的 AWS Marketplace 訂閱](marketplace-manage-subscriptions.md)

## 在 中銷售您的 AMI AWS Marketplace
<a name="selling-your-ami"></a>

您可以使用 銷售您的 AMI AWS Marketplace。 AWS Marketplace 提供有條不紊的購物體驗。此外， AWS Marketplace 也支援 Amazon EBS 支援的 AMIs、預留執行個體和 Spot 執行個體等 AWS 功能。

如需有關如何在 上銷售 AMI 的資訊 AWS Marketplace，請參閱在 [Marketplace 中 AWS 銷售](https://aws.amazon.com/marketplace/partners/management-tour)。

# 尋找已支付 AMI
<a name="using-paid-amis-finding-paid-ami"></a>

付費 AMI 是可供購買的 Amazon Machine Image (AMI)。付費 AMI 亦有產品代碼。您可在 AWS Marketplace中尋找可供購買的 AMI。

------
#### [ Console ]

**如需尋找付費 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMIs** (AMI)。

1. 中，選擇 **Public images (公有映像)** 作為第一個篩選條件。

1. 執行以下任意一項：
   + 如果您知道產品代碼，請選擇 **Product code** (產品代碼) 和 **=**，然後輸入產品代碼。
   + 若不知道產品代碼，可在搜尋列指定以下篩選條件：**擁有者別名=aws-marketplace**。視需指定額外的篩選條件。

1. 儲存 AMI 的 ID。

------
#### [ AWS CLI ]

**如需尋找付費 AMI**  
使用下面的 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images --owners aws-marketplace
```

輸出包括大量映像。您可指定篩選條件，協助您確定需要哪個 AMI。找到 AMI 之後，在下面的命令中指定其 ID，以獲取產品代碼。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[*].ProductCodes[].ProductCodeId
```

以下為範例輸出。

```
[
    "cdef1234abc567def8EXAMPLE"
]
```

如果您知道產品代碼，您可以依產品代碼篩選結果。此範例會傳回最新 AMI 與指定的產品代碼。

```
aws ec2 describe-images \
    --filters "Name=product-code,Values=cdef1234abc567def8EXAMPLE" \
    --query "sort_by(Images, &CreationDate)[-1].[ImageId]"
```

------
#### [ PowerShell ]

**如需尋找付費 AMI**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
Get-EC2Image -Owner aws-marketplace
```

輸出包括大量映像。您可指定篩選條件，協助您確定需要哪個 AMI。找到 AMI 之後，在下面的命令中指定其 ID，以獲取產品代碼。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).ProductCodes
```

以下為範例輸出。

```
ProductCodeId             ProductCodeType
-------------             ---------------
cdef1234abc567def8EXAMPLE marketplace
```

如果您知道產品代碼，您可以依產品代碼篩選結果。此範例會傳回最新 AMI 與指定的產品代碼。

```
(Get-EC2Image -Owner aws-marketplace -Filter @{"Name"="product-code";"Value"="cdef1234abc567def8EXAMPLE"} | sort CreationDate -Descending | Select-Object -First 1).ImageId
```

------

# 在 中購買付費 AMI AWS Marketplace
<a name="using-paid-amis-purchasing-paid-ami"></a>

您必須先為付費 AMI 註冊 (購買)，然後才能使用 AMI 啟動 Amazon EC2 執行個體。

通常已支付 AMI 的賣方會提供您 AMI 的相關資訊，包含價格和可購買該 AMI 的連結。當您按一下連結時，系統會先要求您登入 AWS，然後您可以購買 AMI。

## 使用主控台購買已支付 AMI
<a name="purchase-paid-ami-console"></a>

您可以使用 Amazon EC2 Launch Wizard 購買已支付 AMI。如需詳細資訊，請參閱[從 AWS Marketplace AMI 啟動 Amazon EC2 執行個體](launch-marketplace-console.md)。

## 使用 訂閱產品 AWS Marketplace
<a name="subscribe-to-paid-ami"></a>

若要使用 AWS Marketplace，您必須擁有 AWS 帳戶。若要從 AWS Marketplace 產品啟動執行個體，您必須註冊才能使用 Amazon EC2 服務，而且您必須訂閱要從中啟動執行個體的產品。您可使用下列其中一種方式，在 AWS Marketplace訂閱產品：
+ **AWS Marketplace 網站**：您可以使用 1-Click 部署功能快速啟動預先設定的軟體。如需詳細資訊，請參閱 [中的 AMI 型產品 AWS Marketplace](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-server-products.html)。
+ **Amazon EC2 啟動精靈**：您可以搜尋 AMI，然後直接從精靈啟動執行個體。如需詳細資訊，請參閱[從 AWS Marketplace AMI 啟動 Amazon EC2 執行個體](launch-marketplace-console.md)。

# 從執行個體擷取 AWS Marketplace 產品程式碼
<a name="get-product-code"></a>

您可以使用執行個體中繼資料擷取執行個體 AWS Marketplace 的產品碼。若執行個體具有產品代碼，Amazon EC2 便會傳回它。如需擷取中繼資料的詳細資訊，請參閱 [存取 EC2 執行個體的執行個體中繼資料](instancedata-data-retrieval.md)。

------
#### [ IMDSv2 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

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

**Windows**  
透過 Windows 執行個體執行下面的 cmdlet。

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/product-codes
```

------
#### [ IMDSv1 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

```
curl http://169.254.169.254/latest/meta-data/product-codes
```

**Windows**  
透過 Windows 執行個體中執行以下命令。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/product-codes
```

------

# 針對支援 AWS Marketplace 的產品使用付費支援
<a name="using-paid-amis-support"></a>

Amazon EC2 同時也可讓開發人員提供軟體 (或衍生 AMI) 的支援。開發人員能建立可讓您註冊使用的支援產品。在註冊支援產品時，開發人員會給予您產品代碼，您必須將該產品代碼與您擁有的 AMI 建立關聯。這可讓開發人員確認您的執行個體符合取得支援的資格。它也能確認在您執行產品執行個體的時候，您確實有根據開發人員指定的產品規定支付費用。

**限制**
+ 在您設定產品代碼屬性後，您便無法變更或移除它。
+ 您無法搭配預留執行個體使用支援產品。您一律必須支付支援產品賣方指定的價格。

------
#### [ AWS CLI ]

**如需關聯產品代碼與 AMI**  
請使用 [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 命令。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --product-codes "cdef1234abc567def8EXAMPLE"
```

------
#### [ PowerShell ]

**如需關聯產品代碼與 AMI**  
使用 [Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) cmdlet。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -ProductCode "cdef1234abc567def8EXAMPLE"
```

------

## 已支付及支援的 AMI 的帳單
<a name="using-paid-amis-bills"></a>

在每個月結束的時候，您會收到一封電子郵件，其中包含在該月份中使用任何已支付或支援的 AMI，而向您信用卡收取的金額。此帳單與您的一般 Amazon EC2 帳單各自獨立。如需詳細資訊，請參閱「AWS Marketplace 買方指南」**中的[產品付款](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-paying-for-products.html)。

# 管理您的 AWS Marketplace 訂閱
<a name="marketplace-manage-subscriptions"></a>

在 AWS Marketplace 網站上，您可以檢查訂閱詳細資訊、檢視廠商的使用說明、管理您的訂閱等等。

## 檢查 訂閱詳細資料
<a name="check-sub-details"></a>

**檢查您的訂閱詳細資訊**

1.  登入 [AWS Marketplace](https://aws.amazon.com/marketplace)。

1. 選擇 **Your Marketplace Account (您的 Marketplace 帳戶)**。

1. 選擇 **Manage your software subscriptions (管理您的軟體訂閱)**。

1. 將會列出所有您目前的訂閱。選擇**使用說明**檢視使用產品的特定說明，例如：用來連線到您執行中執行個體的使用者名稱。

## 取消訂閱
<a name="cancel-sub"></a>

**注意**  
取消訂閱不會終止透過該 AMI 啟動的執行個體。我們將繼續向您收取執行中執行個體的費用，直至終止使用執行個體。您必須終止使用透過 AMI 啟動的全部執行個體，方可停止對訂閱計費。
在您取消您的訂閱之後，您便無法從該 AMI 啟動任何執行個體。若要再次使用該 AMI，您需要在 AWS Marketplace 網站上或透過 Amazon EC2 主控台中的啟動精靈重新訂閱該 AMI。

**若要取消 AWS Marketplace 訂閱**

1. 如需停止對訂閱計費，請確認您已終止任何從該訂閱執行的執行個體。
**警告**  
**終止執行個體的操作為永久性且無法復原。**  
終止執行個體後，您將無法再連線至該執行個體，且無法復原該執行個體。所有設定為終止時刪除的已連接 Amazon EBS 磁碟區，也會被永久刪除且無法復原。儲存在執行個體儲存體磁碟區的所有資料將永久遺失。如需詳細資訊，請參閱[終止執行個體的運作方式](how-ec2-instance-termination-works.md)。  
在終止執行個體之前，確認您已將終止使用後需要保留的全部資料備份至持久性儲存體。

   1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

   1. 在導覽窗格中，選擇**執行個體**。

   1. 選取執行個體，然後選取**執行個體狀態**、**終止 (刪除) 執行個體**。

   1. 出現確認提示時，請選擇**終止 (刪除)**。

1. 登入 [AWS Marketplace](https://aws.amazon.com/marketplace)，然後依序選擇 **Your Marketplace Account (您的 Marketplace 帳戶)** 及 **Manage your software subscriptions (管理您的軟體訂閱)**。

1. 選擇 **Cancel subscription (取消訂閱)**。系統會提示您確認取消。

# Amazon EC2 AMI 生命週期
<a name="ami-lifecycle"></a>

Amazon Machine Image (AMI) 是一種映像，包含設定並啟動執行個體所需的軟體組態。在您啟動執行個體時，必須指定 AMI。您可使用 Amazon 提供的 AMI，亦可建立自己的 AMI。AMI 必須位於您要啟動執行個體 AWS 區域 的 中。

AMI 的生命週期包括建立、複製、棄用、停用，以及刪除 (取消註冊) AMI。

**建立 AMI。**Amazon 提供 AMI，您可用來啟動執行個體，也可根據您的需求量身建立自訂 AMI。如需建立自訂 AMI，可透過現有的 AMI 來啟動執行個體、自訂執行個體 (例如，安裝軟體及設定作業系統設定)，然後透過執行個體建立 AMI。所有執行個體自訂內容都會儲存至新 AMI，因此透過新 AMI 啟動的執行個體會包括這些自訂內容。

**可驗證的 AMI。**如需建立支援 EC2 執行個體驗證的 AMI，請參閱 [可驗證的 AMI](attestable-ami.md)。

**複製 AMI。**您只能在 AMI 所在的 中，使用 AWS 區域 AMI 啟動執行個體。若您需要在多個區域啟動包含相同組態的執行個體，則複製 AMI 到其他區域。

**棄用 AMI。**如需將 AMI 標記為已取代或過時，可設定立即或未來的棄用日期。AMI 清單會隱藏棄用的 AMI，但若使用者及服務知道 AMI ID，可繼續使用棄用的 AMI。

**停用 AMI。**如需暫時阻止 AMI 使用執行個體，可停用 AMI。停用 AMI 後，無法將其用於啟動新的執行個體。然而，若重新啟用 AMI，可再次將其用於啟動執行個體。請注意，停用 AMI 不影響已經從中啟動的現有執行個體。

**取消註冊 (刪除) AMI。**若不再需要 AMI，可取消註冊，以免將其用於啟動新的執行個體。若 AMI 與保留規則相符，則會將其移至資源回收筒，其保留期到期之前可將其還原，在此之後會將其永久刪除。若與保留規則不相符，則會立即將其永久刪除。請注意，當您取消註冊 AMI 時，不會影響到任何透過該 AMI 啟動的現有執行個體。

**自動化 AMI 生命週期。**您可以使用 Amazon Data Lifecycle Manager 來自動建立、保留、複製、取代和取消註冊 Amazon EBS 後端 AMI 及其備份快照。您亦可使用 EC2 Image Builder 來自動建立、管理、部署自訂 AMI。若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*和 [EC2 Image Builder 使用者指南](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)中的[藉助 Amazon Data Lifecycle Manager 來自動化備份](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-lifecycle.html)

**Topics**
+ [建立 AMI](creating-an-ami-ebs.md)
+ [建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md)
+ [使用 Windows Sysprep 建立 AMI](ami-create-win-sysprep.md)
+ [複製 AMI](CopyingAMIs.md)
+ [存放和還原 AMI](ami-store-restore.md)
+ [AMI 原始伺服器](ami-ancestry.md)
+ [AMI 用量](ec2-ami-usage.md)
+ [棄用 AMI](ami-deprecate.md)
+ [停用 AMI](disable-an-ami.md)
+ [取消註冊 AMI](deregister-ami.md)

# 建立 Amazon EBS 支援的 AMI
<a name="creating-an-ami-ebs"></a>

您可從 Amazon EC2 執行個體或從 Amazon EC2 執行個體的根磁碟區快照建立自己的 Amazon EBS 支援的 AMI。

若要從執行個體建立 Amazon EBS 支援的 AMI，請從使用現有 Amazon EBS 支援的 AMI 啟動執行個體開始。此 AMI 可以是您從 取得 AWS Marketplace、使用 [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html) 建立，或您可以存取的任何其他 AMI。在自訂執行個體以滿足您的特定需求後，請建立並註冊新 AMI。然後，您可使用新 AMI 並運用您的自訂內容來啟動全新執行個體。

**注意**  
如需建立支援 EC2 執行個體驗證的 AMI，請參閱 [可驗證的 AMI](attestable-ami.md)。

下列說明的程序同時適用於加密 Amazon Elastic Block Store (Amazon EBS) 磁碟區 (包含根磁碟區) 及未加密磁碟區後端 Amazon EC2 執行個體。

AMI 建立程序與 Amazon S3 支援的 AMI 不同。如需詳細資訊，請參閱[建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md)。

**Topics**
+ [從執行個體建立 AMI 概覽](#process-creating-an-ami-ebs)
+ [從執行個體建立 AMI](#how-to-create-ebs-ami)
+ [從快照建立 AMI](#creating-launching-ami-from-snapshot)

## 從執行個體建立 AMI 概覽
<a name="process-creating-an-ami-ebs"></a>

下列圖表總結了從正在執行的 EC2 執行個體建立 Amazon EBS 後端 AMI 的過程：從現有 AMI 開始，啟動執行個體，自訂執行個體，根據其建立新的 AMI，以及最終啟動您的新 AMI 執行個體。該圖表中的數字與隨後描述中的數字相符。

![\[從執行個體建立 AMI 的工作流程\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/running-instance.png)


**1 – AMI \$11：從現有 AMI 開始**  
查找與要建立的 AMI 相似的現有 AMI。這可以是您從 取得的 AMI AWS Marketplace、您使用 [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html) 建立的 AMI，或是您可以存取的任何其他 AMI。您將根據需要自訂此 AMI。  
在圖表中,**EBS 根磁碟區快照 \$11** 指示 AMI 是 Amazon EBS 後端 AMI，並且有關根磁碟區的資訊存放在此快照中。

**2 – 從現有 AMI 啟動執行個體**  
設定 AMI 的方法是從您希望作為新 AMI 基礎的 AMI 啟動執行個體，然後自訂執行個體 (由圖表中的 **3** 指示)。然後，您將建立新的 AMI，其中包含自訂執行個體 (由圖表中的 **4** 指示)。

**3 – EC2 執行個體 \$11：自訂執行個體**  
連線到您的執行個體並根據需要自訂。您的新 AMI 將包含這些自訂執行個體。  
您可以在執行個體上執行下列任一個動作以自訂：  
+ 安裝軟體和應用程式
+ 複製資料
+ 刪除暫存檔案並重組您的硬碟，來減少啟動時間。
+ 連接額外的 EBS 磁碟區

**4 – 建立映像**  
從執行個體建立 AMI 時，Amazon EC2 會在建立 AMI 前關閉執行個體，確認執行個體上的一切在建立程序中都維持在停止且一致的狀態。若您相信您的執行個體處於一致且可用來建立 AMI 的狀態，您可以告知 Amazon EC2 不要關閉及重新開機執行個體。有些檔案系統 (例如 XFS) 可能會凍結及取消凍結活動，使其足夠安全，可用來建立映像，而無須重新開機執行個體。  
在 AMI 建立程序期間，Amazon EC2 會建立您執行個體根磁碟區及任何連接到您執行個體之其他 EBS 磁碟區的快照。您必須為快照支付費用，直到您[取消註冊 AMI](deregister-ami.md) 及刪除快照為止。若任何連接到執行個體的磁碟區經過加密，則新的 AMI 只能在支援 Amazon EBS 加密的執行個體上成功啟動。  
AMI 建立程序可能需要數分鐘的時間完成 (有些可能會花上 24 小時)，具體取決於磁碟區的大小。您可能會發現在建立您的 AMI 前先建立您磁碟區的快照會更有效率。透過此方式，建立 AMI 時便只需要建立小型的增量快照，且程序將能更快完成 (建立快照的總時間維持不變)。

**5 – AMI \$12：新 AMI**  
在程序完成後，您便會擁有新的 AMI 及從執行個體根磁碟區建立的快照 (**快照 \$12**) 。若除了根磁碟區之外，您還為您的執行個體新增執行個體儲存體磁碟區或 EBS 磁碟區，則新 AMI 的區塊型儲存設備映射便會包含這些磁碟區的資訊。  
Amazon EC2 會自動為您註冊 AMI。

**6 –從新的 AMI 啟動執行個體**  
您可以使用新 AMI 啟動執行個體。

**7 – EC2 執行個體 \$12：新執行個體**  
當您使用新的 AMI 啟動執行個體時，Amazon EC2 會使用快照，建立此執行個體的根磁碟區的新 EBS 磁碟區。如果您在自訂執行個體時為新增執行個體儲存體磁碟區或 EBS 磁碟區，則新 AMI 的區塊型儲存設備映射便會包含這些磁碟區的資訊，並且您從新的 AMI 啟動之執行個體的區塊型儲存設備映射也會自動包含這些磁碟區的資訊。新執行個體之區塊型儲存設備映射中指定的執行個體儲存體磁碟區都是全新的，不會包含您用來建立 AMI 之執行個體的執行個體儲存體磁碟區中的任何資料。EBS 磁碟區上的資料會持續。如需詳細資訊，請參閱[Amazon EC2 執行個體上磁碟區的區塊型儲存設備映射](block-device-mapping-concepts.md)。  
當您從 EBS 後端 AMI 建立新的執行個體時，建議您在將其用於生產環境前初始化其根磁碟區和任何額外的 EBS 儲存體。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[初始化 Amazon EBS 磁碟區](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-initialize.html)。

## 從執行個體建立 AMI
<a name="how-to-create-ebs-ami"></a>

如果您有現有執行個體，您可從此執行個體建立 AMI。

------
#### [ Console ]

**若要建立 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取要從中建立 AMI 的執行個體，然後依序選擇 **Actions** (動作)、**Image and templates** (映像和範本)，**Create image** (建立映像)。
**提示**  
若此選項已停用，表示您的執行個體並非 Amazon EBS 後端執行個體。

1. 在 **Create image** (建立映像) 頁面上，指定下列資訊：

   1. 對於 **Image name** (映像名稱)，輸入映像的唯一名稱，最多 127 個字元。

   1. 對於 **Image description** (映像描述)，輸入映像的選擇性描述，最多 255 個字元。

   1. 對於**重新啟動執行個體**，請保持選取核取方塊 (預設值)，或加以清除。
      + 若選取**重新啟動執行個體**，Amazon EC2 建立新 AMI 時，會重新啟動執行個體，以便在資料處於靜態時可以拍攝連接磁碟區的快照，以確保狀態一致。
      + 若清除**重新啟動執行個體**，Amazon EC2 建立新 AMI 時，不會關閉及重新啟動執行個體。
**警告**  
若您清除**重新啟動執行個體**，我們無法保證建立映像的檔案系統完整性。

   1. **Instance volumes** (執行個體磁碟區) – 您可以修改根磁碟區，以及新增額外的 Amazon EBS 及執行個體儲存體磁碟區，如下所示：

      1. 根磁碟區在第一列中定義。
         + 若要變更根磁碟區的大小，請在 **Size ( 大小)** 中輸入所需的值。
         + 若您選取 **Delete on termination (終止時刪除)**，則當您終止從此 AMI 建立的執行個體時，便會刪除 EBS 磁碟區。若您清除 **Delete on termination (終止時刪除)**，則當您終止執行個體時，便不會刪除 EBS 磁碟區。如需詳細資訊，請參閱[在執行個體終止時保留資料](preserving-volumes-on-termination.md)。

      1. 若要新增 EBS 磁碟區，請選擇 **Add volume (新增磁碟區)** (這會新增一個新的資料列)。針對**儲存體類型**，選擇 **EBS**，然後填入資料列中的欄位。當您從您新的 AMI 啟動執行個體時，額外的磁碟區會自動連接到執行個體。空白磁碟區必須進行格式化及掛載。以快照為基礎的磁碟區必須掛載。

      1. 若要新增執行個體儲存體磁碟區，請參閱[將執行個體儲存體磁碟區新增至 Amazon EC2 AMI](adding-instance-storage-ami.md)。當您從您新的 AMI 啟動執行個體時，額外的磁碟區會自動初始化並掛載。這些磁碟區不會包含做為您 AMI 基礎之執行中執行個體的執行個體儲存體磁碟區中的任何資料。

   1. **快照目的地** – 若執行個體磁碟區位於支援 EBS 本機快照的本機區域，則選擇建立 AMI 快照的位置：
      + **AWS 區域**：在磁碟區的本機區域父區域建立快照。
      + **AWS Local Zone**：在與磁碟區相同的 Local Zone 中建立快照。
**注意**  
此選項僅在支援 EBS 本機快照的本機區域顯示，且僅當執行個體在本機區域建立時才會顯示。若磁碟區位於區域，則不會顯示此選項，且自動在與磁碟區相同的區域建立快照。若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*中的[本機區域中的本機快照](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-localzones.html)。
**重要**  
執行個體磁碟區的全部快照必須位於同一位置。請確認現有快照的位置。若任何現有的快照與選取的目的地位於不同位置，AMI 建立會失敗。

   1. **Tags** (標籤) - 當您建立 AMI 時，可以使用相同的標籤來標記 AMI 和快照，或者可以使用不同的標籤來進行標記。
      + 若要使用*相同的* 標籤來標記 AMI 和快照，請選擇 **Tag image and snapshots together (共同標記映像和快照)**。相同的標籤即套用至 AMI 和每個建立的快照。
      + 若要使用*不同的* 標籤來標記 AMI 和快照，請選擇 **Tag image and snapshots separately (個別標記映像和快照)**。不同的標籤即套用至 AMI 和建立的快照。但是所有快照都會取得相同的標籤；您無法使用不同的標籤標記每個快照。

      若要新增標籤，請選擇 **Add tag (新增標籤)**，然後輸入標籤的鍵和值。針對每個標籤，重複執行上述動作。

   1. 當您準備好建立 AMI 時，請選擇 **Create image** (建立映像)。

1. 若要在建立您 AMI 的過程中檢視狀態：

   1. 在導覽窗格中，選擇 **AMI**。

   1. 將篩選條件設為 **Owned by me** (由我擁有)，然後在清單中尋找您的 AMI。

      一開始，狀態為 `pending`，但在幾分鐘後應該會變更為 `available`。

1. (選用) 若要檢視為新 AMI 建立的快照：

   1. 記下您在先前步驟中找到的 AMI ID。

   1. 在導覽窗格中，選擇 **Snapshots** (快照)。

   1. 將篩選條件設定為 **Owned by me** (由我擁有)，然後在 **Description** (說明) 欄中尋找含有新 AMI ID 的快照。

      當您從此 AMI 啟動執行個體時，Amazon EC2 會使用此快照建立執行個體的根磁碟區。

------
#### [ AWS CLI ]

**若要建立 AMI**  
請使用 [create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) 命令。

```
aws ec2 create-image \
    --instance-id i-1234567890abcdef0 \
    --name "my-web-server" \
    --description "My web server image" \
    --no-reboot
```

------
#### [ PowerShell ]

**若要建立 AMI**  
使用 [New-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Image.html) cmdlet。

```
New-EC2Image `
    -InstanceId i-1234567890abcdef0 ` 
    -Name "my-web-server" `
    -Description "My web server image" `
    -NoReboot $true
```

------

## 從快照建立 AMI
<a name="creating-launching-ami-from-snapshot"></a>

若您有執行個體根磁碟區的快照，您可以從此快照建立 AMI。

**注意**  
在多數情況，適用於 Windows、Red Hat、SUSE 和 SQL Server 的 AMI 需要 AMI 具正確授權資訊。如需詳細資訊，請參閱[了解 AMI 帳單資訊](ami-billing-info.md)。當從快照建立 AMI 時，`RegisterImage` 操作會從快照的中繼資料衍生出正確帳單資訊，但這需要有適當的中繼資料。若要驗證是否已套用正確帳單資訊，請參閱新 AMI 的**平台詳細資料**欄位。如果欄位為空或與預期的作業系統程式碼不相符 (例如， Windows、Red Hat、SUSE 或 SQL)，則 AMI 建立失敗，您應該捨棄 AMI 並遵循 [從執行個體建立 AMI](#how-to-create-ebs-ami) 的說明。

------
#### [ Console ]

**從快照建立 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Snapshots (快照)**。

1. 選取要從中建立 AMI 的快照，然後選取 **Actions** (動作)、**Create image from snapshot** (從快照建立映像)。

1. 在**從快照建立映像**頁面上，指定下列資訊：

   1. 對於 **Image name** (映像名稱)，輸入映像的描述性名稱。

   1. 對於 **Description** (描述)，輸入映像的簡短描述。

   1. 對於 **Architecture** (架構)，選擇映像架構。選擇 **i386** (若為 32 位元)、**x86\$164** (若為 64 位元)、**arm64** (若為 64 位元 ARM)，或 **x86\$164** (若為 64 位元 macOS)。

   1. 針對**根裝置名稱**，輸入要用於根磁碟區的設備名稱。如需詳細資訊，請參閱[Amazon EC2 執行個體上磁碟區的裝置名稱](device_naming.md)。

   1. 對於 **Virtualization type** (虛擬化類型)，選擇從這個 AMI 啟動之執行個體要使用的虛擬化類型。如需詳細資訊，請參閱 [虛擬化類型](ComponentsAMIs.md#virtualization_types)。

   1. (僅適用於半虛擬化) 對於 **Kernel ID** (核心 ID)，選取映像的作業系統核心。如果您是使用執行個體的根磁碟區快照，請選取與原始執行個體相同的核心 ID。如果不確定，請使用預設核心。

   1. (僅適用於半虛擬化) 對於 **RAM disk ID** (RAM 磁碟 ID)，選取映像的 RAM 磁碟。如果選取特定核心，則可能需要選取具有可支援之驅動程式的特定 RAM 磁碟。

   1. 對於**開機模式**，請選擇映像的開機模式，或選擇**使用預設值**，以便在使用此 AMI 啟動執行個體時，以執行個體類型支援的開機模式開機。如需詳細資訊，請參閱[設定 Amazon EC2 AMI 的開機模式](set-ami-boot-mode.md)。

   1. (選用) 在**區塊型儲存設備映射**，自訂根磁碟區並新增其他資料磁碟區。

      針對每個磁碟區，您可以指定大小、類型、效能特性、終止時的刪除行為，以及加密狀態。若為根磁碟區，大小不可小於快照的大小。磁碟區類型的預設選項是「一般用途 SSD `gp3`」。

   1. (選用) 在**標籤**下，您可以新增一個或多個標籤至新 AMI。若要新增標籤，請選擇 **Add tag (新增標籤)**，然後輸入標籤的鍵和值。針對每個標籤，重複執行上述動作。

   1. 當您準備好建立 AMI 時，請選擇 **Create image** (建立映像)。

1. (僅限 Windows、Red Hat、SUSE 和 SQL Server) 若要驗證是否已套用正確帳單資訊，請檢查新 AMI 的**平台詳細資料**欄位。如果欄位為空或與預期的作業系統程式碼不相符 (例如，**Windows** 或 **Red Hat**)，則 AMI 建立失敗，您應該捨棄 AMI 並遵循 [從執行個體建立 AMI](#how-to-create-ebs-ami) 的說明。

------
#### [ AWS CLI ]

**使用 從快照建立 AMI AWS CLI**  
使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 命令。

```
aws ec2 register-image \
    --name my-image \
    --root-device-name /dev/xvda \
    --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0db2cf683925d191f}
```

------
#### [ PowerShell ]

**如需使用 PowerShell 透過快照建立 AMI**  
使用 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet。

```
$block = @{SnapshotId=snap-0db2cf683925d191f}
Register-EC2Image `
    -Name my-image `
    -RootDeviceName /dev/xvda `
    -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block}
```

------

# 建立 Amazon S3 支援的 AMI
<a name="creating-an-ami-instance-store"></a>

您啟動執行個體時指定的 AMI，會判定根磁碟區的類型。

若要建立 Amazon S3 支援的 Linux AMI，請從您已從現有 Amazon S3 支援的 Linux AMI 啟動的執行個體開始。在您將執行個體自訂到符合您的需求後，建立磁碟區並註冊新的 AMI。您可以搭配這些自訂項目，使用這個新的 AMI 啟動新的執行個體。

您無法建立 Amazon S3 支援的 Windows AMI，因為 Windows AMI 不支援根磁碟區的執行個體儲存體。

**重要**  
只有下列執行個體類型支援執行個體儲存體磁碟區做為根磁碟區，且需要 Amazon S3 支援的 AMI：C1、C3、D2、I2、M1、M2、M3、R3 和 X1。

AMI 建立程序與 Amazon EBS 後端 AMI 不同。如需詳細資訊，請參閱[建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md)。

**Topics**
+ [AMI 建立概觀](#process-creating-an-ami-instance-store)
+ [先決條件](#bundle-ami-prerequisites)
+ [從 Amazon Linux 執行個體建立 AMI](#amazon_linux_instructions)
+ [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)
+ [Amazon EC2 AMI 工具參考](ami-tools-commands.md)
+ [將 Amazon S3 支援的 AMI 轉換為 EBS 支援的 AMI](Using_ConvertingS3toEBS.md)

## AMI 建立概觀
<a name="process-creating-an-ami-instance-store"></a>

以下圖表顯示透過具有執行個體儲存體根磁碟區的執行個體建立 AMI 之程序的摘要。

![\[建立 Amazon S3 支援的 AMI\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami_create_instance_store.png)


首先，請先從與您要建立的 AMI 相似的 AMI 啟動執行個體。您可以連線到您的執行個體並自訂。設定好所要的執行個體後，您可以組合執行個體。完成綁定程序需要幾分鐘。程序完成後，您將擁有 bundle，其中包含映像工作資訊清單檔案 (`image.manifest.xml`) 和含有根磁碟區範本的檔案 (`image.part.`*xx*)。接著您上傳 bundle 至 Amazon S3 儲存貯體，然後登錄您的 AMI。

**注意**  
若要為您的 Amazon S3 支援的 Linux AMI 將物件上傳到 S3 儲存貯體，必須為儲存貯體啟用 ACL。否則，Amazon EC2 將無法在要上傳的物件上設定 ACL。如果您的目的地儲存貯體將儲存貯體擁有者強制設定用於 S3 物件擁有權，這將無法運作，因為 ACL 已停用。如需詳細資訊，請參閱[控制物件的擁有權並停用儲存貯體的 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)。

當您使用新的 AMI 啟動執行個體時，我們會使用上傳至 Amazon S3 的 bundle 建立執行個體的根磁碟區。Amazon S3 中 bundle 所用的儲存空間會使您的帳戶產生費用，直到刪除為止。如需詳細資訊，請參閱[取消註冊 Amazon EC2 AMI](deregister-ami.md)。

若除了根磁碟區之外，您還為您的執行個體新增執行個體儲存體磁碟區，則新 AMI 的區塊型儲存設備映射便會包含這些磁碟區的資訊，並且您從新的 AMI 啟動之執行個體的區塊型儲存設備映射也會自動包含這些磁碟區的資訊。如需詳細資訊，請參閱[Amazon EC2 執行個體上磁碟區的區塊型儲存設備映射](block-device-mapping-concepts.md)。

## 先決條件
<a name="bundle-ami-prerequisites"></a>

在您可以開始建立 AMI 之前，務必完成以下工作：
+ 安裝 AMI 工具。如需詳細資訊，請參閱[設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)。
+ 安裝 AWS CLI。如需詳細資訊，請參閱 [AWS CLI入門](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。
+ 請確定您具有套件組合的 S3 儲存貯體，並確定您的儲存貯體已啟用 ACL。如需有關設定 ACL 的詳細資訊，請參閱[設定 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)。
  + 若要使用 建立 S3 儲存貯體 AWS 管理主控台，請在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台，然後選擇**建立儲存貯體**。
  + 若要使用 建立 S3 儲存貯體 AWS CLI，您可以使用 [mb](https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html) 命令。如果安裝的 AMI 工具版本為 1.5.18 或更新版本，也可以使用 `ec2-upload-bundle` 命令建立 S3 儲存貯體。如需詳細資訊，請參閱[ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle)。
+ 確保綁定的檔案未在 S3 儲存貯體加密。如果您需要對 AMI 進行加密，則可以改用 EBS 支援的 AMI。如需詳細資訊，請參閱[對 EBS 後端 AMI 使用加密](AMIEncryption.md)。
+ 請確定您擁有 AWS 帳戶 ID。如需詳細資訊，請參閱《*AWS 帳戶管理參考指南*》中的[檢視 AWS 帳戶 識別符](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)。
+ 請確定您擁有可使用 AWS CLI的憑證。如需詳細資訊，請參閱 *AWS Command Line Interface 使用者指南*中的 [AWS CLI的身分驗證與存取憑證](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)。
+ 請確定您擁有 X.509 憑證和對應的私有金鑰。
  + 如果需要建立 X.509 憑證，請參閱[管理簽署憑證](set-up-ami-tools.md#ami-tools-managing-certs)。X.509 憑證和私有金鑰用於加密和解密 AMI。
  + [中國 (北京)] 使用 `$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem` 憑證。
  + 【AWS GovCloud （美國西部）】 使用`$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem`憑證。
+ 連線到您的執行個體並加以自訂。例如，您可以安裝軟體和應用程式、複製資料、刪除暫存檔，以及修改 Linux 組態。

## 從 Amazon Linux 執行個體建立 AMI
<a name="amazon_linux_instructions"></a>

以下程序介紹如何從執行 Amazon Linux 1 的具有執行個體儲存體根磁碟區的執行個體建立 AMI。它們可能不適用於執行其他 Linux 發行版的執行個體。

**準備使用 AMI 工具 (僅適用於 HVM 執行個體)**

1. AMI 工具需要 GRUB 舊版才能正常開機。請使用下列命令安裝 GRUB：

   ```
   [ec2-user ~]$ sudo yum install -y grub
   ```

1. 使用下列命令安裝分割區管理套件：

   ```
   [ec2-user ~]$ sudo yum install -y gdisk kpartx parted
   ```

**如需從具有執行個體儲存體根磁碟區的 Amazon Linux 執行個體建立 AMI**

此程序假設您已滿足 [先決條件](#bundle-ami-prerequisites) 中的先決條件。

在下列命令中，將每個*使用者輸入預留位置*替換為您自己的資訊。

1. 將您的登入資料上傳到執行個體。這些登入資料是用來確定只有您與 Amazon EC2 可存取您的 AMI。

   1. 在執行個體上為登入資料建立如下的暫時目錄：

      ```
      [ec2-user ~]$ mkdir /tmp/cert
      ```

      如此您就能將登入資料從建立的映像中排除。

   1. 使用 [scp](linux-file-transfer-scp.md) 等安全複製工具從電腦上將 X.509 憑證和對應的私有金鑰複製到執行個體上的 `/tmp/cert` 目錄內。以下 `-i my-private-key.pem` 命令中的 **scp** 選項為用來透過 SSH 連接執行個體的私有金鑰，而非 X.509 私有金鑰。例如：

      ```
      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem /path/to/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/
      pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem  100%  717     0.7KB/s   00:00
      cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem  100%  685     0.7KB/s   00:00
      ```

   或者，由於這些檔案為純文字檔案，因此您可用文字編輯器開啟憑證和金鑰，然後將內容複製到 `/tmp/cert` 中的新檔案內。

1. <a name="step_with_bundle_path_amazon_linux"></a>從執行個體內執行 [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) 命令，準備要上傳至 Amazon S3 的 bundle。務必指定 `-e` 選項，以排除憑證存放位置的目錄。根據預設，bundle 程序不包含可能帶有敏感資訊的檔案。這些檔案包含 `*.sw`、`*.swo`、`*.swp`、`*.pem`、`*.priv`、`*id_rsa*`、`*id_dsa*` `*.gpg`、`*.jks`、`*/.ssh/authorized_keys` 和 `*/.bash_history`。若要包含所有這些檔案，請使用 `--no-filter` 選項。若要包含這些檔案中的一部分，請使用 `--include` 選項。
**重要**  
根據預設，AMI 綁定程序會在代表根磁碟區的 `/tmp` 目錄內建立經過壓縮加密的檔案集合。如果 `/tmp` 內沒有足夠的可用磁碟空間可存放 bundle，您需要用 `-d /path/to/bundle/storage` 選項指定其他的 bundle 存放位置。部分執行個體會有暫時性儲存區掛載於 `/mnt` 或 `/media/ephemeral0` 以供您使用，或者您也可以建立、連接及掛載新的 Amazon EBS 磁碟區，以存放 bundle。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[建立 Amazon EBS 磁碟區](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html)。

   1. 您必須以 root 執行 **ec2-bundle-vol** 命令。針對多數命令，您皆能用 **sudo** 來取得更高級的許可，但在此情況下您應執行 **sudo -E su** 以保持環境變數。

      ```
      [ec2-user ~]$ sudo -E su
      ```

      請注意，bash 提示現在將您識別為根使用者，且貨幣符號已換成雜湊標籤，表示您正在根 shell 下：

      ```
      [root ec2-user]#
      ```

   1. 若要建立 AMI bundle，請照下列所示執行 [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) 命令：

      ```
      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      ```
**注意**  
對於中國 （北京） 和 AWS GovCloud （美國西部） 區域，請使用 `--ec2cert` 參數，並根據[先決條件](#bundle-ami-prerequisites)指定憑證。

      建立映像可能需要幾分鐘。完成此命令後，您的 `/tmp` (或非預設的) 目錄將包含 bundle (`image.manifest.xml`，加上多個 `image.part.`*xx* 檔案)。

   1. 退出根 shell。

      ```
      [root ec2-user]# exit
      ```

1. (選用) 若要新增更多執行個體儲存體磁碟區，請在 AMI 的 `image.manifest.xml` 檔案中編輯區塊型裝置映射。如需詳細資訊，請參閱[Amazon EC2 執行個體上磁碟區的區塊型儲存設備映射](block-device-mapping-concepts.md)。

   1. 為您的 `image.manifest.xml` 檔案建立備份。

      ```
      [ec2-user ~]$ sudo cp /tmp/image.manifest.xml /tmp/image.manifest.xml.bak
      ```

   1. 重新格式化 `image.manifest.xml` 檔案，以方便讀取和編輯。

      ```
      [ec2-user ~]$ sudo xmllint --format /tmp/image.manifest.xml.bak > /tmp/image.manifest.xml
      ```

   1. 使用文字編輯器編輯 `image.manifest.xml` 中的區塊型裝置映射。下列範例顯示 `ephemeral1` 執行個體存放磁碟區的新項目。
**注意**  
如需排除檔案清單，請參閱 [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol)。

      ```
          <block_device_mapping>
            <mapping>
              <virtual>ami</virtual>
              <device>sda</device>
            </mapping>
            <mapping>
              <virtual>ephemeral0</virtual>
              <device>sdb</device>
            </mapping>
            <mapping>
              <virtual>ephemeral1</virtual>
              <device>sdc</device>
            </mapping>
            <mapping>
              <virtual>root</virtual>
              <device>/dev/sda1</device>
            </mapping>
          </block_device_mapping>
      ```

   1. 儲存 `image.manifest.xml` 檔案並結束文字編輯器。

1. 若要上傳 bundle 至 Amazon S3，請照下列所示執行 [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) 命令。

   ```
   [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
   ```
**重要**  
若要在US East (N. Virginia) 以外的區域登錄 AMI，您必須使用 `--region` 選項指定兩個目標區域，和目標區域中已存在的儲存貯體路徑，或可在目標區域中建立的唯一儲存貯體路徑。

1. (選用) bundle 上傳至 Amazon S3 之後，您可使用下列 `/tmp` 命令將 bundle 從執行個體的 **rm** 目錄中移除：

   ```
   [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
   ```
**重要**  
如果用 `-d /path/to/bundle/storage` 選項指定 [Step 2](#step_with_bundle_path_amazon_linux) 中的路徑，請使用該路徑，而非 `/tmp`。

1. 若要登錄 AMI，請照下列所示執行 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 命令。

   ```
   [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
   ```
**重要**  
如果您先前已指定 [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) 命令的區域，請在此命令中再次指定該區域。

# 設定 Amazon EC2 AMI 工具
<a name="set-up-ami-tools"></a>

您可使用 AMI 工具來建立及管理 Amazon S3 支援的 Linux AMI。若要使用工具，您必須在 Linux 執行個體上安裝工具。AMI 工具在不支援 RPM 的 Linux 發行版本上會同時以 RPM 和 .zip 檔案的方式提供。

**使用 RPM 設定 AMI 工具**

1. 使用 Linux 發行版本的套件管理工具 (例如 yum) 來安裝 Ruby。例如：

   ```
   [ec2-user ~]$ sudo yum install -y ruby
   ```

1. 使用 wget 或 curl 等工具下載 RPM 檔案。例如：

   ```
   [ec2-user ~]$ wget https://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
   ```

1. 使用下列命令驗證 RPM 檔案的簽章：

   ```
   [ec2-user ~]$ rpm -K ec2-ami-tools.noarch.rpm
   ```

   上述命令應該會顯示檔案的 SHA1 和 MD5 雜湊為 `OK.` 如果命令顯示雜湊為 `NOT OK`，請用下列命令檢視檔案的 Header SHA1 和 MD5 雜湊：

   ```
   [ec2-user ~]$ rpm -Kv ec2-ami-tools.noarch.rpm
   ```

   接著比較檔案的 Header SHA1 和 MD5 雜湊與下列已驗證的 AMI 工具雜湊，以確認檔案的真偽：
   + Header SHA1：a1f662d6f25f69871104e6a62187fa4df508f880
   + MD5：9faff05258064e2f7909b66142de6782

   如果檔案的 Header SHA1 和 MD5 雜湊符合已驗證的 AMI 工具雜湊，請繼續下一步。

1. 使用以下命令安裝 RPM：

   ```
   [ec2-user ~]$ sudo yum install ec2-ami-tools.noarch.rpm
   ```

1. 使用 [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 命令確認 AMI 工具的安裝。

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```
**注意**  
如果出現「cannot load such file -- ec2/amitools/version (LoadError)」之類的載入錯誤，請完成下一個步驟，將 AMI 工具的安裝位置加入到 `RUBYLIB` 路徑。

1. (選用) 如果您在上一步驟中發生錯誤，請將 AMI 工具的安裝位置加入到 `RUBYLIB` 路徑。

   1. 執行下列命令來判斷要加入的路徑。

      ```
      [ec2-user ~]$ rpm -qil ec2-ami-tools | grep ec2/amitools/version
      /usr/lib/ruby/site_ruby/ec2/amitools/version.rb
      /usr/lib64/ruby/site_ruby/ec2/amitools/version.rb
      ```

      在上例中，先前載入錯誤所缺少的檔案位在 `/usr/lib/ruby/site_ruby` 和 `/usr/lib64/ruby/site_ruby`。

   1. 在先前的步驟中將位置加入到 `RUBYLIB` 路徑。

      ```
      [ec2-user ~]$ export RUBYLIB=$RUBYLIB:/usr/lib/ruby/site_ruby:/usr/lib64/ruby/site_ruby
      ```

   1. 使用 [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 命令確認 AMI 工具的安裝。

      ```
      [ec2-user ~]$ ec2-ami-tools-version
      ```

**使用 .zip 檔案設定 AMI 工具**

1. 使用 Linux 發行版本的套件管理工具 (例如 **apt-get**) 來安裝 Ruby 及解壓縮。例如：

   ```
   [ec2-user ~]$ sudo apt-get update -y && sudo apt-get install -y ruby unzip
   ```

1. 使用 wget 或 curl 等工具下載 .zip 檔案。例如：

   ```
   [ec2-user ~]$ wget https://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
   ```

1. 將檔案解壓縮到適當的安裝目錄，例如 `/usr/local/ec2`。

   ```
   [ec2-user ~]$ sudo mkdir -p /usr/local/ec2
   $ sudo unzip ec2-ami-tools.zip -d /usr/local/ec2
   ```

   請注意，.zip 檔案包含資料夾 ec2-ami-tools-*x*.*x*.*x*，其中 *x*.*x*.*x* 是工具的版本號碼 (例如，`ec2-ami-tools-1.5.7`)。

1. 將 `EC2_AMITOOL_HOME` 環境變數設定為工具的安裝目錄。例如：

   ```
   [ec2-user ~]$ export EC2_AMITOOL_HOME=/usr/local/ec2/ec2-ami-tools-x.x.x
   ```

1. 將工具加入到 `PATH` 環境變數。例如：

   ```
   [ec2-user ~]$ export PATH=$EC2_AMITOOL_HOME/bin:$PATH
   ```

1. 使用 [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 命令確認 AMI 工具的安裝。

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```

## 管理簽署憑證
<a name="ami-tools-managing-certs"></a>

AMI 工具中的部分命令需要簽署憑證 (亦稱為 X.509 憑證)。您必須建立憑證，然後將其上傳至 AWS。例如，您可用 OpenSSL 等第三方工具來建立憑證。

**建立簽署憑證**

1. 安裝及設定 OpenSSL。

1. 使用 `openssl genrsa` 命令建立私有金鑰，並將輸出儲存至 `.pem` 檔案。建議新建一個 2048 或 4096 位元 RSA 金鑰。

   ```
   openssl genrsa 2048 > private-key.pem
   ```

1. 使用 `openssl req` 命令產生憑證。

   ```
   openssl req -new -x509 -nodes -sha256 -days 365 -key private-key.pem -outform PEM -out certificate.pem
   ```

若要將憑證上傳至其中 AWS，請使用 [upload-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/upload-signing-certificate.html) 命令。

```
aws iam upload-signing-certificate --user-name user-name --certificate-body file://path/to/certificate.pem
```

若要列出使用者的憑證，請用 [list-signing-certificates](https://docs.aws.amazon.com/cli/latest/reference/iam/list-signing-certificates.html) 命令：

```
aws iam list-signing-certificates --user-name user-name
```

若要停用或重新啟用簽署憑證，請用 [update-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/update-signing-certificate.html) 命令。下列命令可停用憑證：

```
aws iam update-signing-certificate --certificate-id OFHPLP4ZULTHYPMSYEX7O4BEXAMPLE --status Inactive --user-name user-name
```

若要刪除憑證，請用 [delete-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-signing-certificate.html) 命令：

```
aws iam delete-signing-certificate --user-name user-name --certificate-id OFHPLP4ZULTHYPMSYEX7O4BEXAMPLE
```

# Amazon EC2 AMI 工具參考
<a name="ami-tools-commands"></a>

您可使用 AMI 工具命令來建立及管理 Amazon S3 支援的 Linux AMI。欲設定這些工具，請參閱[設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)。

如需有關存取金鑰的詳細資訊，請參閱「IAM 使用者指南」**中的[管理 IAM 使用者的存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。

**Topics**
+ [ec2-ami-tools-version](#ami-tools-version)
+ [ec2-bundle-image](#ami-bundle-image)
+ [ec2-bundle-vol](#ami-bundle-vol)
+ [ec2-delete-bundle](#ami-delete-bundle)
+ [ec2-download-bundle](#ami-download-bundle)
+ [ec2-migrate-manifest](#ami-migrate-manifest)
+ [ec2-unbundle](#ami-unbundle)
+ [ec2-upload-bundle](#ami-upload-bundle)
+ [AMI 工具常用選項](#common-args-ami)

## ec2-ami-tools-version
<a name="ami-tools-version"></a>

### Description
<a name="ami-tools-version-description"></a>

描述 AMI 工具的版本。

### 語法
<a name="ami-tools-version-request"></a>

**ec2-ami-tools-version**

### Output
<a name="ami-tools-version-output"></a>

版本資訊。

### 範例
<a name="ami-tools-version-response"></a>

此範例命令會顯示您正使用之 AMI 工具的版本資訊。

```
[ec2-user ~]$ ec2-ami-tools-version
1.5.2 20071010
```

## ec2-bundle-image
<a name="ami-bundle-image"></a>

### Description
<a name="bundle-image-description"></a>

透過迴路檔案中建立的作業系統映像，來建立 Amazon S3 支援的 Linux AMI。

### 語法
<a name="bundle-image-request"></a>

****ec2-bundle-image** -c *path* -k *path* -u *account* -i *path* [-d *path*] [--ec2cert *path*] [-r *architecture*] [--productcodes *code1*,*code2*,...] [-B *mapping*] [-p *prefix*]** 

### 選項
<a name="bundle-image-parameters"></a>

`-c, --cert` *path*  
使用者以 PEM 編碼的 RSA 公有金鑰憑證檔案。  
必要：是

`-k, --privatekey` *path*  
指向以 PEM 編碼的 RSA 金鑰檔案路徑。您必須指定此金鑰來解開此 bundle，因此請將其置於安全位置。請注意，金鑰不需要註冊到您的 AWS 帳戶。  
必要：是

`-u, --user ` *account*  
使用者 AWS 的帳戶 ID，不含破折號。  
必要：是

`-i, --image` *path*  
欲綁定的映像路徑。  
必要：是

`-d, --destination` *path*  
欲建立 bundle 的目錄。  
預設：`/tmp`  
必要：否

`--ec2cert` *path*  
用於加密映像資訊清單的 Amazon EC2 X.509 公有金鑰憑證路徑。  
`us-gov-west-1` 和 `cn-north-1` 區域使用非預設的公有金鑰憑證，而該憑證的路徑必須以此選項加以指定。憑證的路徑視 AMI 工具的安裝方法而異。以 Amazon Linux 而言，此憑證位於 `/opt/aws/amitools/ec2/etc/ec2/amitools/`。若您從 RPM 或 ZIP 檔案將 AMI 工具安裝進 [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)，則憑證位於 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`。  
必要：僅適用於 `us-gov-west-1` 和 `cn-north-1` 區域。

`-r, --arch` *architecture*  
映像架構。若您未於命令列提供架構，則會在綁定開始時提示您輸入架構。  
有效值：`i386` \$1 `x86_64`  
必要：否

`--productcodes` *code1,code2,...*  
欲在註冊時連接至映像的產品代碼，以逗號分隔。  
必要：否

`-B, --block-device-mapping` *mapping*  
定義區塊型儲存設備向此 AMI 的執行個體公開的方式 (若其執行個體類型支援所指定的設備)。  
指定以逗號分隔的索引鍵/值組清單，其中索引鍵為虛擬名稱，而值為相對應的設備名稱。虛擬名稱包括下列：  
+ `ami` - 執行個體所看見的根檔案系統設備
+ `root` - 核心所看見的根檔案系統設備
+ `swap` - 執行個體所看見的置換裝置
+ `ephemeralN` - 第 N 個執行個體存放磁碟區
必要：否

`-p, --prefix` *prefix*  
綁定的 AMI 檔案之檔案名稱字首。  
預設：映像檔案名稱。舉例來說，若映像路徑為 `/var/spool/my-image/version-2/debian.img`，則預設字首為 `debian.img`。  
必要：否

`--kernel` *kernel\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來設定核心。  
必要：否

`--ramdisk` *ramdisk\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來視需要設定 RAM 磁碟。  
必要：否

### Output
<a name="bundle-image-output"></a>

描述綁定程序階段與狀態的狀態訊息。

### 範例
<a name="bundle-image-response"></a>

此範例會從迴路檔案中建立的作業系統映像，建立綁定 AMI。

```
[ec2-user ~]$ ec2-bundle-image -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 111122223333 -i image.img -d bundled/ -r x86_64
Please specify a value for arch [i386]: 
Bundling image file...
Splitting bundled/image.gz.crypt...
Created image.part.00
Created image.part.01
Created image.part.02
Created image.part.03
Created image.part.04
Created image.part.05
Created image.part.06
Created image.part.07
Created image.part.08
Created image.part.09
Created image.part.10
Created image.part.11
Created image.part.12
Created image.part.13
Created image.part.14
Generating digests for each part...
Digests generated.
Creating bundle manifest...
ec2-bundle-image complete.
```

## ec2-bundle-vol
<a name="ami-bundle-vol"></a>

### Description
<a name="bundle-vol-description"></a>

針對執行個體的根磁碟區，透過壓縮、加密並簽署其複本，建立 Amazon S3 支援的 Linux AMI。

Amazon EC2 會嘗試從執行個體繼承產品代碼、核心設定、RAM 磁碟設定和區塊型儲存設備映射。

根據預設，bundle 程序不包含可能帶有敏感資訊的檔案。這些檔案包含 `*.sw`、`*.swo`、`*.swp`、`*.pem`、`*.priv`、`*id_rsa*`、`*id_dsa*` `*.gpg`、`*.jks`、`*/.ssh/authorized_keys` 和 `*/.bash_history`。若要包含所有這些檔案，請使用 `--no-filter` 選項。若要包含這些檔案中的一部分，請使用 `--include` 選項。

如需詳細資訊，請參閱 [建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md)。

### 語法
<a name="bundle-vol-request"></a>

****ec2-bundle-vol** -c *path* -k *path* -u *account* [-d *path*] [--ec2cert *path*] [-r *architecture*] [--productcodes *code1*,*code2*,...] [-B *mapping*] [--all] [-e *directory1*,*directory2*,...] [-i *file1*,*file2*,...] [--no-filter] [-p *prefix*] [-s *size*] [--[no-]inherit] [-v *volume*] [-P *type*] [-S *script*] [--fstab *path*] [--generate-fstab] [--grub-config *path*]** 

### 選項
<a name="bundle-vol-parameters"></a>

`-c, --cert` *path*  
使用者以 PEM 編碼的 RSA 公有金鑰憑證檔案。  
必要：是

`-k, --privatekey ` *path*   
使用者以 PEM 編碼的 RSA 金鑰檔案路徑。  
必要：是

`-u, --user` *account*  
使用者 AWS 的帳戶 ID，不含破折號。  
必要：是

`-d, --destination` *destination*  
欲建立 bundle 的目錄。  
預設：`/tmp`  
必要：否

`--ec2cert` *path*  
用於加密映像資訊清單的 Amazon EC2 X.509 公有金鑰憑證路徑。  
`us-gov-west-1` 和 `cn-north-1` 區域使用非預設的公有金鑰憑證，而該憑證的路徑必須以此選項加以指定。憑證的路徑視 AMI 工具的安裝方法而異。以 Amazon Linux 而言，此憑證位於 `/opt/aws/amitools/ec2/etc/ec2/amitools/`。若您從 RPM 或 ZIP 檔案將 AMI 工具安裝進 [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)，則憑證位於 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`。  
必要：僅適用於 `us-gov-west-1` 和 `cn-north-1` 區域。

`-r, --arch ` *architecture*  
映像架構。若您未於命令列提供架構，則會在綁定開始時提示您提供架構。  
有效值：`i386` \$1 `x86_64`  
必要：否

`--productcodes` *code1,code2,...*  
欲在註冊時連接至映像的產品代碼，以逗號分隔。  
必要：否

`-B, --block-device-mapping` *mapping*  
定義區塊型儲存設備向此 AMI 的執行個體公開的方式 (若其執行個體類型支援所指定的設備)。  
指定以逗號分隔的索引鍵/值組清單，其中索引鍵為虛擬名稱，而值為相對應的設備名稱。虛擬名稱包括下列：  
+ `ami` - 執行個體所看見的根檔案系統設備
+ `root` - 核心所看見的根檔案系統設備
+ `swap` - 執行個體所看見的置換裝置
+ `ephemeralN` - 第 N 個執行個體存放磁碟區
必要：否

`-a, --all`  
綁定所有目錄，包括遠端掛載之檔案系統上的目錄。  
必要：否

`-e, --exclude ` *directory1,directory2,...*  
欲從 bundle 操作排除的絕對目錄路徑和檔案清單。此參數會覆寫 `--all` 選項。指定排除項目時，隨參數列出的目錄和子目錄將不會與磁碟區一同綁定。  
必要：否

`-i, --include ` *file1,file2,...*  
欲納入 bundle 操作的檔案清單。因為指定的檔案可能具備敏感資訊，若未指定則會從 AMI 排除。  
必要：否

`--no-filter`  
若已指定，我們不會因其可能具備敏感資訊而將其從 AMI 排除。  
必要：否

`-p, --prefix ` *prefix*  
綁定的 AMI 檔案之檔案名稱字首。  
預設：`image`  
必要：否

`-s, --size` *size*  
欲建立的映像檔案大小，以 MB (1024 \$1 1024 位元) 表示。大小上限為 10240 MB。  
預設：10240  
必要：否

`--[no-]inherit`  
指示映像是否繼承執行個體的中繼資料 (預設為繼承)。若啟用 `--inherit` 但無法存取執行個體中繼資料，則綁定會失敗。  
必要：否

`-v, --volume ` *volume*  
欲從中建立 bundle 的掛載磁碟區絕對路徑。  
預設：根目錄 (/)  
必要：否

`-P, --partition` *type*  
指示磁碟映像是否使用分割區表格。若未指定分割區表格類型，預設為用於磁碟區父區塊型儲存設備的類型 (若適用)，否則預設為 `gpt`。  
有效值：`mbr` \$1 `gpt` \$1 `none`  
必要：否

`-S, --script` *script*  
欲在綁定前執行的自訂指令碼。此指令碼必須具備單一引數，亦即磁碟區的掛載點。  
必要：否

`--fstab` *path*  
欲綁定至映像的 fstab 路徑。若未指定，Amazon EC2 會綁定 /etc/fstab。  
必要：否

`--generate-fstab`  
使用 Amazon EC2 提供的 fstab 綁定磁碟區。  
必要：否

`--grub-config`  
欲綁定至映像的替代 grub 組態檔案路徑。根據預設，`ec2-bundle-vol` 預期所複製映像上應存在 `/boot/grub/menu.lst` 或 `/boot/grub/grub.conf`。此選項可讓您指定替代 grub 組態檔案路徑，並將其複製以覆蓋預設值 (如有)。  
必要：否

`--kernel` *kernel\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來設定核心。  
必要：否

`--ramdisk`*ramdisk\$1id*  
已廢除. 使用 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 來視需要設定 RAM 磁碟。  
必要：否

### Output
<a name="bundle-vol-output"></a>

描述綁定階段與狀態的狀態訊息。

### 範例
<a name="bundle-vol-response"></a>

此範例會壓縮、加密並簽署本機機器根檔案系統的快照，藉此建立綁定的 AMI。

```
[ec2-user ~]$ ec2-bundle-vol -d /mnt -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 111122223333 -r x86_64
  Copying / into the image file /mnt/image...
  Excluding:
       sys
       dev/shm
       proc
       dev/pts
       proc/sys/fs/binfmt_misc
       dev
       media
       mnt
       proc
       sys
       tmp/image
       mnt/img-mnt
  1+0 records in
  1+0 records out
  mke2fs 1.38 (30-Jun-2005)
  warning: 256 blocks unused.

  Splitting /mnt/image.gz.crypt...
  Created image.part.00
  Created image.part.01
  Created image.part.02
  Created image.part.03
  ...
  Created image.part.22
  Created image.part.23
  Generating digests for each part...
  Digests generated.
  Creating bundle manifest...
  Bundle Volume complete.
```

## ec2-delete-bundle
<a name="ami-delete-bundle"></a>

### Description
<a name="delete-bundle-description"></a>

從 Amazon S3 儲存空間刪除指定 bundle。刪除 bundle 之後，即無法從相對應 AMI 啟動執行個體。

### 語法
<a name="delete-bundle-request"></a>

****ec2-delete-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* [-t *token*] [--url *url*] [--region *region*] [--sigv *version*] [-m *path*] [-p *prefix*] [--clear] [--retry] [-y]** 

### 選項
<a name="delete-bundle-parameters"></a>

`-b, --bucket `*bucket*  
內含綁定 AMI 的 Amazon S3 儲存貯體名稱，其後為選用「/」以分隔路徑字首  
必要：是

`-a, --access-key` *access\$1key\$1id*  
 AWS 存取金鑰 ID。  
必要：是

`-s, --secret-key` *secret\$1access\$1key*  
 AWS 私密存取金鑰。  
必要：是

`-t, --delegation-token` *token*  
要傳遞給 AWS 請求的委派字符。如需詳細資訊，請參閱 *IAM 使用者指南*中的[臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。  
必要：僅適用您使用暫時安全登入資料時。  
預設：`AWS_DELEGATION_TOKEN` 環境變數的值 (如已設定)。

`--region`*region*  
於請求簽章內使用的區域。  
預設：`us-east-1`  
必要：若使用簽章第 4 版則為必要

`--sigv`*version*  
簽署請求時使用的簽章版本。  
有效值：`2` \$1 `4`  
預設：`4`  
必要：否

`-m, --manifest`*path*  
指向資訊清單檔案的路徑。  
必要：您必須指定 `--prefix` 或 `--manifest`。

`-p, --prefix` *prefix*  
綁定的 AMI 檔案名稱字首。請提供完整字首。舉例來說，若字首為 image.img，則使用 `-p image.img` 而非 `-p image`。  
必要：您必須指定 `--prefix` 或 `--manifest`。

`--clear`  
若 Amazon S3 儲存貯體在刪除指定 bundle 後為空白，則加以刪除。  
必要：否

`--retry`  
在所有 Amazon S3 錯誤後自動重試，每次操作至多五次。  
必要：否

`-y, --yes`  
自動假設所有提示的答案為 Yes (是)。  
必要：否

### Output
<a name="delete-bundle-output"></a>

Amazon EC2 顯示的狀態訊息，會指出刪除程序的階段與狀態。

### 範例
<a name="delete-bundle-response"></a>

此範例會自 Amazon S3 刪除一個 bundle。

```
[ec2-user ~]$ ec2-delete-bundle -b amzn-s3-demo-bucket -a your_access_key_id -s your_secret_access_key
Deleting files:
amzn-s3-demo-bucket/image.manifest.xml
amzn-s3-demo-bucket/image.part.00
amzn-s3-demo-bucket/image.part.01
amzn-s3-demo-bucket/image.part.02
amzn-s3-demo-bucket/image.part.03
amzn-s3-demo-bucket/image.part.04
amzn-s3-demo-bucket/image.part.05
amzn-s3-demo-bucket/image.part.06
Continue? [y/n]
y
Deleted amzn-s3-demo-bucket/image.manifest.xml
Deleted amzn-s3-demo-bucket/image.part.00
Deleted amzn-s3-demo-bucket/image.part.01
Deleted amzn-s3-demo-bucket/image.part.02
Deleted amzn-s3-demo-bucket/image.part.03
Deleted amzn-s3-demo-bucket/image.part.04
Deleted amzn-s3-demo-bucket/image.part.05
Deleted amzn-s3-demo-bucket/image.part.06
ec2-delete-bundle complete.
```

## ec2-download-bundle
<a name="ami-download-bundle"></a>

### Description
<a name="download-bundle-description"></a>

從 Amazon S3 儲存體下載指定的 Amazon S3 支援的 Linux AMI。

### 語法
<a name="download-bundle-request"></a>

****ec2-download-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* -k *path* [--url *url*] [--region *region*] [--sigv *version*] [-m *file*] [-p *prefix*] [-d *directory*] [--retry]** 

### 選項
<a name="download-bundle-parameters"></a>

`-b, --bucket` *bucket*  
bundle 所在的 Amazon S3 儲存貯體名稱，其後為選用「/」以分隔路徑字首。  
必要：是

`-a, --access-key` *access\$1key\$1id*  
 AWS 存取金鑰 ID。  
必要：是

`-s, --secret-key` *secret\$1access\$1key*  
 AWS 私密存取金鑰。  
必要：是

`-k, --privatekey` *path*  
用於解密資訊清單的私有金鑰。  
必要：是

`--url` *url*  
Amazon S3 服務的 URL。  
預設：`https://s3.amazonaws.com/`  
必要：否

`--region` *region*  
於請求簽章內使用的區域。  
預設：`us-east-1`  
必要：若使用簽章第 4 版則為必要

`--sigv` *version*  
簽署請求時使用的簽章版本。  
有效值：`2` \$1 `4`  
預設：`4`  
必要：否

`-m, --manifest` *file*  
不含路徑的資訊清單檔案名稱。建議您指定資訊清單 (`-m`) 或字首 (`-p`)。  
必要：否

`-p, --prefix ` *prefix*  
綁定的 AMI 檔案之檔案名稱字首。  
預設：`image`  
必要：否

`-d, --directory ` *directory*  
所下載 bundle 的儲存目錄。此目錄必須存在。  
預設：目前使用中的目錄。  
必要：否

 `--retry`   
在所有 Amazon S3 錯誤後自動重試，每次操作至多五次。  
必要：否

### Output
<a name="download-bundle-output"></a>

會顯示指出下載程序各個階段的狀態訊息。

### 範例
<a name="download-bundle-response"></a>

此範例會建立 `bundled` 目錄 (使用 Linux **mkdir** 命令) 並從 `amzn-s3-demo-bucket` Amazon S3 儲存貯體下載 bundle。

```
[ec2-user ~]$ mkdir bundled
[ec2-user ~]$ ec2-download-bundle -b amzn-s3-demo-bucket/bundles/bundle_name -m image.manifest.xml -a your_access_key_id -s your_secret_access_key -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d mybundle
Downloading manifest image.manifest.xml from amzn-s3-demo-bucket to mybundle/image.manifest.xml ...
Downloading part image.part.00 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.00 ...
Downloaded image.part.00 from amzn-s3-demo-bucket
Downloading part image.part.01 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.01 ...
Downloaded image.part.01 from amzn-s3-demo-bucket
Downloading part image.part.02 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.02 ...
Downloaded image.part.02 from amzn-s3-demo-bucket
Downloading part image.part.03 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.03 ...
Downloaded image.part.03 from amzn-s3-demo-bucket
Downloading part image.part.04 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.04 ...
Downloaded image.part.04 from amzn-s3-demo-bucket
Downloading part image.part.05 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.05 ...
Downloaded image.part.05 from amzn-s3-demo-bucket
Downloading part image.part.06 from amzn-s3-demo-bucket/bundles/bundle_name to mybundle/image.part.06 ...
Downloaded image.part.06 from amzn-s3-demo-bucket
```

## ec2-migrate-manifest
<a name="ami-migrate-manifest"></a>

### Description
<a name="migrate-manifest-description"></a>

修改 Amazon S3 支援的 Linux AMI (如其憑證、核心和 RAM 磁碟)，以支援不同區域。

### 語法
<a name="migrate-manifest-request"></a>

****ec2-migrate-manifest** -c *path* -k *path* -m *path* \$1(-a *access\$1key\$1id* -s *secret\$1access\$1key* --region *region*) \$1 (--no-mapping)\$1 [--ec2cert *ec2\$1cert\$1path*] [--kernel *kernel-id*] [--ramdisk *ramdisk\$1id*]** 

### 選項
<a name="migrate-manifest-parameters"></a>

`-c, --cert` *path*  
使用者以 PEM 編碼的 RSA 公有金鑰憑證檔案。  
必要：是

`-k, --privatekey` *path*  
使用者以 PEM 編碼的 RSA 金鑰檔案路徑。  
必要：是

`--manifest` *path*  
指向資訊清單檔案的路徑。  
必要：是

`-a, --access-key` *access\$1key\$1id*  
 AWS 存取金鑰 ID。  
必要：若使用自動映射則為必要。

`-s, --secret-key ` *secret\$1access\$1key*  
 AWS 私密存取金鑰。  
必要：若使用自動映射則為必要。

`--region` *region*  
欲在映射檔案內查詢的區域。  
必要：若使用自動映射則為必要。

`--no-mapping`  
停用核心和 RAM 磁碟的自動映射。  
 在遷移過程中，Amazon EC2 會將資訊清單檔案內的核心和 RAM 磁碟，取代為專為目的地區域設計的核心與 RAM 磁碟。除非提供 `--no-mapping` 參數，否則 `ec2-migrate-bundle` 可能會使用 `DescribeRegions` 和 `DescribeImages` 操作來執行自動映射。  
必要：若您未提供用於自動映射的 `-a`、`-s` 和 `--region` 選項則為必要。

`--ec2cert` *path*  
用於加密映像資訊清單的 Amazon EC2 X.509 公有金鑰憑證路徑。  
`us-gov-west-1` 和 `cn-north-1` 區域使用非預設的公有金鑰憑證，而該憑證的路徑必須以此選項加以指定。憑證的路徑視 AMI 工具的安裝方法而異。以 Amazon Linux 而言，此憑證位於 `/opt/aws/amitools/ec2/etc/ec2/amitools/`。若您從 ZIP 檔案將 AMI 工具安裝進 [設定 Amazon EC2 AMI 工具](set-up-ami-tools.md)，則憑證位於 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`。  
必要：僅適用於 `us-gov-west-1` 和 `cn-north-1` 區域。

`--kernel` *kernel\$1id*  
欲選取的核心 ID。  
建議您使用 PV-GRUB，而不要使用核心與 RAM 磁碟。如需詳細資訊，請參閱「Amazon Linux 2 使用者指南」**中的[使用者提供的核心](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)。
必要：否

`--ramdisk` *ramdisk\$1id*  
欲選取的 RAM 磁碟 ID。  
建議您使用 PV-GRUB，而不要使用核心與 RAM 磁碟。如需詳細資訊，請參閱「Amazon Linux 2 使用者指南」**中的[使用者提供的核心](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)。
必要：否

### Output
<a name="migrate-manifest-output"></a>

描述綁定程序階段與狀態的狀態訊息。

### 範例
<a name="migrate-manifest-response"></a>

此範例會將 `my-ami.manifest.xml` 資訊清單中指定的 AMI，從美國複製至歐洲。

```
[ec2-user ~]$ ec2-migrate-manifest --manifest my-ami.manifest.xml --cert cert-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem --privatekey pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem --region eu-west-1 

Backing up manifest...
Successfully migrated my-ami.manifest.xml It is now suitable for use in eu-west-1.
```

## ec2-unbundle
<a name="ami-unbundle"></a>

### Description
<a name="unbundle-description"></a>

透過 Amazon S3 支援的 Linux AMI 重新建立 bundle。

### 語法
<a name="unbundle-request"></a>

****ec2-unbundle** -k *path* -m *path* [-s *source\$1directory*] [-d *destination\$1directory*]** 

### 選項
<a name="unbundle-parameters"></a>

`-k, --privatekey` *path*  
指向您以 PEM 編碼的 RSA 金鑰檔案路徑。  
必要：是

`-m, --manifest` *path*  
指向資訊清單檔案的路徑。  
必要：是

`-s, --source` *source\$1directory*  
內含 bundle 的目錄。  
預設：目前的目錄。  
必要：否

`-d, --destination` *destination\$1directory*  
欲從中解開 AMI 的目錄。此目的地目錄必須存在。  
預設：目前的目錄。  
必要：否

### 範例
<a name="unbundle-response"></a>

此 Linux 和 UNIX 範例會解開 `image.manifest.xml` 檔案內指定的 AMI。

```
[ec2-user ~]$ mkdir unbundled
$ ec2-unbundle -m mybundle/image.manifest.xml -k pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -s mybundle -d unbundled
$ ls -l unbundled
total 1025008
-rw-r--r-- 1 root root 1048578048 Aug 25 23:46 image.img
```

### Output
<a name="unbundle-output"></a>

會顯示指出解開程序各個階段的狀態訊息。

## ec2-upload-bundle
<a name="ami-upload-bundle"></a>

### Description
<a name="upload-bundle-description"></a>

將 Amazon S3 支援的 Linux AMI 的套件組合上傳至 Amazon S3，並在所上傳的物件上設定適當的存取控制清單 (ACL)。如需詳細資訊，請參閱[建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md)。

**注意**  
若要為您的 Amazon S3 支援的 Linux AMI 將物件上傳到 S3 儲存貯體，必須為儲存貯體啟用 ACL。否則，Amazon EC2 將無法在要上傳的物件上設定 ACL。如果您的目的地儲存貯體將儲存貯體擁有者強制設定用於 S3 物件擁有權，這將無法運作，因為 ACL 已停用。如需詳細資訊，請參閱[控制物件的擁有權並停用儲存貯體的 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)。

### 語法
<a name="upload-bundle-request"></a>

****ec2-upload-bundle** -b *bucket* -a *access\$1key\$1id* -s *secret\$1access\$1key* [-t *token*] -m *path* [--url *url*] [--region *region*] [--sigv *version*] [--acl *acl*] [-d *directory*] [--part *part*] [--retry] [--skipmanifest]** 

### 選項
<a name="upload-bundle-parameters"></a>

`-b, --bucket` *bucket*  
存放 bundle 的 Amazon S3 儲存貯體名稱，其後為選用「/」以分隔路徑字首。若該儲存貯體不存在，則會加以建立 (如該儲存貯體名稱為可用)。此外，如果儲存貯體不存在且 AMI 工具版本為 1.5.18 或更新版本，則此命令會設定儲存貯體的 ACL。  
必要：是

`-a, --access-key` *access\$1key\$1id*  
您的 AWS 存取金鑰 ID。  
必要：是

`-s, --secret-key` *secret\$1access\$1key*  
您的 AWS 私密存取金鑰。  
必要：是

`-t, --delegation-token` *token*  
要傳遞給 AWS 請求的委派字符。如需詳細資訊，請參閱 *IAM 使用者指南*中的[臨時安全憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。  
必要：僅適用您使用暫時安全登入資料時。  
預設：`AWS_DELEGATION_TOKEN` 環境變數的值 (如已設定)。

`-m, --manifest` *path*  
指向資訊清單檔案的路徑。資訊清單檔案會於綁定程序期間建立，位於內含 bundle 的目錄。  
必要：是

`--url` *url*  
已廢除. 改用 `--region` 選項，除非您的儲存貯體被限制在 `EU` 位置 (而非 `eu-west-1`)。`--location` 旗標是確定該特定位置限制的唯一方法。  
Amazon S3 端點服務 URL。  
預設：`https://s3.amazonaws.com/`  
必要：否

`--region` *region*  
要在請求簽章內針對目的地 S3 儲存貯體使用的區域。  
+ 若該儲存貯體不存在且您未指定區域，此工具會建立不具位置限制的儲存貯體 (位於`us-east-1`)。
+ 若該儲存貯體不存在且您已指定區域，此工具會在該區域建立儲存貯體。
+ 若該儲存貯體存在但您未指定區域，此工具會使用該儲存貯體的位置。
+ 若該儲存貯體存在且您指定 `us-east-1` 為區域，此工具會使用該儲存貯體的實際位置，不會出現錯誤訊息，而且會覆寫所有現有的相符檔案。
+ 若該儲存貯體存在且您指定的區域 (`us-east-1` 之外) 與儲存貯體的實際位置不相符，此工具會退出並顯示錯誤。
若您的儲存貯體被限制在 `EU` 位置 (而非 `eu-west-1`)，請改用 `--location` 旗標。`--location` 旗標是確定該特定位置限制的唯一方法。  
預設：`us-east-1`  
必要：若使用簽章第 4 版則為必要

`--sigv` *version*  
簽署請求時使用的簽章版本。  
有效值：`2` \$1 `4`  
預設：`4`  
必要：否

`--acl` *acl*  
綁定映像的存取控制清單政策。  
有效值：`public-read` \$1 `aws-exec-read`  
預設：`aws-exec-read`  
必要：否

`-d, --directory` *directory*  
內含綁定 AMI 組件的目錄。  
預設：內含資訊清單檔案的目錄 (請參閱 `-m` 選項)。  
必要：否

`--part` *part*  
開始上傳指定組件及所有後續組件。例如 `--part 04`。  
必要：否

`--retry`  
在所有 Amazon S3 錯誤後自動重試，每次操作至多五次。  
必要：否

`--skipmanifest`  
不會上傳資訊清單。  
必要：否

`--location` *location*  
已廢除. 改用 `--region` 選項，除非您的儲存貯體被限制在 `EU` 位置 (而非 `eu-west-1`)。`--location` 旗標是確定該特定位置限制的唯一方法。  
目的地 Amazon S3儲存貯體的位置限制。若該儲存貯體存在且您指定的位置與儲存貯體的實際位置不相符，此工具會退出並顯示錯誤。若該儲存貯體存在但您未指定位置，此工具會使用該儲存貯體的位置。若該儲存貯體不存在且您已指定位置，此工具會在該位置建立儲存貯體。若該儲存貯體不存在且您未指定位置，此工具會建立不具位置限制的儲存貯體 (位於 `us-east-1`)。  
預設：若已指定 `--region`，則位置會設定為該指定區域。若未指定 `--region`，則位置預設為 `us-east-1`。  
必要：否

### Output
<a name="upload-bundle-output"></a>

Amazon EC2 顯示的狀態訊息，會指出上傳程序的階段與狀態。

### 範例
<a name="upload-bundle-response"></a>

此範例會上傳 `image.manifest.xml` 資訊清單指定的 bundle。

```
[ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundles/bundle_name -m image.manifest.xml -a your_access_key_id -s your_secret_access_key
Creating bucket...
Uploading bundled image parts to the S3 bucket amzn-s3-demo-bucket ...
Uploaded image.part.00
Uploaded image.part.01
Uploaded image.part.02
Uploaded image.part.03
Uploaded image.part.04
Uploaded image.part.05
Uploaded image.part.06
Uploaded image.part.07
Uploaded image.part.08
Uploaded image.part.09
Uploaded image.part.10
Uploaded image.part.11
Uploaded image.part.12
Uploaded image.part.13
Uploaded image.part.14
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.
```

## AMI 工具常用選項
<a name="common-args-ami"></a>

多數 AMI 工具接受下列選用參數。

`--help, -h`  
顯示協助訊息。

`--version`  
顯示版本及著作權聲明。

`--manual`  
顯示手動輸入。

`--batch`  
以批次模式執行，不使用互動式提示。

`--debug`  
顯示可用於故障排除問題的資訊。

# 將 Amazon S3 支援的 AMI 轉換為 EBS 支援的 AMI
<a name="Using_ConvertingS3toEBS"></a>

您可將擁有的 Amazon S3 支援的 Linux AMI 轉換為 Amazon EBS 支援的 Linux AMI。

**重要**  
您無法轉換不屬於您的 AMI。

**如需將 Amazon S3 支援的 AMI 轉換為 Amazon EBS 支援的 AMI**

1. 從 Amazon EBS 後端 AMI 啟動 Amazon Linux 執行個體。如需詳細資訊，請參閱[使用主控台中的啟動執行個體精靈，啟動 EC2 執行個體](ec2-launch-instance-wizard.md)。Amazon Linux 執行個體已預先安裝 AWS CLI 和 AMI 工具。

1. 請將您用來組合 Amazon S3 支援的 AMI 的 X.509 私有金鑰上傳至您的執行個體。此金鑰是用來確定只有您與 Amazon EC2 可存取您的 AMI。

   1. 在執行個體上為 X.509 私有金鑰建立如下的暫時目錄：

      ```
      [ec2-user ~]$ mkdir /tmp/cert
      ```

   1. 使用 [scp](linux-file-transfer-scp.md) 等安全複製工具從電腦上將 X.509 私有金鑰複製到執行個體上的 `/tmp/cert` 目錄內。以下命令中的 *my-private-key* 參數為用來透過 SSH 連接執行個體的私有金鑰。例如：

      ```
      you@your_computer:~ $ scp -i my-private-key.pem /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem ec2-user@ec2-203-0-113-25.compute-1.amazonaws.com:/tmp/cert/
      pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem  100%  717     0.7KB/s   00:00
      ```

1. 設定環境變數以使用 AWS CLI。如需詳細資訊，請參閱[環境變數](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)。

   1. （建議） 為您的 AWS 存取金鑰、私密金鑰和工作階段字符設定環境變數。

      ```
      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
      [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
      [ec2-user ~]$ export AWS_SESSION_TOKEN=your_session_token
      ```

   1. 為您的 AWS 存取金鑰和私密金鑰設定環境變數。

      ```
      [ec2-user ~]$ export AWS_ACCESS_KEY_ID=your_access_key_id
      [ec2-user ~]$ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
      ```

1. 為新的 AMI 準備 Amazon Elastic Block Store (Amazon EBS) 磁碟區。

   1. 使用 [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html) 命令在與您執行個體相同的可用區域中建立空的 EBS 磁碟區。記下命令輸出中的磁碟區 ID。
**重要**  
 此 EBS 磁碟區的大小必須等於或大於原本的執行個體儲存體根磁碟區。

      ```
      aws ec2 create-volume \
          --size 10 \
          --region us-west-2 \
          --availability-zone us-west-2b
      ```

   1. 使用 [attach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html) 命令將磁碟區連接到您的 Amazon EBS 後端執行個體。

      ```
      aws ec2 attach-volume \
          --volume-id vol-01234567890abcdef \
          --instance-id i-1234567890abcdef0 \
          --region us-west-2
      ```

1. 建立您的 bundle 資料夾。

   ```
   [ec2-user ~]$ mkdir /tmp/bundle
   ```

1. 使用 `/tmp/bundle` 命令將執行個體後端 AMI 的 bundle 下載至 [ec2-download-bundle](ami-tools-commands.md#ami-download-bundle)。

   ```
   [ec2-user ~]$ ec2-download-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m image.manifest.xml -a $AWS_ACCESS_KEY_ID -s $AWS_SECRET_ACCESS_KEY --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -d /tmp/bundle
   ```

1. 使用 [ec2-unbundle](ami-tools-commands.md#ami-unbundle) 命令從 bundle 重新建構映像檔。

   1. 將目錄變更為 bundle 資料夾。

      ```
      [ec2-user ~]$ cd /tmp/bundle/
      ```

   1. 執行 [ec2-unbundle](ami-tools-commands.md#ami-unbundle) 命令。

      ```
      [ec2-user bundle]$ ec2-unbundle -m image.manifest.xml --privatekey /path/to/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem
      ```

1. 從解開映像將檔案複製到新的 EBS 磁碟區。

   ```
   [ec2-user bundle]$ sudo dd if=/tmp/bundle/image of=/dev/sdb bs=1M
   ```

1. 探測磁碟區中是否有任何解開的新分割區。

   ```
   [ec2-user bundle]$ sudo partprobe /dev/sdb1
   ```

1. 列出區塊型儲存設備，以找出要掛載的設備名稱。

   ```
   [ec2-user bundle]$ lsblk
   NAME         MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
   /dev/sda    202:0    0   8G  0 disk
   └─/dev/sda1 202:1    0   8G  0 part /
   /dev/sdb    202:80   0  10G  0 disk
   └─/dev/sdb1 202:81   0  10G  0 part
   ```

   在此範例中，要掛載的分割區為 `/dev/sdb1`，但您的設備名稱可能不同。如果磁碟區尚未分割，要掛載的設備會類似 `/dev/sdb` (沒有設備分割區尾碼)。

1. 為新的 EBS 磁碟區建立掛載點，然後掛載磁碟區。

   ```
   [ec2-user bundle]$ sudo mkdir /mnt/ebs
   [ec2-user bundle]$ sudo mount /dev/sdb1 /mnt/ebs
   ```

1. 用您偏好的文字編輯器 (例如 `/etc/fstab` 或 **vim**) 在 EBS 磁碟區上開啟 **nano** 檔案，並移除執行個體 (暫時性) 存放磁碟區的任何項目。EBS 磁碟區掛載於 `/mnt/ebs`，因此 `fstab` 檔案位於 `/mnt/ebs/etc/fstab`。

   ```
   [ec2-user bundle]$ sudo nano /mnt/ebs/etc/fstab
   #
   LABEL=/     /           ext4    defaults,noatime  1   1
   tmpfs       /dev/shm    tmpfs   defaults        0   0
   devpts      /dev/pts    devpts  gid=5,mode=620  0   0
   sysfs       /sys        sysfs   defaults        0   0
   proc        /proc       proc    defaults        0   0
   /dev/sdb        /media/ephemeral0       auto    defaults,comment=cloudconfig    0       2
   ```

   在此範例中，應該移除最後一行。

1. 卸載磁碟區，並從執行個體分離。

   ```
   [ec2-user bundle]$ sudo umount /mnt/ebs
   [ec2-user bundle]$ aws ec2 detach-volume --volume-id vol-01234567890abcdef --region us-west-2
   ```

1. 從新的 EBS 磁碟區建立 AMI，如下所示。

   1. 建立新 EBS 磁碟區的快照。

      ```
      [ec2-user bundle]$ aws ec2 create-snapshot --region us-west-2 --description "your_snapshot_description" --volume-id vol-01234567890abcdef
      ```

   1. 檢查快照是否完整。

      ```
      [ec2-user bundle]$ aws ec2 describe-snapshots --region us-west-2 --snapshot-id snap-0abcdef1234567890
      ```

   1. 使用 **describe-images** 命令找出原始 AMI 的處理器架構、虛擬化類型與核心映像 (`aki`)。在此步驟中，您需要擁有原始 Amazon S3 支援的 AMI 的 AMI ID。

      ```
      [ec2-user bundle]$ aws ec2 describe-images --region us-west-2 --image-id ami-0abcdef1234567890 --output text
      IMAGES	x86_64	amazon/amzn-ami-pv-2013.09.2.x86_64-s3	ami-8ef297be	amazon	available	public	machine	aki-fc8f11cc	instance-store	paravirtual	xen
      ```

      在此範例中，其架構為 `x86_64`，核心映像 ID 為 `aki-fc8f11cc`。請將這些數值使用在下列步驟。如果上述命令的輸出也列出 `ari` ID，請將其記下。

   1. 使用新 EBS 磁碟區的快照 ID 和先前步驟中的數值登錄您的新 AMI。如果先前的命令輸出列出 `ari` ID，請用 `--ramdisk-id ari_id` 將其加入到下列命令。

      ```
      [ec2-user bundle]$ aws ec2 register-image --region us-west-2 --name your_new_ami_name --block-device-mappings DeviceName=device-name,Ebs={SnapshotId=snap-0abcdef1234567890} --virtualization-type paravirtual --architecture x86_64 --kernel-id aki-fc8f11cc --root-device-name device-name
      ```

1. (選用) 確認可以從新 AMI 啟動執行個體後，您便能刪除為此程序建立的 EBS 磁碟區。

   ```
   aws ec2 delete-volume --volume-id vol-01234567890abcdef
   ```

# 使用 Windows Sysprep 建立 Amazon EC2 AMI
<a name="ami-create-win-sysprep"></a>

Microsoft 系統準備 (Windows Sysprep) 工具建立作業系統的通用版本，並在擷取新影像之前刪除特定於執行個體的系統組態。

我們建議您使用 [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html) 來自動建立、管理和部署自訂、安全且最新的「最佳」伺服器映像，這些映像會預先安裝並預先設定為軟體和設定。

您也可以使用 Windows Sysprep 透過 Windows 啟動代理程式來建立標準化 AMI：EC2Launch v2、EC2Launch 和 EC2Config。

**重要**  
請不要使用 Windows Sysprep 來建立執行個體備份。Windows Sysprep 會移除系統特定資訊；移除此資訊可能會在執行個體備份時發生意料之外的結果。

若要疑難排解 Windows Sysprep，請參閱 [針對 Amazon EC2 Windows 執行個體的 Sysprep 問題進行疑難排解](sysprep-troubleshoot.md)。

**Topics**
+ [Windows Sysprep 階段](#sysprep-phases)
+ [開始之前](#sysprep-begin)
+ [使用 Windows Sysprep 搭配 EC2Launch v2](sysprep-using-ec2launchv2.md)
+ [使用 Windows Sysprep 搭配 EC2Launch](ec2launch-sysprep.md)
+ [使用 Windows Sysprep 搭配 EC2Config](sysprep-using.md)

## Windows Sysprep 階段
<a name="sysprep-phases"></a>

Windows Sysprep 會執行下列階段：
+ **一般化**：此 Sysprep 工具會移除映像特定資訊和組態。例如，Windows Sysprep 會移除安全識別符 (SID)、電腦名稱、事件日誌和特定驅動程式等。完成本階段之後，作業系統 (OS) 即準備好建立 AMI。
**注意**  
當您使用 Windows 啟動代理程式執行 Windows Sysprep 時，系統會防止驅動程式被移除，因為 `PersistAllDeviceInstalls` 設定預設為 true。
+ **特製化**：隨插即用會掃描電腦，並為任何偵測到的裝置安裝驅動程式。此 Sysprep 工具會產生電腦名稱和 SID 等 OS 要求。或者，您可以在此階段執行命令。
+ **立即可用體驗 (OOBE)**：系統執行縮簡版的 Windows 安裝程式，並要求您輸入系統語言、時區和已註冊的組織這類資訊。當您使用 Windows 啟動代理程式執行 Windows Sysprep 時，回應檔案會自動執行此階段。

## 開始之前
<a name="sysprep-begin"></a>
+ 執行 Windows Sysprep 之前，除了用於執行 Windows Sysprep 的單一管理員帳戶外，建議您移除其他所有本機使用者帳戶和所有帳戶描述檔。如果您以其他帳戶和描述檔執行 Windows Sysprep，可能會發生非預期的行為，包括遺失描述檔資料或無法完成 Windows Sysprep。
+ 了解有關 [Sysprep 概觀](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview)的更多資訊。
+ 了解 [Sysprep 支援的伺服器角色](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep-support-for-server-roles)。

# 使用 Windows Sysprep 搭配 EC2Launch v2 來建立 AMI
<a name="sysprep-using-ec2launchv2"></a>

若透過已安裝 EC2Launch v2 代理程式的執行個體建立映像，EC2Launch v2 會在映像就緒時執行特定任務。這包括搭配使用 Windows Sysprep。如需詳細資訊，請參閱[Windows Sysprep 階段](ami-create-win-sysprep.md#sysprep-phases)。

**Topics**
+ [Windows Sysprep 操作](#sysprep-actions-ec2launchv2)
+ [Sysprep 後續階段](#sysprep-post-ec2launchv2)
+ [使用 EC2Launch v2 執行 Windows Sysprep](#sysprep-gui-procedure-ec2launchv2)

## Windows Sysprep 操作
<a name="sysprep-actions-ec2launchv2"></a>

Windows Sysprep 和 EC2Launch v2 會在準備映像時執行下列動作。

1. 當您在 **EC2Launch settings (EC2Launch 設定)** 對話方塊中選擇 **Shutdown with Sysprep (使用 Sysprep 關機)** 時，系統會執行 `ec2launch sysprep` 命令。

1. EC2Launch v2 透過讀取位於 `unattend.xml` 的登錄值來編輯 `HKEY_USERS\.DEFAULT\Control Panel\International\LocaleName` 檔案的內容。檔案位於以下目錄：`C:\ProgramData\Amazon\EC2Launch\sysprep`。

1. 系統會執行 `BeforeSysprep.cmd`。此命令會建立一個登錄機碼，如下所示：

   **reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 1 /f**

   除非重新啟用 RDP 連接，否則此登錄機碼會停用連線。停用 RDP 連線是必要的安全措施，因為在執行 Windows Sysprep 之後的第一個開機工作階段期間，RDP 會有一小段時間允許連接，而且管理員密碼會空白。

1. EC2Launch v2 服務會執行下列命令來呼叫 Windows Sysprep：

   **sysprep.exe /oobe /generalize /shutdown /unattend: "C:\$1ProgramData\$1Amazon\$1EC2Launch\$1sysprep\$1unattend.xml"**

### 一般化階段
<a name="sysprep-generalize-ec2launchv2"></a>
+ EC2Launch v2 會移除映像特定資訊和組態 (例如電腦名稱和 SID)。如果執行個體是網域成員，即會從網域中移除。`unattend.xml` 回應檔案包括下列可影響此階段的設定：
  + **PersistAllDeviceInstalls**：此設定可防止 Windows 安裝程式移除和重新設定裝置，以加速映像準備程序，因為 Amazon AMI 需要執行特定驅動程式，而且重新偵測這些驅動程式需要一些時間。
  + **DoNotCleanUpNonPresentDevices**：此設定會保留目前不存在之裝置的隨插即用資訊。
+ Windows Sysprep 會在準備建立 AMI 時關閉 OS。系統會啟動新的執行個體，或啟動原始執行個體。

### 特製化階段
<a name="sysprep-specialize-ec2launchv2"></a>

系統會產生電腦名稱和 SID 這類 OS 特定要求。系統也會根據您在 `unattend.xml` 回應檔案中指定的組態，來執行下列動作。
+ **CopyProfile**：Windows Sysprep 可以設定為刪除所有使用者描述檔 (包括內建管理員描述檔)。此設定會保留內建管理員帳戶，因此您對該帳戶進行的任何自訂都會帶到新的映像。預設值為 `True`。

  **CopyProfile** 會以現有的本機管理員描述檔取代預設描述檔。執行 Windows Sysprep 之後登入的所有帳戶，將於第一次登入時收到該描述檔的複本及其內容。

  如果您沒有特定的使用者描述檔自訂要帶到新映像，請將此設定變更為 `False`。Windows Sysprep 將移除所有使用者描述檔 (這樣可節省時間和磁碟空間)。
+ **TimeZone**：時區會預設為國際標準時間 (UTC)。
+ **順序為 1 的同步命令**：系統會執行下列命令，以啟用管理員帳戶並指定密碼要求。

  ```
  net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES
  ```
+ **順序為 2 的同步命令**：系統會將管理員密碼變碼。此安全措施的用途在於您未設定 `setAdminAccount` 任務時，可防止在 Windows Sysprep 完成之後存取執行個體。

  系統從本機啟動代理程式目錄執行以下命令 (`C:\Program Files\Amazon\EC2Launch\`)。

  ```
  EC2Launch.exe internal randomize-password --username Administrator
  ```
+ 若要啟用遠端桌面連接，系統將終端伺服器 `fDenyTSConnections` 登錄機碼設定為 false。

### OOBE 階段
<a name="sysprep-oobe-ec2launchv2"></a>

1. 系統使用 EC2Launch v2 回應檔案指定下列組態：
   + `<InputLocale>en-US</InputLocale>`
   + `<SystemLocale>en-US</SystemLocale>`
   + `<UILanguage>en-US</UILanguage>`
   + `<UserLocale>en-US</UserLocale>`
   + `<HideEULAPage>true</HideEULAPage>`
   + `<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>`
   + `<ProtectYourPC>3</ProtectYourPC>`
   + `<BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>`
   + `<TimeZone>UTC</TimeZone>`
   + `<RegisteredOrganization>Amazon.com</RegisteredOrganization>`
   + `<RegisteredOwner>EC2</RegisteredOwner>`
**注意**  
在一般化和特製化階段期間，EC2Launch v2 會監控 OS 的狀態。如果 EC2Launch v2 偵測到 OS 處於 Sysprep 階段，即會將下列訊息發佈至系統日誌：  
Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. 系統會執行 EC2Launch v2。

## Sysprep 後續階段
<a name="sysprep-post-ec2launchv2"></a>

Windows Sysprep 完成之後，EC2Launch v2 會將下列訊息傳送至主控台輸出：

```
Windows sysprep configuration complete.
```

EC2Launch v2 接著會執行下列動作：

1. 讀取 `agent-config.yml` 檔案的內容並執行已設定的任務。

1. 執行 `preReady` 階段中的所有任務。

1. 完成後，會將 `Windows is ready` 訊息傳送至執行個體系統日誌。

1. 執行 `PostReady` 階段中的所有任務。

如需 EC2Launch v2 的詳細資訊，請參閱[在 EC2 Windows 執行個體啟動期間，使用 EC2Launch v2 代理程式執行任務](ec2launch-v2.md)。

## 使用 EC2Launch v2 執行 Windows Sysprep
<a name="sysprep-gui-procedure-ec2launchv2"></a>

請使用下列程序，使用 Windows Sysprep 搭配 EC2Launch v2 來建立標準化 AMI。

1. 在 Amazon EC2 主控台中，找出您要複製的 AMI。

1. 啟動和連線至 Windows 執行個體。

1. 自訂設定

   1. 在 Windows 的**開始**功能表中，搜尋並選擇 **Amazon EC2Launch 設定**。如需有關 Amazon **EC2Launch 設定**對話方塊中選項和設定的詳細資訊，請參閱[設定 Windows 執行個體的 EC2Launch v2 設定](ec2launch-v2-settings.md)。

   1. 若已做出變更，選擇**儲存**後再關閉。

1. 選擇**透過 Sysprep 關閉**或**不透過 Sysprep 關閉**。

系統會要求您確認要執行 Windows Sysprep 並將執行個體關機，請按一下**是**。EC2Launch v2 執行 Windows Sysprep。接著，系統會將您登出執行個體，然後執行個體會關機。如果您檢查 Amazon EC2 主控台中的 **Instances (執行個體)** 頁面，執行個體狀態會從 `Running` 變更為 `Stopping`，再變更為 `Stopped`。這時便能放心地從此執行個體建立 AMI。

您可以從命令列使用下列命令手動調用 Windows Sysprep 工具：

```
"%programfiles%\amazon\ec2launch\ec2launch.exe" sysprep --shutdown=true
```

# 使用 Windows Sysprep 搭配 EC2Launch 建立 AMI
<a name="ec2launch-sysprep"></a>

若透過已安裝 EC2Launch 代理程式的執行個體建立映像，EC2Launch 會在映像就緒時執行特定任務。這包括搭配使用 Windows Sysprep。如需詳細資訊，請參閱[Windows Sysprep 階段](ami-create-win-sysprep.md#sysprep-phases)。

EC2Launch 會為 Windows Sysprep 提供預設回應檔案和批次檔案，這可自動化和保護您 AMI 上的映像準備程序。您可選擇性修改這些檔案。這些檔案預設位於下列目錄：`C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep`。

**重要**  
請不要使用 Windows Sysprep 來建立執行個體備份。Windows Sysprep 會移除系統專屬資訊。如果您移除此資訊，執行個體備份可能產生意外結果。

**Topics**
+ [Windows Sysprep 的 EC2Launch 回應和批次檔案](#ec2launch-sysprep-answer-batch)
+ [使用 EC2Launch 執行 Windows Sysprep](#ec2launch-sysprep-running)
+ [啟動自訂 AMI 時更新 Server 2016 和更新版本的中繼資料/KMS 路由](#update-metadata-KMS)

## Windows Sysprep 的 EC2Launch 回應和批次檔案
<a name="ec2launch-sysprep-answer-batch"></a>

Windows Sysprep 的 EC2Launch 回應檔案和批次檔案包含下列內容：

`Unattend.xml`  
這是預設回應檔案。如果您執行 `SysprepInstance.ps1`，或在使用者介面中選擇 **ShutdownWithSysprep**，系統會從這個檔案讀取設定。

`BeforeSysprep.cmd`  
自訂此批次檔案可在 EC2Launch 執行 Windows Sysprep 前執行命令。

`SysprepSpecialize.cmd`  
自訂此批次檔案可在 Windows Sysprep 特製化階段期間執行命令。

## 使用 EC2Launch 執行 Windows Sysprep
<a name="ec2launch-sysprep-running"></a>

完整安裝 Windows Server 2016 和更新版本 (包含桌面體驗) 後，您可以使用 EC2Launch 手動執行 Windows Sysprep，或使用 **EC2 Launch 設定**應用程式執行 Sysprep。

**使用 EC2Launch 設定應用程式執行 Windows Sysprep**

1. 在 Amazon EC2 主控台中，尋找或建立 Windows Server 2016 或更新版本 AMI。

1. 從 AMI 啟動 Windows 執行個體。

1. 連線到您的 Windows 執行個體並加以自訂。

1. 搜尋並執行 **EC2LaunchSettings** 應用程式。根據預設，其位於下列目錄：`C:\ProgramData\Amazon\EC2-Windows\Launch\Settings`。  
![\[EC2 Launch Settings application (EC2 Launch 設定應用程式)\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ec2launch-sysprep.png)

1. 視需要選取或清除選項。這些設定存放在 `LaunchConfig.json` 檔案中。

1. 針對 **Administrator Password (管理員密碼)**，請執行下列其中一項作業：
   + 選擇 **Random (隨機)**。EC2Launch 會產生密碼並以使用者金鑰將其加密。系統會在執行個體啟動後停用此設定，以便執行個體重新開機或停止再啟動時，能持續使用這個密碼。
   + 選擇 **Specify (指定)** 並輸入符合系統要求的密碼。系統會將該密碼以純文字存放於 `LaunchConfig.json`，並在 Windows Sysprep 設定管理員密碼後予以刪除。如果您立即關機，即會立即設定密碼。EC2Launch 會以使用者金鑰加密該密碼。
   + 選擇 **DoNothing (不執行動作)**，並在 `unattend.xml` 檔案中指定密碼。如果您未在 `unattend.xml` 中指定密碼，會停用管理員帳戶。

1. 選擇 **Shutdown with Sysprep (使用 Sysprep 關機)**。

**使用 EC2Launch 手動執行 Windows Sysprep**

1. 在 Amazon EC2 主控台中尋找或建立您想要複製的 Windows Server 2016 或更新版本 Datacenter 版 AMI。

1. 啟動和連線至 Windows 執行個體。

1. 自訂執行個體。

1. 在 `LaunchConfig.json` 檔案中指定設定。根據預設，此檔案位於 `C:\ProgramData\Amazon\EC2-Windows\Launch\Config` 目錄。

   針對 `adminPasswordType`，請指定下列其中一個值：  
`Random`  
EC2Launch 會產生密碼並以使用者金鑰將其加密。系統會在執行個體啟動後停用此設定，以便執行個體重新開機或停止再啟動時，能持續使用這個密碼。  
`Specify`  
EC2Launch 會使用您在 `adminPassword` 中指定的密碼。如果該密碼不符合系統要求，EC2Launch 會改為產生隨機密碼。系統會將該密碼以純文字存放於 `LaunchConfig.json`，並在 Windows Sysprep 設定管理員密碼後予以刪除。EC2Launch 會以使用者金鑰加密該密碼。  
`DoNothing`  
EC2Launch 會使用您在 `unattend.xml` 檔案中指定的密碼。如果您未在 `unattend.xml` 中指定密碼，會停用管理員帳戶。

1. (選用) 請在 `unattend.xml` 和其他組態檔案中指定設定。如果您計畫安裝，就不需要變更這些檔案。根據預設，檔案位於下列目錄：`C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep`。

1. 在 Windows PowerShell 中，執行 `./InitializeInstance.ps1 -Schedule`。根據預設，指令碼位於下列目錄：`C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts`。此指令碼會排程執行個體在下一次開機期間初始化。您必須在執行下一步的 `SysprepInstance.ps1` 指令碼前，執行此指令碼。

1. 在 Windows PowerShell 中，執行 `./SysprepInstance.ps1`。根據預設，指令碼位於下列目錄：`C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts`。

系統會將您登出執行個體，然後執行個體會關機。如果您檢查 Amazon EC2 主控台中的 **Instances (執行個體)** 頁面，執行個體狀態會從 `Running` 變更為 `Stopping`，然後變更為 `Stopped`。這時便能放心地從這個執行個體建立 AMI。

## 啟動自訂 AMI 時更新 Server 2016 和更新版本的中繼資料/KMS 路由
<a name="update-metadata-KMS"></a>

若要在啟動自訂 AMI 時更新 Server 2016 和更新版本的中繼資料/KMS 路由，請執行下列其中一項動作：
+ 執行 EC2LaunchSettings GUI (C:\$1ProgramData\$1Amazon\$1EC2-Windows\$1Launch\$1Settings\$1Ec2LaunchSettings.exe)，然後選取選項以搭配 Windows Sysprep 來關機。
+ 在建立 AMI 之前，請執行 EC2LaunchSettings，且不搭配 Windows Sysprep 來關機。這樣會將 EC2 啟動初始化任務設為在下一次開機時執行，如此將會根據執行個體的子網來設定路由。
+ 在從 [PowerShell](ec2launch-config.md#ec2launch-inittasks) 建立 AMI 之前，手動重新排程 EC2 啟動初始化任務。
**重要**  
在重新排定任務之前，請記下預設密碼重設行為。
+ 若要在發生 Windows 啟用失敗或與執行個體中繼資料通訊失敗的執行中的執行個體上更新路由，請參閱[「無法啟用 Windows」](common-messages.md#activate-windows)。

# 使用 Windows Sysprep 搭配 EC2Config 建立 AMI
<a name="sysprep-using"></a>

若透過已安裝 EC2Config 服務的執行個體建立映像，EC2Config 會在映像就緒時執行特定任務。這包括搭配使用 Windows Sysprep。如需詳細資訊，請參閱[Windows Sysprep 階段](ami-create-win-sysprep.md#sysprep-phases)。

**Topics**
+ [Windows Sysprep 操作](#sysprep-actions)
+ [Sysprep 後續階段](#sysprep-post)
+ [搭配 EC2Config 服務執行 Windows Sysprep](#sysprep-gui-procedure)

## Windows Sysprep 操作
<a name="sysprep-actions"></a>

Windows Sysprep 和 EC2Config 服務會在準備映像時執行下列動作。

1. 當您在 **EC2 服務屬性**對話方塊中選擇**使用 Sysprep 關機**時，系統會執行 **ec2config.exe -sysprep** 命令。

1. EC2Config 服務會讀取 `BundleConfig.xml` 檔案的內容。此檔案預設位在下列目錄：`C:\Program Files\Amazon\Ec2ConfigService\Settings`。

    `BundleConfig.xml` 檔案包括下列設定。您可以變更這些設定：
   + **AutoSysprep**：指出是否自動使用 Windows Sysprep。如果您要從 EC2 服務屬性對話方塊中執行 Windows Sysprep，則不需要變更此值。預設值為 `No`。
   + **SetRDPCertificate**：設定遠端桌面伺服器的自簽憑證。這可讓您安全地使用遠端桌面通訊協定 (RDP) 連線至執行個體。如果新的執行個體應該使用憑證，請將值變更為 `Yes`。此設定不適用於 Windows Server 2012 執行個體，因為這些作業系統可以產生自己的憑證。預設值為 `No`。
   + **SetPasswordAfterSysprep**：在新啟動的執行個體上設定隨機密碼，並以使用者啟動金鑰加密，然後將加密的密碼輸出到主控台。如果新執行個體不應該設定為隨機加密密碼，請將值變更為 `No`。預設值為 `Yes`。
   +  **PreSysprepRunCmd**：要執行之命令的位置。根據預設，命令位於下列目錄：`C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd`。

1. 系統會執行 `BeforeSysprep.cmd`。此命令會建立一個登錄機碼，如下所示：

   ```
   reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
   ```

   除非重新啟用 RDP 連接，否則此登錄機碼會停用連線。停用 RDP 連線是必要的安全措施，因為在執行 Windows Sysprep 之後的第一個開機工作階段期間，RDP 會有一小段時間允許連接，而且管理員密碼會空白。

1. EC2Config 服務會執行下列命令來呼叫 Windows Sysprep：

   ```
   sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown
   ```

### 一般化階段
<a name="sysprep-generalize"></a>
+ 此工具會移除映像特定資訊和組態 (例如電腦名稱和 SID)。如果執行個體是網域成員，即會從網域中移除。`sysprep2008.xml` 回應檔案包括下列可影響此階段的設定：
  + **PersistAllDeviceInstalls**：此設定可防止 Windows 安裝程式移除和重新設定裝置，以加速映像準備程序，因為 Amazon AMI 需要執行特定驅動程式，而且重新偵測這些驅動程式需要一些時間。
  + **DoNotCleanUpNonPresentDevices**：此設定會保留目前不存在之裝置的隨插即用資訊。
+ Windows Sysprep 會在準備建立 AMI 時關閉 OS。系統會啟動新的執行個體，或啟動原始執行個體。

### 特製化階段
<a name="sysprep-specialize"></a>

系統會產生電腦名稱和 SID 這類 OS 特定要求。系統也會根據您在 sysprep2008.xml 回應檔案中指定的組態，來執行下列動作。
+ **CopyProfile**：Windows Sysprep 可以設定為刪除所有使用者描述檔 (包括內建管理員描述檔)。此設定會保留內建管理員帳戶，因此您對該帳戶進行的任何自訂都會帶到新的映像。預設值為 True。

  **CopyProfile** 會以現有的本機管理員描述檔取代預設描述檔。執行 Windows Sysprep 之後登入的所有帳戶，將於第一次登入時收到該描述檔的複本及其內容。

  如果您沒有特定的使用者描述檔自訂要帶到新映像，請將此設定變更為 False。Windows Sysprep 將移除所有使用者描述檔；這樣可節省時間和磁碟空間。
+ **TimeZone**：時區會預設為國際標準時間 (UTC)。
+ **順序為 1 的同步命令**：系統會執行下列命令，以啟用管理員帳戶並指定密碼要求。

  **net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES**
+ **順序為 2 的同步命令**：系統會將管理員密碼變碼。此安全措施的用途在於您未啟用 ec2setpassword 設定時，可防止在 Windows Sysprep 完成之後存取執行個體。

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1ScramblePassword.exe" -u Administrator
+ **順序為 3 的同步命令**：系統會執行下列命令：

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1SysprepSpecializePhase.cmd

   此命令會新增下列登錄機碼，以重新啟用 RDP：

  reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 0 /f

### OOBE 階段
<a name="sysprep-oobe"></a>

1. 使用 EC2Config 服務回應檔案，系統可以指定下列組態：
   + <InputLocale>en-US</InputLocale>
   + <SystemLocale>en-US</SystemLocale>
   + <UILanguage>en-US</UILanguage>
   + <UserLocale>en-US</UserLocale>
   + <HideEULAPage>true</HideEULAPage>
   + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
   + <NetworkLocation>Other</NetworkLocation>
   + <ProtectYourPC>3</ProtectYourPC>
   + <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
   + <TimeZone>UTC</TimeZone>
   + <RegisteredOrganization>Amazon.com</RegisteredOrganization>
   + <RegisteredOwner>Amazon</RegisteredOwner>
**注意**  
在一般化和特製化階段期間，EC2Config 服務會監控 OS 狀態。如果 EC2Config 偵測到 OS 處於 Sysprep 階段，即會將下列訊息發佈至系統日誌：  
EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. OOBE 階段完成後，系統會從下列位置執行 `SetupComplete.cmd`：`C:\Windows\Setup\Scripts\SetupComplete.cmd`。在 2015 年 4 月之前的 Amazon 公有 AMI 中，此檔案為空白，而且不會對映像執行任何操作。在 2015 年 4 月之後的公有 AMI 中，此檔案包含以下數值：**call "C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1PostSysprep.cmd"**。

1. 系統會執行 `PostSysprep.cmd`，執行下列操作：
   + 將本機管理員密碼設定為不過期。如果密碼過期，管理員可能會無法登入。
   + 設定 MSSQLServer 機器名稱 (如果已安裝)，讓名稱與 AMI 同步。

## Sysprep 後續階段
<a name="sysprep-post"></a>

Windows Sysprep 完成之後，EC2Config 服務會將下列訊息傳送至主控台輸出：

```
Windows sysprep configuration complete.
			Message: Sysprep Start
			Message: Sysprep End
```

EC2Config 接著會執行下列動作：

1. 讀取 config.xml 檔案的內容，並列出所有已啟用的外掛程式。

1. 同時執行所有「Windows 就緒之前」(“Before Windows is ready”) 外掛程式。
   + Ec2SetPassword
   + Ec2SetComputerName
   + Ec2InitializeDrives
   + Ec2EventLog
   + Ec2ConfigureRDP
   + Ec2OutputRDPCert
   + Ec2SetDriveLetter
   + Ec2WindowsActivate
   + Ec2DynamicBootVolumeSize

1. 完成之後，會將「Windows 就緒」(“Windows is ready”) 訊息傳送至執行個體系統日誌。

1. 同時執行所有「Windows 就緒之後」(“After Windows is ready”) 外掛程式。
   + Amazon CloudWatch Logs 
   + UserData
   + AWS Systems Manager (Systems Manager) 

如需 Windows 外掛程式的詳細資訊，請參閱[在 EC2 舊版 Windows 作業系統執行個體啟動期間，使用 EC2Config 服務執行任務](ec2config-service.md)。

## 搭配 EC2Config 服務執行 Windows Sysprep
<a name="sysprep-gui-procedure"></a>

使用下列程序，使用 Windows Sysprep 和 EC2Config 服務來建立標準化 AMI。

1. 在 Amazon EC2 主控台中，找出或[建立](creating-an-ami-ebs.md)您要複製的 AMI。

1. 啟動和連線至 Windows 執行個體。

1. 自訂執行個體。

1. 在 EC2Config 服務回應檔案中指定組態設定：

   `C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml`

1. 從 Windows **開始**選單中，選擇**所有程式**，然後選擇 **EC2ConfigService Settings (EC2ConfigService 設定)**。

1. 選擇 **Ec2 Service Properties (Ec2 服務屬性)** 對話方塊中的 **Image (映像)** 標籤。如需 Ec2 Service Properties (Ec2 服務屬性) 對話方塊中之選項和設定的詳細資訊，請參閱 [Ec2 服務屬性](ec2config-service.md)。

1. 選取管理員密碼的選項，然後選取 **Shutdown with Sysprep (使用 Sysprep 關機)** 或 **Shutdown without Sysprep (不使用 Sysprep 關機)**。EC2Config 會根據您選取的密碼選項來編輯設定檔案。
   + **Random (隨機)**：EC2Config 會產生密碼，並以使用者金鑰加密，然後將已加密的密碼輸出到主控台。我們會在第一次啟動後停用此設定，以便執行個體重新開機或是停止後再啟動時，能持續使用這個密碼。
   + **指定**：密碼會以未加密形式 (純文字) 存放於 Windows Sysprep 回應檔案。Windows Sysprep 接著執行時，會設定管理員密碼。如果您立即關機，即會立即設定密碼。在服務重新啟動時，會移除管理員密碼。請務必記住此密碼，之後即無法再擷取此密碼。
   + **保留現有項目**：執行 Windows Sysprep 或重新啟動 EC2Config 時，管理員帳戶的現有密碼不會變更。請務必記住此密碼，之後即無法再擷取此密碼。

1. 選擇 **OK** (確定)。

系統會要求您確認要執行 Windows Sysprep 並將執行個體關機，請按一下**是**。您會注意到 EC2Config 執行 Windows Sysprep。接著，系統會將您登出執行個體，然後執行個體會關機。如果您查看 Amazon EC2 主控台的 **Instances (執行個體)** 頁面，執行個體狀態會從 `Running` 變更為 `Stopping`，最後再變更為 `Stopped`。這時便能放心地從此執行個體建立 AMI。

您可以從命令列使用下列命令手動調用 Windows Sysprep 工具：

```
"%programfiles%\amazon\ec2configservice\"ec2config.exe -sysprep"" 
```

**注意**  
如果 CMD shell 已在 C:\$1Program Files\$1Amazon\$1EC2ConfigService\$1 目錄中，則不需要命令中的雙引號標記。

不過，您必須審慎確認 `Ec2ConfigService\Settings` 資料夾中指定的 XML 檔案選項正確；否則，您可能無法連線至該執行個體。如需設定檔案的詳細資訊，請參閱 [EC2Config 設定檔](ec2config-service.md#UsingConfigXML_WinAMI)。如需從命令列設定 Windows Sysprep 並執行的範例，請參閱 `Ec2ConfigService\Scripts\InstallUpdates.ps1`。

# 複製 Amazon EC2 AMI
<a name="CopyingAMIs"></a>

若需要跨多個區域採用一致的 Amazon EC2 執行個體組態，您可將單一 Amazon Machine Image (AMI) 用做範本來啟動所有執行個體。不過，AMIs是區域特定的資源，若要在特定 中啟動執行個體 AWS 區域，AMI 必須位於該區域。因此，如需在多個區域採用同一個 AMI，必須從來源區域複製該 AMI 到每個目標區域。

您用於複製 AMI 的方法，視乎您是要跨*同一[分區](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#partition)內的*區域，還是*跨不同分區*進行複製而定：
+ **跨區域複製** – 跨*同一分區內的*區域複製 AMI，舉例來說，跨商業分區內的區域。本主題介紹了此複製方法。
+ **跨分割區複製** – 將 AMIs *從一個分割區複製到另一個分割區*，例如從商業分割區複製到 AWS GovCloud (US) 分割區。若要了解此方法的相關詳細資訊，請參閱 [存放和還原 AMI允許 AMI](ami-store-restore.md)。
+ **跨帳戶複製** – 建立另一個 AWS 帳戶 [與您的 共用 AWS 帳戶](sharingamis-explicit.md)的 AMI 複本。本主題介紹了此複製方法。

跨區域與跨帳戶 AMI 複製的複製操作完成所花時間為盡力而為。若需要控制完成時間，您可指定從 15 分鐘至 48 小時的完成時段，並確保在所需時間範圍內複製 AMI。基於時間的 AMI 複製操作適用額外費用。若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*中的[基於時間的複製](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)。

**Topics**
+ [考量事項](#copy-ami-considerations)
+ [成本](#copy-ami-costs)
+ [授予 Amazon EC2 AMI 複製許可](copy-ami-permissions.md)
+ [複製 AMI](#ami-copy-steps)
+ [停用待定的 AMI 複製作業](#ami-copy-stop)
+ [Amazon EC2 AMI 複製的運作方式](how-ami-copy-works.md)

## 考量事項
<a name="copy-ami-considerations"></a>
+ **複製 AMI 的許可** - 您可以使用 IAM 政策來授予或拒絕使用者複製 AMI 的許可。自 2024 年 10 月 28 日起，您可在來源 AMI 指定 `CopyImage` 動作的資源層級許可。新 AMI 的資源層級許可與以前一樣可用。
+ **啟動許可和 Amazon S3 儲存貯體許可** – AWS 不會將啟動許可或 Amazon S3 儲存貯體許可從來源 AMI 複製到新的 AMI。複製操作完成後，您可將啟動許可和 Amazon S3 儲存貯體許可套用至新的 AMI。
+ **標籤** - 您只能複製連接至來源 AMI 的使用者定義之 AMI 標籤。將不會複製連接至其他 AWS 帳戶 的系統標籤 (字首為 `aws:`) 和使用者定義的標籤。當複製 AMI 時，您可以連接新標籤至新 AMI 及其備份快照。
+ **基於時間的 AMI 複製配額** – 在達到*累積快照複製輸送量配額*之後，後續基於時間的 AMI 複製請求會失敗。若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*中的[基於時間的複製配額](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html#time-based-copies-quota)。
+ **受支援的來源目的地複製** – 來源 AMI 的位置會決定您是否可以複製，及新的 AMI 允許的目的地：
  + 若來源 AMI 位於一個區域，您可在該區域內對其進行複製、複製到另一個區域、複製到與該區域關聯的 Outpost，或者複製到該區域中的本機區域。
  + 如果來源 AMI 位於本機區域，您可以在該本機區域內進行複製、將其複製到該本機區域的父區域，或複製到具有相同父區域的某些其他本機區域。
  + 若來源 AMI 位於 Outpost，則您無法將其複製。
+ **來源和目的地的 CLI 參數** – 若使用 CLI，會支援以下參數，以便指定待複製 AMI 的來源位置及新 AMI 的目的地。請注意，複製操作必須在目的地區域中啟動；如果您省略 `--region` 參數，則目的地會假設 AWS CLI 設定中設定的預設區域。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/CopyingAMIs.html)

## 成本
<a name="copy-ami-costs"></a>

若未指定完成時間，複製 AMI 無須費用。然而，額外費用適用於基於時間的 AMI 複製操作。若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*中的[基於時間的複製](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html#time-based-copies-pricing)。

標準儲存與資料傳輸費用適用。如果您複製 EBS 後端 AMI，任何其他 EBS 快照的儲存則都會產生費用。

# 授予 Amazon EC2 AMI 複製許可
<a name="copy-ami-permissions"></a>

若要複製 EBS 支援的 AMI 或 Amazon S3 支援的 AMI，您需要下列 IAM 許可：
+ `ec2:CopyImage` - 複製 AMI。對於 EBS 支援的 AMI，其還針對 AMI 備份快照授予複製許可。
+ `ec2:CreateTags` - 標記目標 AMI。對於 EBS 支援的 AMI，其還針對目標 AMI 備份快照授予標記許可。

如果您要複製執行個體儲存體支援的 AMI，則需要下列*額外* IAM 許可：
+ `s3:CreateBucket` - 在新 AMI 的目標區域建立 S3 儲存貯體
+ `s3:PutBucketOwnershipControls` – 為新建立的 S3 儲存貯體啟用 ACLs，以便使用`aws-exec-read`[標準 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) 寫入物件
+ `s3:GetBucketAcl` – 讀取來源儲存貯體ACLs 
+ `s3:ListAllMyBuckets` - 為目標區域的 AMI 尋找現有 S3 儲存貯體
+ `s3:GetObject` - 讀取來源儲存貯體物件
+ `s3:PutObject` - 將物件寫入目標儲存貯體
+ `s3:PutObjectAcl` - 將新物件的許可寫入目標儲存貯體

**注意**  
自 2024 年 10 月 28 日起，您可在來源 AMI 指定 `CopyImage` 動作的資源層級許可。目標 AMI 的資源層級許可與以前一樣可用。如需詳細資訊，請參閱「服務授權參考」**中 [Amazon EC2 定義的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)下表中的 **CopyImage**。

## 範例 IAM 政策，用於複製 EBS 支援的 AMI 並標記目標 AMI 和快照
<a name="permissions-to-copy-ebs-backed-ami"></a>

以下範例政策授予您許可，以複製任何 EBS 支援的 AMI 並標記目標 AMI 及其備份快照。

**注意**  
自 2024 年 10 月 28 日起，您可在 `Resource` 元素中指定快照。如需詳細資訊，請參閱「服務授權參考」**中 [Amazon EC2 定義的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)下表中的 **CopyImage**。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "PermissionToCopyAllImages",
        "Effect": "Allow",
        "Action": [
            "ec2:CopyImage",
            "ec2:CreateTags"
        ],
        "Resource": [
            "arn:aws:ec2:*::image/*",
            "arn:aws:ec2:*::snapshot/*"
        ]
    }]
}
```

------

## 範例 IAM 政策，用於複製 EBS 支援的 AMI，但禁止標記新快照
<a name="permissions-to-copy-ebs-backed-ami-but-deny-tagging-new-snapshots"></a>

當您獲得 `ec2:CopySnapshot` 許可時，系統會自動授予 `ec2:CopyImage` 許可。可明確拒絕授予標記新備份快照的許可，以覆蓋 `ec2:CreateTags` 動作的 `Allow` 效果。

以下範例政策授予您許可，以複製任何 EBS 支援的 AMI，但禁止您標記目標 AMI 的新備份快照。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "ec2:CopyImage",
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:::snapshot/*"
        }
    ]
}
```

------

## 範例 IAM 政策，用於複製 Amazon S3 支援的 AMI 並標記目標 AMI
<a name="permissions-to-copy-instance-store-backed-ami"></a>

以下範例政策授予您許可，可將指定來源儲存貯體的任何 Amazon S3 支援的 AMI 複製到指定區域，並標記目標 AMI。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "PermissionToCopyAllImages",
            "Effect": "Allow",
            "Action": [
                "ec2:CopyImage",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*::image/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:GetBucketAcl",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amis-for-111122223333-in-us-east-2-hash"
            ]
        }
    ]
}
```

------

若要尋找 AMI 來源儲存貯體的 Amazon Resource Name (ARN)，請透過 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，在導覽窗格中選擇 **AMI**，然後在**來源**欄中找到該儲存貯體名稱。

**注意**  
只有在您第一次將 Amazon S3 支援的 AMI 複製到個別區域時，才需要 `s3:CreateBucket` 許可。之後，已在區域中建立的 Amazon S3 儲存貯體用來儲存您複製到該區域的所有未來 AMIs。

## 複製 AMI
<a name="ami-copy-steps"></a>

您可複製您擁有的 AMI，或者由另一個帳戶共享給您的 AMI。若要了解受支援的來源與目的地組合，請參閱 [考量事項](#copy-ami-considerations)。

------
#### [ Console ]

**複製 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 從主控台導覽列選取內含該 AMI 的區域。

1. 在導覽窗格中選擇 **AMI**，以顯示您區域可用的 AMI 清單。

1. 如果您未看到要複製的 AMI，請選擇其他篩選條件。您可按以下方式篩選 AMI：**由我擁有**、**私有映像**、**公有映像**與**已停用映像**。

1. 選取欲複製的 AMI，然後選擇**動作**、**複製 AMI**。

1. 在**複製 Amazon Machine Image (AMI)** 頁面，指定以下資訊：

   1. **AMI copy name** (AMI 複本名稱)：新 AMI 的名稱。名稱中可納入作業系統資訊，因為 Amazon EC2 在顯示有關 AMI 的詳細資訊時不提供此資訊。

   1. **AMI copy description** (AMI 複本描述)：根據預設，描述包括來源 AMI 的資訊，讓您能夠辨識原始和複本內容。您可視需要變更此描述。

   1. **Destination region** (目的地區域)：AMI 複製到的區域。如需詳細資訊，請參閱[跨區域複製](how-ami-copy-works.md#copy-amis-across-regions)及[跨帳戶複製](how-ami-copy-works.md#copy-ami-across-accounts)。

   1. **複製標籤**：選取此核取方塊可在複製 AMI 時包含使用者定義的 AMI 標籤。將不會複製連接至其他 AWS 帳戶 的系統標籤 (字首為 `aws:`) 和使用者定義的標籤。

   1. **基於時間的複製**：您可如下所示指定複製操作是在特定時間範圍內完成，還是盡力完成：
      + 如需在特定時間範圍內完成複製：
        + 選取**啟用基於時間的複製**。
        + 對於**完成持續時間**，請輸入複製操作允許的分鐘數 (增量為 15 分鐘)。完成持續時間適用於與 AMI 關聯的全部快照。

          若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*中的[基於時間的複製](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)。
      + 盡力完成複製：
        + 將**啟用基於時間的複製**保持不選。

   1. (EBS 支援的 AMI) **加密 AMI 複本的 EBS 快照**：選取此核取方塊來加密目標快照或使用不同金鑰重新加密它們。如果您已啟用預設加密，**加密 AMI 複本的 EBS 快照**核取方塊已選取且無法清除。如需詳細資訊，請參閱[加密和複製](how-ami-copy-works.md#ami-copy-encryption)。

   1. (EBS 支援的 AMI) **KMS 金鑰**：用於加密目標快照的 KMS 金鑰。

   1. **標籤**：您可以使用相同標籤來標記新 AMI 和新快照，或者可以使用不同標籤來進行標記。
      + 若要使用*相同*標籤來標記新 AMI 和新快照，請選擇**共同標記映像和快照**。相同標籤即套用至新 AMI 和每個建立的快照。
      + 若要使用*不同*標籤來標記新 AMI 和新快照，請選擇**個別標記映像和快照**。不同標籤即套用至新 AMI 和建立的快照。但是，請注意，建立的所有新快照都會取得相同標籤；您無法使用不同的標籤標記每個新快照。

      若要新增標籤，請選擇 **Add tag (新增標籤)**，然後輸入標籤的鍵和值。針對每個標籤，重複執行上述動作。

   1. 當您準備好建立 AMI 時，請選擇**複製 AMI**。

      新 AMI 的初始狀態為 `Pending`。當狀態為 `Available` 時，表示 AMI 複製作業完成。

------
#### [ AWS CLI ]

**如需將 AMI 從一個區域複製到另一個區域**  
使用 [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 指令。您必須同時指定來源和目的地區域。請使用 `--source-region` 參數指定來源區域。您可使用 `--region` 參數來指定目的地區域 (或省略此參數，假設為您的 AWS CLI 設定中設定的預設區域)。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region us-west-2 \
    --name my-ami \
    --region us-east-1
```

在 AMI 複製期間加密目標快照時，務必指定其他這些參數：`--encrypted` 和 `--kms-key-id`。

**如需從一個區域複製 AMI 到本機區域**  
使用 [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 指令。您必須同時指定來源與目的地。請使用 `--source-region` 參數指定來源區域。您可使用 `--destination-availability-zone` 參數來指定目的地本機區域 (您可改為使用 `--destination-availability-zone-id`)。請注意，您僅可從一個區域複製 AMI 到同一區域內的本機區域。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --destination-availability-zone cn-north-1-pkx-1a \
    --name my-ami \
    --region cn-north-1
```

**如需從本機區域複製 AMI 到一個區域**  
使用 [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 指令。您必須同時指定來源與目的地。請使用 `--source-region` 參數指定來源區域。您可使用 `--region` 參數來指定目的地區域 (或者省略此參數，假設為您的 AWS CLI 設定中設定的預設區域)。來源本機區域係由指定之來源 AMI ID 的位置推定。請注意，您僅可從本機區域複製 AMI 到其父區域。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --name my-ami \
    --region cn-north-1
```

**如需從一個本機區域複製 AMI 到另一個本機區域**  
使用 [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 指令。您必須同時指定來源與目的地。請使用 `--source-region` 參數來指定本機區域的來源區域。您可使用 `--destination-availability-zone` 參數來指定目的地本機區域 (您可改為使用 `--destination-availability-zone-id`)。來源本機區域係由指定之來源 AMI ID 的位置推定。您可以使用 `--region` 參數指定目的地 Local Zone 的父區域 （或省略此參數，以假設 AWS CLI 設定中設定的預設區域）。

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --destination-availability-zone cn-north-1-pkx-1a \
    --name my-ami \
    --region cn-north-1
```

------
#### [ PowerShell ]

**如需將 AMI 從一個區域複製到另一個區域**  
使用 [Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet。您必須同時指定來源和目的地區域。請使用 `-SourceRegion` 參數指定來源區域。您可使用 `-Region` 參數或者 [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) cmdlet，來指定目的地區域。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion us-west-2 `
    -Name my-ami `
    -Region us-east-1
```

在 AMI 複製期間加密目標快照時，務必指定其他這些參數：`-Encrypted` 和 `-KmsKeyId`。

**如需從一個區域複製 AMI 到本機區域**  
使用 [Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet。您必須同時指定來源與目的地。請使用 `-SourceRegion` 參數指定來源區域。您可使用 `-DestinationAvailabilityZone` 參數來指定目的地本機區域 (您可改為使用 `-DestinationAvailabilityZoneId`)。請注意，您僅可從一個區域複製 AMI 到同一區域內的本機區域。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -DestinationAvailabilityZone cn-north-1-pkx-1a `
    -Name my-ami `
    -Region cn-north-1
```

**如需從本機區域複製 AMI 到一個區域**  
使用 [Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet。您必須同時指定來源與目的地。請使用 `-SourceRegion` 參數指定來源區域。您可使用 `-Region` 參數或者 [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) cmdlet，來指定目的地區域。來源本機區域係由指定之來源 AMI ID 的位置推定。請注意，您僅可從本機區域複製 AMI 到其父區域。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -Name my-ami `
    -Region cn-north-1
```

**如需從一個本機區域複製 AMI 到另一個本機區域**  
使用 [Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet。您必須同時指定來源與目的地。請使用 `-SourceRegion` 參數來指定本機區域的來源區域。您可使用 `-DestinationAvailabilityZone` 參數來指定目的地本機區域 (您可改為使用 `-DestinationAvailabilityZoneId`)。來源本機區域係由指定之來源 AMI ID 的位置推定。您可使用 `-Region` 參數或者 [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) cmdlet，來指定目的地本機區域的父區域。

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -DestinationAvailabilityZone cn-north-1-pkx-1a `
    -Name my-ami `
    -Region cn-north-1
```

------

## 停用待定的 AMI 複製作業
<a name="ami-copy-stop"></a>

您可使用下列程序來停止待定的 AMI 複製。

------
#### [ Console ]

**如需停止 AMI 複製操作**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 從導覽列中的區域選取器，選取目的地區域。

1. 在導覽窗格中，選擇 **AMIs** (AMI)。

1. 選取要停止複製的 AMI，然後選擇**動作**、**取消註冊 AMI**。

1. 要求確認時，請選擇 **Deregister AMI** (取消註冊 AMI)。

------
#### [ AWS CLI ]

**如需停止 AMI 複製操作**  
請使用 [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) 命令。

```
aws ec2 deregister-image --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**如需停止 AMI 複製操作**  
使用 [Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) cmdlet。

```
Unregister-EC2Image -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI 複製的運作方式
<a name="how-ami-copy-works"></a>

複製來源 AMI 會產生相同但獨立的新 AMI，我們也稱之為*目標* AMI。目標 AMI 有其唯一 AMI ID。您可變更來源 AMI 或取消註冊，不會影響目標 AMI。反之亦然。

藉由 EBS 支援的 AMI，每個備份快照會複製成相同但完全獨立的目標快照。如果您複製 AMI 到新區域，則快照為完整 (非增量) 複本。如果您加密未加密的備份快照，或將其加密為新的 KMS 金鑰，則快照為完整 (非增量) 複本。AMI 的後續複製作業會產生備份快照的增量複本。

**Topics**
+ [跨區域複製](#copy-amis-across-regions)
+ [跨帳戶複製](#copy-ami-across-accounts)
+ [基於時間的 AMI 複製操作](#ami-time-based)
+ [加密和複製](#ami-copy-encryption)

## 跨區域複製
<a name="copy-amis-across-regions"></a>

跨越地理區域複製 AMI，具有下列優點：
+ 一致的全球部署：將 AMI 從一個區域複製到另一個區域，可讓您以相同 AMI 在不同區域啟動一致的執行個體。
+ 擴展能力：無論使用者的位置，設計並建置滿足全球使用者需求的應用程式將變得更輕鬆。
+ 效能：您可分散應用程式，並將應用程式的重要元件放置於靠近使用者的位置，藉此增加效能。您亦可運用區域特定的功能，例如執行個體類型或其他 AWS 服務。
+ 高可用性：您可跨 AWS 區域設計並部署應用程式，增加可用性。

下圖顯示來源 AMI 和兩個位於不同區域之複製 AMI 之間的關係，以及從每個 AMI 啟動的 EC2 執行個體。從 AMI 啟動執行個體時，其所處位置與該 AMI 的區域相同。若您變更來源 AMI 並希望在目標區域的 AMIs 反映這些變更，您必須將來源 AMI 重新複製到目標區域。

![\[複製到不同區域的 AMI\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami_copy.png)


首次將 Amazon S3 支援的 AMI 複製到某個區域時，我們會為複製到該區域的 Amazon S3 建立 AMIs 儲存貯體。所有複製到該區域的 Amazon S3 支援的 AMI，都會存放於此儲存貯體。儲存貯體名稱為下列格式：amis-for-*account*-in-*region*-*hash*。例如：`amis-for-123456789012-in-us-east-2-yhjmxvp6`。

**先決條件**  
複製 AMI 前，您必須確認來源 AMI 的內容已更新為可支援在不同區域運作。例如，您應更新資料庫連線字串或類似的應用程式組態資料，以指向適當的資源。否則，目的地區域內新 AMI 所啟動的執行個體，仍可能會使用來源區域的資源，影響效能和成本。

**限制**
+ 目的地區域限制為 300 個並行 AMI 複製操作。這亦適用於基於時間的 AMI 複製操作。
+ 您無法將全虛擬化 (PV) AMI 複製到不支援 PV AMI 的區域。如需詳細資訊，請參閱[虛擬化類型](ComponentsAMIs.md#virtualization_types)。

## 跨帳戶複製
<a name="copy-ami-across-accounts"></a>

如果來自另一個 的 AMI AWS 帳戶 [與您的 共用 AWS 帳戶](sharingamis-explicit.md)，您可以複製共用的 AMI。這稱為跨帳戶複製。與您共用的 AMI 是來源 AMI。當您複製來源 AMI 時，您將建立新 AMI。新 AMI 通常稱為目標 AMI。

**AMI 費用**
+ 對於共用 AMI，會向共用 AMI 的帳戶收取該區域的儲存費用。
+ 若您複製與您的帳戶共享的 AMI，則您是您帳戶內目標 AMI 的擁有者。
  + 來源 AMI 的擁有者需支付標準 Amazon EBS 或 Amazon S3 傳輸費用。
  + 我們會向您收取目的地區域的目標 AMI 儲存費用。

**資源許可**  
若要從另一個帳戶複製已與您共享的 AMI，來源 AMI 的擁有者必須授予您支援 AMI 的儲存體的讀取許可，而非 AMI 本身。該儲存體為相關聯的 EBS 快照 (Amazon EBS 支援的 AMI) 或相關聯的 S3 儲存貯體 (Amazon S3 支援的 AMI)。如果共用 AMI 具有加密的快照，則擁有者必須與您共用金鑰。如需有關授予資源許可的詳細資訊，對於 EBS 快照，請參閱 *Amazon EBS 使用者指南*中的[與其他 AWS 帳戶共享 Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)，對於 S3 儲存貯體，請參閱 *Amazon S3 使用者指南*中的 [Amazon S3 的身分與存取管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html)。

**注意**  
連接到來源 AMI 的標籤不會跨帳戶複製到目標 AMI。

## 基於時間的 AMI 複製操作
<a name="ami-time-based"></a>

若針對包含單一關聯快照的 EBS 支援的 AMI 來起始基於時間的 AMI 複製操作，則其行為方式與**個別基於時間的快照複製操作**相同，且相同的輸送量限制適用。

若針對包含多個關聯快照的 EBS 支援的 AMI 來起始基於時間的 AMI 複製操作，則其行為方式與**並行的基於時間的快照複製操作**相同，且相同的輸送量限制適用。每個關聯快照皆會產生單獨的快照複製請求，每個請求都會計入您的累積快照複製輸送量配額。您指定的完成持續時間會套用於每個關聯快照。

若要了解詳細資訊，請參閱 *Amazon EBS 使用者指南*中的[基於時間的複製](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)。

## 加密和複製
<a name="ami-copy-encryption"></a>

下表說明各種 AMI 複製案例支援的加密。雖然您可將未加密快照複製為加密快照，但是無法將加密快照複製為未加密快照。


| 案例 | 描述 | 支援 | 
| --- | --- | --- | 
| 1 | 未加密到未加密 | 是 | 
| 2 | 加密到加密 | 是 | 
| 3 | 未加密到加密 | 是 | 
| 4 | 加密到未加密 | 否 | 

**注意**  
在 `CopyImage` 動作期間的加密僅適用於 Amazon EBS 後端 AMIs。因為 Amazon S3 支援的 AMI 不使用快照，所以您無法透過複製來變更其加密狀態。

當您在不指定加密參數的情況下複製 AMI 時，預設會以其原始加密狀態複製後備快照。因此，如果來源 AMI 由未加密的快照支援，則產生的目標快照也將未加密。同樣地，如果來源 AMI 的快照已加密，則產生的目標快照也會由相同的 AWS KMS 金鑰加密。對於由多個快照支援的 AMI，每個目標快照都會保留其對應來源快照的加密狀態。

若要在 AMI 複製期間變更目標備份快照的加密狀態，您可指定加密參數。下列範例顯示非預設情況，其中指定了加密參數並執行 `CopyImage` 動作以變更目標 AMI 的加密狀態。

**將未加密來源 AMI 複製到加密目標 AMI**

在此案例中，未加密根快照所支援的 AMI 將複製到具有加密根快照的 AMI。透過兩個加密參數叫用 `CopyImage` 動作，包括客戶受管金鑰。因此，根快照的加密狀態會變更，目標 AMI 會受到包含與來源快照相同資料的根快照支援，但使用指定的金鑰進行加密。您需要為兩個 AMI 中的快照支付儲存成本，以及從任一 AMI 啟動的任何執行個體的費用。

**注意**  
啟用預設加密，這與在 AMI 中針對所有快照將 `Encrypted` 參數設定為 `true` 具有相同效果。

![\[快速複製 AMI 並加密快照\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-to-ami-convert.png)


設定 `Encrypted` 參數會加密此執行個體的單一快照。若您未指定 `KmsKeyId` 參數，則會使用預設的客戶受管金鑰來加密快照複本。

如需複製具有加密快照的 AMIs 的詳細資訊，請參閱[對 EBS 後端 AMI 使用加密](AMIEncryption.md)。

# 使用 S3 存放和還原 AMI
<a name="ami-store-restore"></a>

您可以將 Amazon Machine Image (AMI) 存放在 Amazon S3 儲存貯體中，將 AMI 複製到另一個 S3 儲存貯體，然後從 S3 儲存貯體中還原。透過使用 S3 儲存貯體存放和還原 AMI，您可以將 AMIs 從一個 AWS 分割區複製到另一個分割區，例如從主要商業分割區複製到 AWS GovCloud (US) 分割區。您也可以透過將其存放在 S3 儲存貯體中，來建立 AMI 的封存複本。

支援使用 S3 存放和還原 AMI 的 API 包括 `CreateStoreImageTask`、`DescribeStoreImageTasks` 和 `CreateRestoreImageTask`。

`CopyImage` 是建議用於複製 AWS 分割區*內* AMIs API。但是，`CopyImage` 無法將 AMI 複製到*另一個*分割區。

如需 AWS 分割區的相關資訊，請參閱《*IAM 使用者指南*》中的 [Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 頁面上的*分割區*。

**警告**  
在 AWS 分割區或 AWS 區域之間移動資料時，請務必遵循所有適用的法律和業務需求，包括但不限於任何適用的政府法規和資料駐留要求。

**Topics**
+ [使用案例](#use-cases)
+ [限制](#ami-store-restore-limitations)
+ [成本](#store-restore-costs)
+ [AMI 存放和還原如何運作](store-restore-how-it-works.md)
+ [建立存放映像任務](work-with-ami-store-restore.md)

## 使用案例
<a name="use-cases"></a>

**Topics**
+ [在 AWS 分割區之間複製 AMI](#copy-to-partition)
+ [製作 AMI 的封存複本](#archival-copies)

### 在 AWS 分割區之間複製 AMI
<a name="copy-to-partition"></a>

透過使用 S3 儲存貯體存放和還原 AMI，您可以將 AMI 從一個 AWS 分割區複製到另一個分割區，或從一個 AWS 區域複製到另一個區域。在下列範例中，您將 AMI 從主要商業分割區複製到 AWS GovCloud (US) 分割區，特別是從 `us-east-2`區域複製到 `us-gov-east-1`區域。

如果要將 AMI 從一個分割區複製到另一個分割區，請依照下列步驟執行：
+ 透過使用 `CreateStoreImageTask` 將 AMI 存放在當前區域的 S3 儲存貯體中。在此範例中，S3 儲存貯體位於 `us-east-2`。
+ 使用 `DescribeStoreImageTasks` 監控存放任務的進度。當任務完成時，該物件在 S3 儲存貯體中變得可見。
+ 使用您選擇的程序，將存放的 AMI 物件複製到目標分割區中的 S3 儲存貯體。在此範例中，S3 儲存貯體位於 `us-gov-east-1`。
**注意**  
由於每個分割區都需要不同的 AWS 登入資料，因此您無法將 S3 物件直接從一個分割區複製到另一個分割區。跨分割區複製 S3 物件的程序超出本文件的範圍。我們提供下列複製程序作為範例，但您必須使用符合安全性需求的複製程序。  
若要跨分割區複製一個 AMI，複製程序非常簡單明瞭，具體如下：從來源儲存貯體[下載物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)至中繼主機 (例如 EC2 執行個體或筆記型電腦)，然後從中繼主機[上傳物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)至目標儲存貯體。對於程序的每個階段，請使用分割區的 AWS 登入資料。
為了更能夠持續使用，請考慮開發一個能管理複製的應用程式，最好可使用 S3 [分段下載和上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)。
+ 使用 `CreateRestoreImageTask` 從目標分割區中的 S3 儲存貯體還原 AMI。在此範例中，S3 儲存貯體位於 `us-gov-east-1`。
+ 透過描述 AMI 來監控還原任務的進度，以查看其狀態何時變為可用。您也可以透過描述快照來監控組成還原 AMI 的快照進度百分比。

### 製作 AMI 的封存複本
<a name="archival-copies"></a>

您可以透過將其存放在 S3 儲存貯體中，來建立 AMI 的封存複本。AMI 被打包為 S3 中的單一物件，並且所有 AMI 中繼資料 (不包括共享資訊) 作為存放之 AMI 的一部分保留。AMI 資料被壓縮為儲存程序的一部分。包含可輕鬆壓縮之資料的 AMI 會在 S3 中產生較小的物件。為了降低成本，您可以使用較低成本的 S3 儲存層。如需詳細資訊，請參閱 [Amazon S3 儲存類別](https://aws.amazon.com/s3/storage-classes/)和 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)

## 限制
<a name="ami-store-restore-limitations"></a>
+ 若要存放 AMI，您的 AWS 帳戶 必須擁有 AMI 及其快照，或者 AMI 及其快照必須[直接與您的帳戶共用](sharingamis-explicit.md)。如果 AMI 僅[公開共用](sharingamis-intro.md)，則無法儲存 AMI。
+ 使用這些 API 僅能存放 EBS 後端 AMI。
+ 不支援半虛擬 (PV) AMI。
+ 可存放的 AMI (壓縮之前) 大小限制為 5,000 GB。
+ 儲存映像請求配額：正在進行 1，200 GB 的儲存工作 （快照資料）。
+ 還原映像請求的配額：進行中 600 GB 的還原工作 （快照資料）。
+ 在存放任務期間，不得刪除快照，且執行存放的 IAM 主體必須具有快照的存取權，否則存放程序將會失敗。
+ 您無法在同一個 S3 儲存貯體中建立 AMI 的多個複本。
+ 存放在 S3 儲存貯體中的 AMI 無法使用其原始 AMI ID 還原。您可以透過使用 [AMI 別名](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)來減輕這種情況。
+ 目前，只有使用 AWS 、 AWS Command Line Interface SDKs APIs 和 Amazon EC2 API 才能支援存放區和還原 API。您無法使用 Amazon EC2 主控台存放和還原 AMI。

## 成本
<a name="store-restore-costs"></a>

當您使用 S3 存放和還原 AMI 時，需支付存放和還原 API 所使用之服務的費用，以及資料傳輸的費用。這些 API 使用 S3 和 EBS 直接 API (由這些 API 內部使用以存取快照資料)。如需詳細資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)和 [Amazon EBS 定價](https://aws.amazon.com/ebs/pricing/)。

# AMI 存放和還原如何運作
<a name="store-restore-how-it-works"></a>

要使用 S3 存放和還原 AMI，請使用以下 API：
+ `CreateStoreImageTask` – 將 AMI 存放在 S3 儲存貯體中
+ `DescribeStoreImageTasks` – 提供 AMI 存放任務的進度
+ `CreateRestoreImageTask` – 從 S3 儲存貯體還原 AMI

**Topics**
+ [CreateStoreImageTask](#CreateStoreImageTask)
+ [DescribeStoreImageTasks](#DescribeStoreImageTasks)
+ [CreateRestoreImageTask](#CreateRestoreImageTask)
+ [檔案路徑](#file-paths-in-s3)

## CreateStoreImageTask
<a name="CreateStoreImageTask"></a>

`CreateStoreImageTask` API 將 AMI 做為單一物件存放在 S3 儲存貯體。

API 建立一個從 AMI 及其快照中讀取所有資料的任務，然後使用 [S3 分段上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)將資料存放在 S3 物件中。API 採用 AMI 的所有元件，包括大多數非特定區域的 AMI 中繼資料以及 AMI 中包含的所有 EBS 快照，並將其打包為 S3 中的單一物件。資料會在上傳過程中進行壓縮，以減少 S3 中使用的空間量，因此 S3 中的物件可能會小於 AMI 中快照大小的總和。

如果呼叫此 API 的帳戶可見 AMI 和快照標籤，則會將其保留。

S3 中的物件與 AMI 具有相同的 ID，但有 `.bin` 副檔名。下列資料也會作為 S3 中繼資料標籤存放於 S3 物件：AMI 名稱、AMI 描述、AMI 註冊日期、AMI 擁有者帳戶，以及存放操作的時間戳記。

完成任務所需的時間取決於 AMI 的大小。這也取決於有多少其他任務正在進行中，因為任務已排入佇列。您可以呼叫 `DescribeStoreImageTasks` API 追蹤任務進度。

所有進行中 AMIs 的大小總和限制為每個帳戶 1，200 GB 的 EBS 快照資料。系統會拒絕更多的任務建立，除非進行中的任務數量小於限制數量。例如，如果目前存放了一個具有 200 GB 快照資料的 AMI，以及另一個具有 400 GB 快照資料的 AMI，則會接受另一個請求，因為進行中的總量為小於限制的 600 GB。但是，如果目前正在存放具有 1，200 GB 快照資料的單一 AMI，則會拒絕進一步的任務，直到任務完成為止。

## DescribeStoreImageTasks
<a name="DescribeStoreImageTasks"></a>

`DescribeStoreImageTasks` API 描述了 AMI 存放任務的進度。您可以描述指定 AMI 的任務。如果未指定 AMI，您會取得過去 31 天內處理的所有存放映像任務的分頁清單。

對於每個 AMI 任務，回應會指示任務為 `InProgress`、`Completed` 或 `Failed`。對於任務 `InProgress`，回應會以百分比顯示預估進度。

任務會以相反的時間順序列出。

目前，只能檢視上個月的任務。

## CreateRestoreImageTask
<a name="CreateRestoreImageTask"></a>

`CreateRestoreImageTask` API 啟動一個任務，從先前使用 `CreateStoreImageTask` 請求建立的 S3 物件還原為 AMI。

還原任務可以在執行存放任務的相同或不同區域中執行。

將從中還原 AMI 物件的 S3 儲存貯體必須位於請求還原任務的相同區域。AMI 將在此區域還原。

AMI 會還原其中繼資料，例如名稱、描述和對應於存放 AMI 之值的區塊型儲存設備映射。此帳戶的區域中，AMI 的名稱必須是唯一的。如果您沒有提供名稱，新的 AMI 將取得與原始 AMI 相同的名稱。AMI 取得在還原過程中產生的新 AMI ID。

完成 AMI 還原任務所需的時間取決於 AMI 的大小。這也取決於有多少其他任務正在進行中，因為任務已排入佇列。您可以透過描述 AMI ([describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html)) 或其 EBS 快照 ([describe-snapshots](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html)) 來查看任務的進度。如果任務失敗，AMI 和快照集會轉為失敗狀態。

所有進行中 AMIs 的大小總和限制為每個帳戶 EBS 快照資料的 600 GB （根據還原後的大小）。系統會拒絕更多的任務建立，除非進行中的任務數量小於限制數量。

## 檔案路徑
<a name="file-paths-in-s3"></a>

您可以透過下列方式在存放和還原 AMI 時使用檔案路徑：
+ 在 S3 中存放 AMI 時，可以將檔案路徑新增到儲存貯體名稱。在內部，系統會將路徑與儲存貯體名稱分隔開來，然後將路徑新增至產生用來存放 AMI 的物件金鑰。完整的物件路徑會顯示在 API 呼叫的回應中。
+ 還原 AMI 時，由於物件索引鍵參數可用，因此可以將路徑新增至物件索引鍵值的開頭。

**範例：使用附加檔案路徑的儲存貯體名稱**  
儲存 AMI 時，請在儲存貯體名稱後指定檔案路徑。

```
amzn-s3-demo-bucket/path1/path2
```

下列為產生的物件金鑰。

```
path1/path2/ami-0abcdef1234567890.bin
```

若要還原 AMI，您可指定儲存貯體名稱和物件金鑰。如需範例，請參閱 [建立存放映像任務](work-with-ami-store-restore.md#create-store-image-task)。

# 建立存放映像任務
<a name="work-with-ami-store-restore"></a>

當您將 AMI 存放在 S3 儲存貯體時，會建立存放映像任務。您可以使用存放映像任務來監控流程的進度與結果。

**Topics**
+ [保護您的 AMI](#securing-amis)
+ [使用 S3 存放和還原 AMI 的許可](#ami-s3-permissions)
+ [建立存放映像任務](#create-store-image-task)
+ [建立還原映像任務](#create-restore-image-task)

## 保護您的 AMI
<a name="securing-amis"></a>

請務必確保 S3 儲存貯體具有足夠的安全性來保護 AMI 的內容，而且只要 AMI 物件保留在儲存貯體中，安全性就必須要維護。如果無法完成，則不建議使用這些 API。確保不允許公開存取 S3 儲存貯體。我們建議針對存放 AMI 的 S3 儲存貯體啟用[伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)，儘管這不是必要的。

如需如何為 S3 儲存貯體設置適當安全性設定的相關資訊，請檢閱下列安全性主題：
+ [封鎖對 Amazon S3 儲存體的公開存取權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
+ [對 Amazon S3 儲存貯體設定預設伺服器端加密行為](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)
+ [我可以使用哪些 S3 儲存貯體政策來符合 AWS Config 規則 s3-bucket-ssl-requests-only？](https://repost.aws/knowledge-center/s3-bucket-policy-for-config-rule)
+ [啟用 Amazon S3 伺服器存取記錄日誌](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)

將 AMI 快照複製到 S3 物件時，資料會透過 TLS 連線複製。您可以將 AMI 與加密的快照一起存放，但快照會在存放程序中解密。

## 使用 S3 存放和還原 AMI 的許可
<a name="ami-s3-permissions"></a>

若您的 IAM 主體將使用 Amazon S3 存放或還原 AMI，則您需要授予其所需的許可。

下列範例政策包含允許 IAM 主體執行存放和還原任務所需的所有動作。

您還可建立僅授予委託人存取特定資源的 IAM 政策。如需更多範例政策，請參閱《*IAM 使用者指南*》中的[存取 AWS 資源的管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。

**注意**  
若組成 AMI 的快照已進行加密，或者您的帳戶依預設啟用了加密功能，則您的 IAM 主體必須具有使用 KMS 金鑰的許可權限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:AbortMultipartUpload",
                "ebs:CompleteSnapshot",
                "ebs:GetSnapshotBlock",
                "ebs:ListChangedBlocks",
                "ebs:ListSnapshotBlocks",
                "ebs:PutSnapshotBlock",
                "ebs:StartSnapshot",
                "ec2:CreateStoreImageTask",
                "ec2:DescribeStoreImageTasks",
                "ec2:CreateRestoreImageTask",
                "ec2:GetEbsEncryptionByDefault",
                "ec2:DescribeTags",
                "ec2:CreateTags"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 建立存放映像任務
<a name="create-store-image-task"></a>

若要在 S3 儲存貯體存放 AMI，請先建立存放映像任務。完成任務所需的時間取決於 AMI 的大小。您可追蹤任務進度，直到任務成功或失敗為止。

------
#### [ AWS CLI ]

**若要建立存放映像任務**  
使用 [create-store-image-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-store-image-task.html) 命令。

```
aws ec2 create-store-image-task \
    --image-id ami-0abcdef1234567890 \
    --bucket amzn-s3-demo-bucket
```

以下為範例輸出。

```
{
  "ObjectKey": "ami-0abcdef1234567890.bin"
}
```

**若要描述存放任務的進度**  
使用 [describe-store-image-tasks](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-store-image-tasks.html) 命令。

```
aws ec2 describe-store-image-tasks \
    --image-ids ami-0abcdef1234567890 \
    --query StoreImageTaskResults[].StoreTaskState \
    --output text
```

以下為範例輸出。

```
InProgress
```

------
#### [ PowerShell ]

**若要建立存放映像任務**  
使用 [New-EC2StoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2StoreImageTask.html) cmdlet。

```
New-EC2StoreImageTask `
    -ImageId ami-0abcdef1234567890 `
    -Bucket amzn-s3-demo-bucket
```

以下為範例輸出。

```
ObjectKey         : ami-0abcdef1234567890.bin
```

**若要描述存放任務的進度**  
使用 [Get-EC2StoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2StoreImageTask.html) cmdlet。

```
(Get-EC2StoreImageTask -ImageId ami-0abcdef1234567890).StoreTaskState
```

以下為範例輸出。

```
InProgress
```

------

## 建立還原映像任務
<a name="create-restore-image-task"></a>

您必須指定已還原 AMI 的名稱。此帳戶的區域中，AMI 的名稱必須是唯一的。還原的 AMI 會取得一個新的 AMI ID。

------
#### [ AWS CLI ]

**若要建立還原映像任務**  
使用 [create-restore-image-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-restore-image-task.html) 命令。

```
aws ec2 create-restore-image-task \
    --object-key ami-0abcdef1234567890.bin \
    --bucket amzn-s3-demo-bucket \
    --name "my-restored-ami"
```

以下為範例輸出。

```
{
   "ImageId": "ami-1234567890abcdef0"
}
```

------
#### [ PowerShell ]

**若要建立還原映像任務**  
使用 [New-EC2RestoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2RestoreImageTask.html) cmdlet。

```
New-EC2RestoreImageTask `
    -ObjectKey ami-0abcdef1234567890.bin `
    -Bucket amzn-s3-demo-bucket `
    -Name "my-restored-ami"
```

以下為範例輸出。

```
ImageId         : ami-1234567890abcdef0
```

------

# 使用 AMI 原始伺服器追蹤 AMI 的原始伺服器
<a name="ami-ancestry"></a>

AMI 上階透過傳回其所有上階 AMI IDs 和區域，協助您追蹤 AMIs 的原始伺服器。當您建立或複製 AMI 時，新的 AMI 會保留其來源 （父） AMI 的 ID 和區域。這可讓您將 AMIs 鏈追蹤回根 AMI。

**主要優點**

使用 AMI 原始伺服器可協助您：
+ 追蹤 AMI 衍生產品以確保符合內部政策。
+ 在舊版 AMIs 中發現安全問題時，識別潛在易受攻擊的 AMI。
+ 維持跨多個區域的 AMI 原始伺服器可見性。

**Topics**
+ [AMI 原始伺服器的運作方式](#how-ami-ancestry-works)
+ [考量事項](#ami-ancestry-conditions)
+ [檢視 AMI 原始伺服器](#view-ami-ancestry)
+ [識別來源 AMI](#identify-source-ami-used-to-create-new-ami)

## AMI 原始伺服器的運作方式
<a name="how-ami-ancestry-works"></a>

AMI 原始伺服器會識別用來建立指定 AMI 的父系 AMI、父系的父系，以此類推，直到根 AMI。以下是其運作方式：
+ 每個 AMI 會顯示其來源 （父系） AMI 的 ID 和區域。
+ 從您選取的 AMI 開始，原始項目清單會依序顯示每個父系 AMI。
+ 原始項目清單會追蹤回 ，直到到達根 AMI。根 AMI 是下列其中一項：
  + 來自[已驗證供應商](sharing-amis.md#verified-ami-provider)的公有 AMI （由其擁有者別名識別，即 `amazon`或 `aws-marketplace`)。
  + 沒有記錄祖先的 AMI。例如，使用 [RegisterImage](creating-an-ami-ebs.md#creating-launching-ami-from-snapshot) 直接從一組快照建立 AMI 時，沒有要追蹤的來源 AMI，與從執行個體建立 AMI 時不同。
  + 來源 AMI 來自不同[分割區](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#partition)的 AMI。
  + 清單中的第 50 個 AMI。原始清單中AMIs 數目上限為 50。

## 考量事項
<a name="ami-ancestry-conditions"></a>
+ 來源 AMI 的 ID 和區域僅適用於使用 [CreateImage](creating-an-ami-ebs.md#how-to-create-ebs-ami)、[CopyImage](CopyingAMIs.md#ami-copy-steps) 或 [CreateRestoreImageTask](store-restore-how-it-works.md#CreateRestoreImageTask) 建立AMIs。
+ 對於使用 [CreateImage](creating-an-ami-ebs.md#how-to-create-ebs-ami) 建立AMIs （從執行個體建立 AMI)，來源 AMI ID 是用來啟動執行個體的 AMI ID。
+ 來源 AMI 資訊不適用於：
  + 使用 [RegisterImage](creating-an-ami-ebs.md#creating-launching-ami-from-snapshot) 建立AMIs，因為它們是從快照建立的。
  + 對於某些較舊AMIs。
+ 來源 AMI 資訊會在下列情況下保留：
  + AMIs會跨區域複製。
  + 已取消註冊 （刪除） 來源 AMIs。
  + 您無法存取來源 AMIs。
+ 每個前代清單限制為 50 AMIs。

## 檢視 AMI 原始伺服器
<a name="view-ami-ancestry"></a>

您可以使用下列方法檢視 AMI 的祖系。

------
#### [ Console ]

**檢視 AMI 的原始伺服器**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 選取 AMI，然後選擇 **AMI 原始標籤**。

1. **AMI 祖系項目**表列出祖系清單中的所有 AMIs。
   + **AMI ID** – 原始清單中每個 AMI 的識別符。資料表中的第一個項目是選取的 AMI，後面接著其祖先。
   + **來源 AMI ID** – 建立 AMI ID 欄中 AMI 的 **AMI ID**。破折號 (**-**) 表示 AMI 原始清單的結尾。
   + **來源 AMI 區域** – AWS 區域 來源 AMI 所在的 。
   + **上階層級** – 上階清單中的位置，其中：
     + **0 （輸入 AMI)** 表示您想知道其前代的所選 AMI。
     + 增加數字會顯示較舊的祖先。
     + ***n* （原始 AMI)** 表示根 AMI，而數字表示前者清單過去的時間。
   + **建立日期** – 建立 AMI 時，採用 UTC 格式。
   + **擁有者別名** – AMI 擁有者的別名 （例如 `amazon`)。破折號 (**-**) 表示 AMI 沒有擁有者別名。

------
#### [ AWS CLI ]

**檢視 AMI 的原始伺服器**  
使用 [get-image-ancestry](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-image-ancestry.html) 命令並指定 AMI ID。

```
aws ec2 get-image-ancestry \
    --image-id ami-1111111111EXAMPLE \
    --region us-east-1
```

以下為範例輸出。輸出會依祖先順序列出 AMIs：第一個項目是指定的 （輸入） AMI，後面接著其父系、父系的父系等，並以根 AMI 結尾。

```
{
    "ImageAncestryEntries": [
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-1111111111EXAMPLE", // Input AMI
            "SourceImageId": "ami-2222222222EXAMPLE",
            "SourceImageRegion": "us-east-1"

        },
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-2222222222EXAMPLE", // Parent AMI
            "SourceImageId": "ami-3333333333EXAMPLE",
            "SourceImageRegion": "us-east-1"
        },
        ...
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-8888888888EXAMPLE", // Root AMI
            "ImageOwnerAlias": "aws-marketplace",
            "SourceImageId": "ami-9999999999EXAMPLE",
            "SourceImageRegion": "us-east-2"
        }
    ]
}
```

------
#### [ PowerShell ]

**檢視 AMI 的原始伺服器**  
使用 [Get-EC2ImageAncestry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAncestry.html) cmdlet。

```
Get-EC2ImageAncestry -ImageId ami-1111111111EXAMPLE
```

以下為範例輸出。輸出會依祖先順序列出 AMIs：第一個項目是指定的 （輸入） AMI，後面接著其父系、父系的父系等，並以根 AMI 結尾。

```
ImageAncestryEntries : {
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-1111111111EXAMPLE"    # Input AMI
        SourceImageId = "ami-2222222222EXAMPLE"
        SourceImageRegion = "us-east-1"
    },
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-2222222222EXAMPLE"    # Parent AMI
        SourceImageId = "ami-3333333333EXAMPLE"
        SourceImageRegion = "us-east-1"
    },
    ...
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-8888888888EXAMPLE"    # Root AMI
        ImageOwnerAlias = "aws-marketplace"
        SourceImageId = "ami-9999999999EXAMPLE"
        SourceImageRegion = "us-east-2"
    }
}
```

------

## 識別來源 AMI
<a name="identify-source-ami-used-to-create-new-ami"></a>

如果您只需要識別用來建立 AMI 的直接父系 （來源） AMI，您可以使用下列方法。

------
#### [ Console ]

**識別用來建立所選 AMI 的來源 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 選取 AMI 以檢視詳細資訊。

   來源 AMI 資訊於下列欄位顯示：**來源 AMI ID** 和**來源 AMI 區域**

------
#### [ AWS CLI ]

**識別用來建立指定 AMI 的來源 AMI**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-ids ami-0abcdef1234567890 \
    --query "Images[].{ID:SourceImageId,Region:SourceImageRegion}"
```

以下為範例輸出。

```
[
    {
        "ID": "ami-0abcdef1234567890",
        "Region": "us-west-2"
    }
}
```

------
#### [ PowerShell ]

**識別用來建立指定 AMI 的來源 AMI**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
Get-EC2Image -ImageId ami-0abcdef1234567890 | Select SourceImageId, SourceImageRegion
```

以下為範例輸出。

```
SourceImageId           SourceImageRegion
-------------           -----------------
ami-0abcdef1234567890 us-west-2
```

------

# 管理及監控 AMI 用量
<a name="ec2-ami-usage"></a>

AWS 提供多種功能，可協助您有效管理和監控 AMI 用量。您可以追蹤哪些帳戶正在使用您的共用 AMIs、識別您的 AMIs 上次使用的時間，以及探索您 中哪些資源 AWS 帳戶 參考特定 AMIs。

下表提供了管理及監控 AMI 用量的功能概觀：


| 功能 | 使用案例 | 主要優點 | 
| --- | --- | --- | 
| [AMI 用量報告](your-ec2-ami-usage.md) | 了解哪些 AWS 帳戶 正在使用您的 AMIs，以及每個 AMI 的使用量。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 
| [上次使用追蹤](ami-last-launched-time.md) | 檢查上次使用您的 AMI 的時間 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 
| [AMI 參考檢查](ec2-ami-references.md) | 確保您的 AWS 資源使用最新的合規 AMIs。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 

**Topics**
+ [檢視您的 AMI 用量](your-ec2-ami-usage.md)
+ [檢查上次使用 Amazon EC2 AMI 的時間](ami-last-launched-time.md)
+ [確定參考指定 AMI 的資源](ec2-ami-references.md)

# 檢視您的 AMI 用量
<a name="your-ec2-ami-usage"></a>

如果您與其他 共用 Amazon Machine Image AMIs) AWS 帳戶，無論是與特定 AWS 帳戶、組織、組織單位 (OUs) 或公開 ，您都可以透過建立 AMIs用量報告來查看這些 AMI 的使用方式。報告提供對以下項目的深入解析：
+ 在 EC2 執行個體或啟動範本中 AWS 帳戶 使用您的 AMIs 
+ 參考每個 AMI 的 EC2 執行個體或啟動範本的數目

AMI 用量報告藉由提供以下協助可助您更高效地管理 AMI：
+ 識別參考 AMIs AWS 帳戶 和資源類型，以便您可以安全地取消註冊或停用 AMIs。
+ 確定未使用的 AMI 以取消註冊，進而降低儲存費用。
+ 確定您最常用的 AMI。

**Topics**
+ [AMI 用量報告運作方式](#how-ami-usage-reports-work)
+ [建立 AMI 用量報告](#create-ami-usage-reports)
+ [檢視 AMI 用量報告](#view-ami-usage-reports)
+ [刪除 AMI 用量報告](#delete-ami-usage-reports)
+ [匯入配額](#ami-usage-report-quotas)

## AMI 用量報告運作方式
<a name="how-ami-usage-reports-work"></a>

若建立 AMI 用量報告，您可指定：
+ 待報告的 AMI。
+  AWS 帳戶 要檢查的 （特定帳戶或所有帳戶）。
+ 待檢查的資源類型 (EC2 執行個體、啟動範本，或者兩者）。
+ 若是啟動範本，則為待檢查的版本數目 (預設為 20 個最新版本）。

Amazon EC2 可針對每個 AMI 建立一個單獨的請求。每份報告皆提供：
+  AWS 帳戶 使用 AMI 的 清單。
+ 根據每個帳戶的資源類型參考 AMI 的資源計數。請注意，針對啟動範本，若在啟動範本的多個版本中參考 AMI，則計數僅為 1。

**重要**  
若產生 AMI 用量報告，可能不會包含最新活動。過去 24 小時小時的執行個體活動，以及過去幾天的啟動範本活動，可能皆不會在報告中顯示。

Amazon EC2 在建立報告後 30 天會自動刪除報告。您可透過 EC2 主控台下載報告，以便在本機保留。

## 建立 AMI 用量報告
<a name="create-ami-usage-reports"></a>

如需檢視如何使用 AMI，必須先建立 AMI 用量報告，指定要報告的帳戶與資源類型。一旦建立報告，即可檢視報告內容。您可透過 EC2 主控台下載報告。

------
#### [ Console ]

**如需建立 AMI 用量報告**

1. 請前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 選取 AMI，然後選擇**動作**、**AMI 用量**、**檢視我的 AMI 用量**。

1. 在**建立我的 AMI 用量報告**頁面，執行以下操作：

   1. 針對**資源類型**，選取要報告的一個或多個資源類型。

   1. 針對**帳戶**，執行下列其中一項操作：
      + 選擇**指定帳戶 ID**，然後針對要報告的每個帳戶，選擇**新增帳戶 ID**。
      + 選擇**包括所有帳戶**，以報告全部帳戶。

   1. 選擇**建立我的 AMI 用量報告**。

1. 在 AMI 頁面，選擇**我的 AMI 用量**索引標籤。

1. 選擇報告 ID 來檢視其詳細資訊。

------
#### [ AWS CLI ]

**如需針對帳戶清單建立 AMI 用量報告**  
請使用以下必要參數並搭配 [create-image-usage-report](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image-usage-report.html) 命令：
+ `--image-id` – 待報告 AMI 的 ID。
+ `--resource-types` – 待檢查資源的類型。在以下範例中，待檢查資源類型為 EC2 執行個體及啟動範本。另外還會指定待檢查啟動範本版本的數目 (`version-depth=100`)。

 如需報告特定帳戶，使用 `--account-ids` 參數來指定待報告的每個帳戶 ID。

```
aws ec2 create-image-usage-report \
    --image-id ami-0abcdef1234567890 \
    --account-ids 111122223333 444455556666 123456789012 \
    --resource-types ResourceType=ec2:Instance \
      'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=100}]'
```

**如需建立所有帳戶的 AMI 用量報告**  
如需使用指定 AMI 來報告所有帳戶，可使用同一命令但省略 `--account-ids` 參數。

```
aws ec2 create-image-usage-report \
    --image-id ami-0abcdef1234567890 \
    --resource-types ResourceType=ec2:Instance \
      'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=100}]'
```

以下為範例輸出。

```
{
    "ReportId": "amiur-00b877d192f6b02d0"
}
```

**如需監控報告建立狀態**  
請使用 [describe-image-usage-reports](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-reports.html) 命令，然後指定報告 ID。

```
aws ec2 describe-image-usage-reports --report-ids amiur-00b877d192f6b02d0
```

以下為範例輸出。`State` 欄位的初始值為 `pending`。為了能夠檢視報告項目，狀態必須為 `available`。

```
{
    "ImageUsageReports": [
        {
            "ImageId": "ami-0e9ae3dc21c2b3a64",
            "ReportId": "amiur-abcae3dc21c2b3999",
            "ResourceTypes": [
                {"ResourceType": "ec2:Instance"}
            ],
            "State": "pending",
            "CreationTime": "2025-09-29T13:27:12.322000+00:00",
            "ExpirationTime": "2025-10-28T13:27:12.322000+00:00"
        }
    ]
}
```

------
#### [ PowerShell ]

**如需針對帳戶清單建立 AMI 用量報告**  
請使用以下必要參數並搭配 [New-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2ImageUsageReport.html) cmdlet：
+ `-ImageId` – 待報告 AMI 的 ID。
+ `-ResourceType` – 待檢查資源的類型。在以下範例中，待檢查資源類型為 EC2 執行個體及啟動範本。另外還會指定待檢查啟動範本版本的數目 (`'version-depth' = 100`)。

 如需報告特定帳戶，使用 `-AccountId` 參數來指定待報告的每個帳戶 ID。

```
New-EC2ImageUsageReport `
    -ImageId ami-0abcdef1234567890 `
    -AccountId 111122223333 444455556666 123456789012 `
    -ResourceType @(
        @{ResourceType = 'ec2:Instance'},
        @{ResourceType = 'ec2:LaunchTemplate'ResourceTypeOptions = @{'version-depth' = 100}
        })
```

**如需建立所有帳戶的 AMI 用量報告**  
如需使用指定 AMI 來報告所有帳戶，可使用同一命令但省略 `-AccountId` 參數。

```
New-EC2ImageUsageReport `
    -ImageId ami-0abcdef1234567890 `
    -ResourceType @(
        @{ResourceType = 'ec2:Instance'},
        @{ResourceType = 'ec2:LaunchTemplate'ResourceTypeOptions = @{'version-depth' = 100}
        })
```

以下為範例輸出。

```
ReportId
--------
amiur-00b877d192f6b02d0
```

**如需監控報告建立狀態**  
請使用 [Get-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReport.html) 命令，然後指定報告 ID。

```
Get-EC2ImageUsageReport -ReportId amiur-00b877d192f6b02d0
```

以下為範例輸出。`State` 欄位的初始值為 `pending`。為了能夠檢視報告項目，狀態必須為 `available`。

```
ImageUsageReports
-----------------
{@{ImageId=ami-0e9ae3dc21c2b3a64; ReportId=amiur-abcae3dc21c2b3999; ResourceTypes=System.Object[]; State=pending; CreationTime=2025-09-29; ExpirationTime=2025-10-28}}
```

------

## 檢視 AMI 用量報告
<a name="view-ami-usage-reports"></a>

您可檢視在過去 30 天針對 AMI 建立的全部用量報告。Amazon EC2 在建立報告後 30 天會自動刪除報告。

針對每個報告，您可以看到使用 AMI AWS 帳戶 的 ，以及針對每個帳戶，依資源類型參考 AMI 的資源計數。您還可查看報告起始建立時間。只有在報告處於**完成** （主控台） 或 `available`(AWS CLI) 狀態時，才能使用此資訊。

**重要**  
若產生 AMI 用量報告，可能不會包含最新活動。過去 24 小時小時的執行個體活動，以及過去幾天的啟動範本活動，可能皆不會在報告中顯示。

------
#### [ Console ]

**檢視 AMI 用量報告**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 選取 AMI。

1. 選擇**我的用量報告**索引標籤。

   報告清單會顯示：
   + 過去 30 天內為所選 AMI 產生的所有報告。
   + 對於每個報告，**報告起始時間**欄會顯示報告建立的日期。

1. 選擇報告的 ID，以便檢視其內容。

1. 如需返回 AMI 詳細資訊頁面的**我的用量報告**索引標籤，選擇**檢視此 AMI 的所有報告**。

------
#### [ AWS CLI ]

**如需列出指定 AMI 的全部 AMI 用量報告**  
請使用 [describe-image-usage-reports](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-reports.html) 命令，然後指定 AMI 的 ID，以便獲取其報告清單。

```
aws ec2 describe-image-usage-reports --image-ids ami-0abcdef1234567890
```

以下為範例輸出。每個報告 ID 會與掃描的資源類型，以及報告建立日期與到期日期一同列示。您可透過此資訊來確定您想要檢視其項目的報告。

```
{
  "ImageUsageReports": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ReportId": "amiur-1111111111111111",
      "ResourceTypes": [
        {
          "ResourceType": "ec2:Instance"
        }
      ],
      "State": "available",
      "CreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ExpirationTime": "2025-10-28T13:27:12.322000+00:00",
      "Tags": []
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ReportId": "amiur-22222222222222222",
      "ResourceTypes": [
        {
          "ResourceType": "ec2:Instance"
        },
        {
          "ResourceType": "ec2:LaunchTemplate"
        }
      ],
      "State": "available",
      "CreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ExpirationTime": "2025-10-30T13:27:12.322000+00:00",
      "Tags": []
    }
  ],
  "NextToken": "opaque"
}
```

**如需檢視指定 AMI 的 AMI 用量報告內容**  
請使用 [describe-image-usage-report-entries](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-report-entries.html) 命令，然後指定 AMI 的 ID。回應會傳回指定 AMI 的所有報告，並顯示已使用該 AMI 的帳戶及其資源計數。

```
aws ec2 describe-image-usage-report-entries --image-ids ami-0abcdef1234567890
```

以下為範例輸出。

```
{
  "ImageUsageReportEntries": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 15,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-1111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 2,
      "ReportCreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ReportId": "amiur-22222222222222222"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "001100110011",
      "UsageCount": 39,
      "ReportCreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ReportId": "amiur-22222222222222222"
    }
  ],
  "NextToken": "opaque"
}
```

**如需檢視指定報告的 AMI 用量報告內容**  
請使用 [describe-image-usage-report-entries](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-report-entries.html) 命令，然後指定報告的 ID。針對指定報告，回應可傳回全部項目，並顯示已使用 AMI 的帳戶以及資源計數。

```
aws ec2 describe-image-usage-report-entries --report-ids amiur-11111111111111111
```

以下為範例輸出。

```
{
  "ImageUsageReportEntries": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 15,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:LaunchTemplate",
      "AccountId": "123412341234",
      "UsageCount": 4,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:LaunchTemplate",
      "AccountId": "001100110011",
      "UsageCount": 2,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    }
  ],
  "NextToken": "opaque"
}
```

------
#### [ PowerShell ]

**如需列出指定 AMI 的全部 AMI 用量報告**  
請使用 [Get-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReport.html) cmdlet，然後指定 AMI 的 ID，以便獲取其報告清單。

```
Get-EC2ImageUsageReport -ImageId ami-0abcdef1234567890
```

以下為範例輸出。每個報告 ID 會與掃描的資源類型，以及報告建立日期與到期日期一同列示。您可透過此資訊來確定您想要檢視其項目的報告。

```
@{
    ImageUsageReports = @(
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-1111111111111111"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-09-29T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-28T13:27:12.322000+00:00"
        },
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-22222222222222222"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-09-30T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-29T13:27:12.322000+00:00"
        },
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-33333333333333333"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-10-01T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-30T13:27:12.322000+00:00"
        }
    )
    NextToken = "opaque"
}
```

**如需檢視指定 AMI 的 AMI 用量報告內容**  
請使用 [Get-EC2ImageUsageReportEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReportEntry.html) cmdlet，然後指定 AMI 的 ID。回應會傳回指定 AMI 的所有報告，並顯示已使用該 AMI 的帳戶及其資源計數。

```
Get-EC2ImageUsageReportEntry -ImageId ami-0abcdef1234567890
```

以下為範例輸出。

```
ImageUsageReportEntries : {@{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 15
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-1111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 7
    ReportCreationTime = "2025-09-30T13:27:12.322000+00:00"
    ReportId = "amiur-22222222222222222"
    }...}
NextToken : opaque
```

**如需檢視指定報告的 AMI 用量報告內容**  
請使用 [Get-EC2ImageUsageReportEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReportEntry.html) cmdlet，然後指定報告的 ID。針對指定報告，回應可傳回全部項目，並顯示已使用 AMI 的帳戶以及資源計數。

```
Get-EC2ImageUsageReportEntry -ReportId amiur-11111111111111111
```

以下為範例輸出。

```
ImageUsageReportEntries : {@{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 15
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:LaunchTemplate"
    AccountId = "123412341234"
    UsageCount = 4
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:LaunchTemplate"
    AccountId = "************"
    UsageCount = 2
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }}
NextToken : opaque
```

------

## 刪除 AMI 用量報告
<a name="delete-ami-usage-reports"></a>

Amazon EC2 會在報告建立之後 30 天內自動將其刪除。您可在該時間之前手動將其刪除。

------
#### [ Console ]

**如需刪除 AMI 用量報告**

1. 請前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 選取 AMI。

1. 選擇**我的 AMI 用量**索引標籤。

1. 選擇待刪除報告旁邊的選項按鈕，然後選擇**刪除**。

------
#### [ AWS CLI ]

**如需刪除 AMI 用量報告**  
請使用 [delete-image-usage-report](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-image-usage-report.html) 命令，然後指定報告的 ID。

```
aws ec2 delete-image-usage-report --report-id amiur-0123456789abcdefg
```

------
#### [ PowerShell ]

**如需刪除 AMI 用量報告**  
請使用 [Remove-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2ImageUsageReport.html) cmdlet，並指定報告的 ID。

```
Remove-EC2ImageUsageReport -ReportId amiur-0123456789abcdefg
```

------

## 匯入配額
<a name="ami-usage-report-quotas"></a>

在建立 AMI 用量報告時，以下配額適用。這些配額適用於每個 AWS 區域。


| Description | 配額 | 
| --- | --- | 
| 每個 的進行中 (pending) AMI 用量報告 AWS 帳戶 | 2,000 | 
| 每個 AMI 的進行中 (pending) AMI 用量報告 | 1 | 

# 檢查上次使用 Amazon EC2 AMI 的時間
<a name="ami-last-launched-time"></a>

Amazon EC2 會自動追蹤上次使用 AMI 啟動執行個體的日期和時間。如果您有長時間未用於啟動執行個體的 AMI，請考慮該 AMI 是否適合[取消註冊](deregister-ami.md)或[棄用](ami-deprecate.md)。

**考量事項**
+ 使用 AMI 啟動執行個體時，在報告該使用情況之前會有 24 小時延遲。
+ 您必須是 AMI 的擁有者才能取得上次啟動時間。
+ AMI 用量資料自 2017 年 4 月開始提供。

------
#### [ Console ]

**檢視 AMI 的上次啟動時間**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中選擇 **AMI**。

1. 從篩選條件列中，選擇 **Owned by me** (由我擁有)。

1. 選取 AMI 的核取方塊。

1. 在**詳細資訊**索引標籤上，找到**上次啟動的時間**。

------
#### [ AWS CLI ]

**如需藉由描述 AMI 來檢視上次啟動的時間**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。若 `LastLaunchedTime` 在輸出中不存在，請確認您擁有該 AMI。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query Images[].LastLaunchedTime \
    --output text
```

以下為範例輸出。

```
2025-02-17T20:22:19Z
```

**如需檢視 AMI 的上次啟動的時間屬性**  
請使用 [describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 命令。您必須為指定 AMI 的擁有者。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute lastLaunchedTime \
    --query LastLaunchedTime.Value \
    --output text
```

以下為範例輸出。

```
2025-02-17T20:22:19Z
```

------
#### [ PowerShell ]

**如需藉由描述 AMI 來檢視上次啟動的時間**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。若 `LastLaunchedTime` 在輸出中不存在，請確認您擁有該 AMI。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).LastLaunchedTime
```

以下為範例輸出。

```
2025-02-17T20:22:19Z
```

**如需檢視 AMI 的上次啟動的時間屬性**  
使用 [Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) cmdlet。您必須為指定 AMI 的擁有者。

```
(Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute LastLaunchedTime).LastLaunchedTime
```

以下為範例輸出。

```
2025-02-17T20:22:19Z
```

------

# 確定參考指定 AMI 的資源
<a name="ec2-ami-references"></a>

您可以識別參考指定 Amazon Machine Image (AMIs) AWS 的資源，無論 AMIs 是公有還是私有，還是擁有者。此可見度有助您確認資源使用最新的合規 AMI。

**主要優點**

檢查 AMI 參考有助您：
+ 稽核帳戶中 AMI 的使用。
+ 檢查正在參考的特定 AMI 的位置。
+ 藉由更新資源來參考最新 AMI，以確保合規。

 

**Topics**
+ [支援的資源](#ec2-ami-references-supported-resources)
+ [AMI 參考檢查運作方式](#how-ami-references-works)
+ [所需的 IAM 許可](#ami-references-required-permissions)
+ [檢查 AMI 參考的步驟](#ami-reference-procedures)

## 支援的資源
<a name="ec2-ami-references-supported-resources"></a>

可簽入的 AMI 參考：
+ EC2 執行個體
+ 啟動範本
+ SSM 參數
+ Image Builder 映像配方
+ Image Builder 容器配方

## AMI 參考檢查運作方式
<a name="how-ami-references-works"></a>

**基本操作**

您在執行 AMI 參考檢查時可：
+ 指定待檢查的 AMI。
+ 選擇掃描哪些資源類型。
+ 接收可參考指定 AMI 的資源清單。

**資源類型選取**

在主控台中，您可選取待掃描的資源類型。

在 CLI 中，您可使用以下一個或兩個 CLI 參數，來指定待掃描的資源類型：
+ `IncludeAllResourceTypes`：掃描全部受支援的資源類型。
+ `ResourceTypes`：掃描您指定的資源類型。

**回應範圍**

您可使用 `ResourceTypes` 參數來自訂 `ResourceTypeOptions` 值，藉此限制 EC2 執行個體與啟動範本的回應範圍。主控台與 `IncludeAllResourceTypes` 參數皆使用預設選項值。若 `ResourceTypes` 與 `IncludeAllResourceTypes` 一起使用，`ResourceTypes` 選項值會優先於預設值。

下面為預設值：


| Resource Type (資源類型) | 範圍選項 (`OptionName`) | 用途 | `OptionValue` 與 主控台的預設值 | 
| --- | --- | --- | --- | 
| EC2 執行個體 | state-name | 依據執行個體狀態篩選 | pending、running、shutting-down、terminated、stopping、stopped (所有狀態) | 
| 啟動範本 | version-depth | 指定待檢查的啟動範本版本數目 (自最新版本開始) | 10 (最新版本) | 

## 所需的 IAM 許可
<a name="ami-references-required-permissions"></a>

如需使用 DescribeImageReferences API 來確定參考指定 AMI 的資源，需要下面的 IAM 許可來描述資源：
+ `ec2:DescribeInstances`
+ `ec2:DescribeLaunchTemplates`
+ `ec2:DescribeLaunchTemplateVersions`
+ `ssm:DescribeParameters`
+ `ssm:GetParameters`
+ `imagebuilder:ListImageRecipes`
+ `imagebuilder:ListContainerRecipes`
+ `imagebuilder:GetContainerRecipe`

**使用 DescribeImageReferences API 的 IAM 政策範例**  
下面的範例政策授予您使用 DescribeImageReferences API 的許可，其中包括描述 EC2 執行個體、啟動範本、Systems Manager 參數、Image Builder 映像配方，以及 Image Builder 容器配方的許可。

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ec2:DescribeImageReferences",
			"Resource": "*"
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeInstances",
				"ec2:DescribeLaunchTemplates",
				"ec2:DescribeLaunchTemplateVersions",
				"ssm:DescribeParameters",
				"ssm:GetParameters",
				"imagebuilder:ListImageRecipes",
				"imagebuilder:ListContainerRecipes",
				"imagebuilder:GetContainerRecipe"
			],
			"Resource": "*",
			"Condition": {
				"ForAnyValue:StringEquals": {
					"aws:CalledVia": [
						"ec2-images.amazonaws.com"
					]
				}
			}
		}
	]
}
```

------

**重要**  
我們強烈建議使用 AWS 受管政策，[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html)而不是自行建立政策。建立僅提供必要許可的自訂 IAM 政策，需要時間與專業知識，並且在新的資源類型可用時，還需要更新。  
`AmazonEC2ImageReferencesAccessPolicy` 受管政策：  
授予使用 DescribeImageReferences API 所需的全部許可 (這些許可包括描述 EC2 執行個體、啟動範本、Systems Manager 參數，以及 Image Builder 容器配方與映像配方)。
在新資源類型變得可用時自動提供支援 (使用 `IncludeAllResourceTypes` 參數時尤其重要)。
您可將 `AmazonEC2ImageReferencesAccessPolicy` 政策連接至您的 IAM 身分 (使用者、群組或角色)。  
若要檢視此政策中包括的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html)。

## 檢查 AMI 參考的步驟
<a name="ami-reference-procedures"></a>

使用下列程序來識別哪些 AWS 資源正在參考指定的 AMIs。

------
#### [ Console ]

**確定參考指定 AMI 的資源**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 選取一個或多個要檢查參考的 AMI。

1. 請選擇**動作**、**AMI 用量**、**檢視參考的資源**。

1. 在**檢視參考所選 AMI 的資源**頁面：

   1. 對於**資源類型**，請選取一個或多個資源類型。

   1. 請選擇**檢視資源**。

1. **參考所選 AMI 的資源**區段即會顯示。清單顯示參考指定 AMI 的資源。每列可提供以下資訊：
   + **AMI ID** – 參考 AMI 的 ID。
   + **資源類型** – 參考 AMI 的資源的資源類型。
   + **資源 ID** – 參考 AMI 的資源的 ID。

------
#### [ AWS CLI ]

**如需檢查特定資源類型的 AMI 參考**  
請使用 `--resource-types` 參數並搭配 [describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) 命令。下面的範例將檢查 EC2 執行個體 (依執行個體狀態確定範圍)、啟動範本 (範圍確定為 20 個最近的啟動範本版本)，以及其他特定資源類型。

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --resource-types \
        'ResourceType=ec2:Instance,ResourceTypeOptions=[{OptionName=state-name,OptionValues=[running,pending]}]' \
        'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=[20]}]' \
        'ResourceType=ssm:Parameter' \
        'ResourceType=imagebuilder:ImageRecipe' \
        'ResourceType=imagebuilder:ContainerRecipe'
```

以下為範例輸出。

```
{
    "ImageReferences": [
        {
            "ImageId": "ami-0abcdef1234567890",
            "ResourceType": "ec2:Instance",
            "Arn": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"
        },
        {
            "ImageId": "ami-1234567890abcdef0",
            "ResourceType": "ec2:LaunchTemplate",
            "Arn": "arn:aws:ec2:us-east-1:123456789012:launch-template/lt-1234567890abcdef0"
        }
    ]
}
```

**如需檢查所有受支援資源類型的 AMI 參考**  
請使用 `--include-all-resource-types` 參數並搭配 [describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) 命令。

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --include-all-resource-types
```

**檢查所有受支援資源類型與特定選項的 AMI 參考**  
請使用 `--include-all-resource-types` 和 `--resource-types` 參數並搭配 [describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) 命令。此範例將檢查所有資源類型，同時將 EC2 執行個體的回應範圍限定為執行中或擱置中執行個體。

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --include-all-resource-types \
    --resource-types 'ResourceType=ec2:Instance,ResourceTypeOptions=[{OptionName=state-name,OptionValues=[running,pending]}]'
```

------
#### [ PowerShell ]

**如需檢查特定資源類型的 AMI 參考**  
請使用 `-ResourceType` 參數並搭配 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) cmdlet。下面的範例將檢查 EC2 執行個體 (依執行個體狀態確定範圍)、啟動範本 (範圍確定為 20 個最近的啟動範本版本)，以及其他特定資源類型。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -ResourceType @(
        @{
            ResourceType = 'ec2:Instance'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'state-name'
                    OptionValues = @('running', 'pending')
                }
            )
        },
        @{
            ResourceType = 'ec2:LaunchTemplate'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'version-depth'
                    OptionValues = @('20')
                }
            )
        },
        @{
            ResourceType = 'ssm:Parameter'
        },
        @{
            ResourceType = 'imagebuilder:ImageRecipe'
        },
        @{
            ResourceType = 'imagebuilder:ContainerRecipe'
        }
    )
```

**如需檢查所有受支援資源類型的 AMI 參考**  
請使用 `-IncludeAllResourceTypes` 參數並搭配 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) cmdlet。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -IncludeAllResourceTypes
```

**檢查所有受支援資源類型與特定選項的 AMI 參考**  
請使用 `-IncludeAllResourceTypes` 與 `-ResourceType` 參數並搭配 [Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) cmdlet。此範例將檢查所有資源類型，同時將 EC2 執行個體的回應範圍限定為執行中或擱置中執行個體。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -IncludeAllResourceTypes `
    -ResourceType @(
        @{
            ResourceType = 'ec2:Instance'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'state-name'
                    OptionValues = @('running', 'pending')
                }
            )
        }
    )
```

------

# 棄用 Amazon EC2 AMI
<a name="ami-deprecate"></a>

您可以取代 AMI 來指出它已過期且不應該使用。您也可以為 AMI 指定未來的取代日期，指出 AMI 何時過期。例如，您可能會取代不再主動維護的 AMI，或者您可能會取代已被較新版本替代的 AMI。依預設，已取代的 AMI 不會出現在 AMI 清單中，以防止新使用者使用過期的 AMI。但是，現有使用者和啟動服務 (例如啟動範本和 Auto Scaling 群組) 可以透過指定其 ID 來繼續使用已取代的 AMI。若要刪除 AMI，以便使用者和服務無法使用它，您必須[取消註冊](deregister-ami.md)它。

AMI 被取代後：
+ 對於 AMI 使用者，已取代的 AMI 不會出現在 [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 呼叫中，除非您指定其 ID 或指定已取代的 AMI 必須出現。AMI 擁有者繼續在 [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 呼叫中查看已取代的 AMI。
+ 對於 AMI 使用者，不能透過 EC2 主控台選取已取代的 AMI。例如，已取代的 AMI 不會出現在啟動執行個體精靈的 AMI 目錄中。AMI 擁有者繼續在 EC2 主控台中查看已取代的 AMI。
+ 對於 AMI 使用者，如果您知道已取代的 AMI 的 ID，則可以使用 API、CLI 或 SDK 透過已取代的 AMI 來啟動執行個體。
+ 啟動服務 (例如啟動範本和 Auto Scaling 群組) 可以繼續參考已取代的 AMI。
+ 使用隨後被取代的 AMI 來啟動的 EC2 執行個體不會受到影響，而且可以停止、啟動和重新啟動。

您可以同時取代私有和公有 AMI。

**Topics**
+ [成本](#ami-deprecate-costs)
+ [考量事項](#ami-deprecate-limitations)
+ [棄用 AMI](#deprecate-ami)
+ [描述已取代的 AMI](#describe-deprecate-ami)
+ [取消 AMI 棄用](#cancel-deprecate-ami)

## 成本
<a name="ami-deprecate-costs"></a>

當您取代 AMI 時，不會刪除 AMI。AMI 擁有者繼續為 AMI 的快照付費。要停止支付快照的費用，AMI 擁有者必須透過[取消註冊](deregister-ami.md) AMI 來刪除它。

## 考量事項
<a name="ami-deprecate-limitations"></a>
+ 若要取代 AMI，您必須是 AMI 的擁有者。
+ 最近未用於啟動執行個體的 AMI 可能就是待移除或取消註冊的項目。如需詳細資訊，請參閱[檢查上次使用 Amazon EC2 AMI 的時間](ami-last-launched-time.md)。
+ 您可建立 Amazon Data Lifecycle Manager EBS 支援的 AMI 政策，以自動化 EBS 後端 AMI 的取代。若要了解詳細資訊，請參閱[建立 AMI 生命週期政策](https://docs.aws.amazon.com/ebs/latest/userguide/ami-policy.html)。
+ 在預設情況下，所有公用 AMI 的棄用日期都設定為自 AMI 建立日期起兩年。您可將棄用日期設定為早於兩年。若要取消棄用日期或將棄用日期延後，您必須將[與指定的 AWS 帳戶共享 AMI](sharingamis-explicit.md)，使該 AMI 成為私有。

## 棄用 AMI
<a name="deprecate-ami"></a>

您可以在特定的日期和時間取代 AMI。您必須為 AMI 的擁有者。

棄用日期的上限是從現在起 10 年，但公用 AMI 除外，其上限是自建立日期起 2 年。您無法指定過去的日期。

------
#### [ Console ]

**在特定日期取代 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中，選擇 **AMI**。

1. 從篩選條件列中，選擇 **Owned by me** (由我擁有)。

1. 選取 AMI，然後依序選取 **Actions** (動作)、**Manage AMI Deprecation** (管理 AMI 取代)。您可以選取多個 AMI，一次設定多個 AMI 的相同取代日期。

1. 選取**啟用**核取方塊，然後輸入取代日期和時間。

1. 選擇**儲存**。

------
#### [ AWS CLI ]

**在特定日期取代 AMI**  
使用 [enable-image-deprecation](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-deprecation.html) 命令。如果您指定秒數值，Amazon EC2 會將秒數四捨五入到最接近的分鐘。

```
aws ec2 enable-image-deprecation \
    --image-id ami-0abcdef1234567890 \
    --deprecate-at "2025-04-15T13:17:12.000Z"
```

------
#### [ PowerShell ]

**在特定日期取代 AMI**  
使用 [Enable-EC2ImageDeprecation](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageDeprecation.html) cmdlet。如果您指定秒數值，Amazon EC2 會將秒數四捨五入到最接近的分鐘。

```
Enable-EC2ImageDeprecation `
    -ImageId ami-0abcdef1234567890 `
    -DeprecateAt 2025-04-15T13:17:12.000Z
```

------

## 描述已取代的 AMI
<a name="describe-deprecate-ami"></a>

您可以檢視 AMI 的取代日期和時間，並依取代日期篩選 AMI。

------
#### [ Console ]

**檢視 AMI 的取代日期**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽器中，選取 **AMI**，然後選取該 AMI。

1. 檢查**取代時間**欄位 (若您選取 AMI 旁的核取方塊，其位於**詳細資料**索引標籤)。該欄位顯示 AMI 的取代日期和時間。若欄位為空的，則 AMI 不會遭到取代。

**依取代日期篩選 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中，選擇 **AMI**。

1. 從篩選條件列中，選擇 **Owned by me** (由我擁有) 或 **Private images** (私有映像) (私有映像包括與您共享以及您擁有的 AMI)。

1. 在搜尋列中，輸入 **Deprecation time** (當您輸入字母時，**Deprecation time** (取代時間) 篩選條件隨即顯示)，隨後選擇一個運算子及一個日期和時間。

------
#### [ AWS CLI ]

若描述全部 AMI，結果取決於您是 AMI 使用者還是 AMI 擁有者。
+ **AMI 使用者** – 依預設，若描述全部 AMI，將會排除與您共享但並非您擁有的棄用 AMI。如需要在結果中包括已棄用的 AMI，您必須指定 `--include-deprecated` 參數。
+ **AMI 擁有者** – 若描述全部 AMI，您擁有的全部 AMI 將會包括在內，包括棄用的 AMI。使用 `--no-include-deprecated` 選項不能排除您擁有的棄用 AMI。

**如需在描述所有 AMI 時包括所有已棄用的 AMI**  
使用下面的 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images 
    --owners 123456789012 \   
    --include-deprecated
```

**描述帳戶中已棄用的 AMI**  
使用下面的 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --owners self \
    --query "Images[?DeprecationTime!=null].ImageId" \
    --output text
```

以下為範例輸出。

```
ami-0abcdef1234567890
```

**描述 AMI 的取代日期**  
使用下面的 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。若輸出中不存在 `DeprecationTime`，不會棄用 AMI，或者將其設定為在未來日期棄用。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[].DeprecationTime \
    --output text
```

以下為範例輸出。

```
2025-05-01T00:00:00.000Z
```

------
#### [ PowerShell ]

**如需列出帳戶的棄用 AMI**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
(Get-EC2Image -Owner self | Where-Object {$_.DeprecationTime -ne $null}).ImageId
```

以下為範例輸出。

```
ami-0abcdef1234567890
```

**描述 AMI 的取代日期**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。若輸出中不存在 `DeprecationTime`，不會棄用 AMI，或者將其設定為在未來日期棄用。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).DeprecationTime
```

以下為範例輸出。

```
2025-05-01T00:00:00.000Z
```

------

## 取消 AMI 棄用
<a name="cancel-deprecate-ami"></a>

您可取消棄用 AMI，此操作會移除棄用日期與時間。您必須是 AMI 擁有者才能執行此程序。

------
#### [ Console ]

**取消取代 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中，選擇 **AMI**。

1. 從篩選條件列中，選擇 **Owned by me** (由我擁有)。

1. 選取 AMI，然後依序選取 **Actions** (動作)、**Manage AMI Deprecation** (管理 AMI 取代)。您可以選取多個 AMI，一次取消多個 AMI 的取代。

1. 清除**啟用**核取方塊，然後選擇**儲存**。

------
#### [ AWS CLI ]

**取消棄用 AMI**  
請使用下面的 [disable-image-deprecation](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-deprecation.html) 命令。

```
aws ec2 disable-image-deprecation --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**取消棄用 AMI**  
使用 [Disable-EC2ImageDeprecation](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageDeprecation.html) cmdlet。

```
Disable-EC2ImageDeprecation -ImageId ami-0abcdef1234567890
```

------

# 停用 Amazon EC2 AMI
<a name="disable-an-ami"></a>

可以停用 AMI 以防止其用於執行個體啟動。無法從已停用的 AMI 中啟動新執行個體。可以重新啟用已停用的 AMI，以便在執行個體啟動時再次使用它。

可以同時停用私有和公有 AMI。

如需減少很少使用但需長期保留的停用 EBS 支援的 AMI 的儲存費用，您可封存其關聯的快照。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[檔案 Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)。

**Topics**
+ [AMI 停用運作方式](#how-disable-ami-works)
+ [成本](#ami-disable-costs)
+ [先決條件](#ami-disable-prerequisites)
+ [所需的 IAM 許可](#ami-disable-iam-permissions)
+ [停用 AMI](#disable-ami)
+ [描述已停用的 AMI](#describe-disabled-ami)
+ [重新啟用已停用的 AMI](#re-enable-a-disabled-ami)

## AMI 停用運作方式
<a name="how-disable-ami-works"></a>

**警告**  
停用 AMI 會移除其所有啟動權限。

**停用 AMI 時：**
+ AMI 的狀態會變更為 `disabled`。
+ 無法共用已停用的 AMI。如果 AMI 為公有或先前被共用，則會將其設為私有。如果 AMI 與 AWS 帳戶、組織或組織單位共用，則會失去對已停用 AMI 的存取權。
+ 依預設，已停用的 AMI 不會出現在 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 呼叫中。
+ 已停用的 AMI 不會出現在**我所擁有**主控台篩選條件下。若要尋找已停用的 AMI，請使用**已停用的映像**主控台篩選條件。
+ 對於 EC2 主控台中的執行個體啟動，不可選擇已停用的 AMI。例如，在啟動執行個體精靈中或建立啟動範本時，已停用的 AMI 不會出現在 AMI 目錄中。
+ 啟動服務 (例如啟動範本和 Auto Scaling 群組) 可以繼續參考已停用的 AMI。從已停用的 AMI 中進行後續執行個體啟動將會失敗，因此建議您更新啟動範本和 Auto Scaling 群組以僅參考可用的 AMI。
+ 先前使用隨後被停用的 AMI 來啟動的 EC2 執行個體不會受到影響，而且可以停止、啟動和重新啟動。
+ 您無法刪除與已停用的 AMI 相關聯的快照。嘗試刪除關聯的快照會導致`snapshot is currently in use`錯誤。

**重新啟用 AMI 時：**
+ AMI 的狀態會變更為 `available`，而且可用來啟動執行個體。
+ 可以共用 AMI。
+ 由於停用 AMI 而無法對其進行存取的AWS 帳戶、組織和組織單位不會自動重新獲得存取權，但可以再次與他們共用 AMI。

## 成本
<a name="ami-disable-costs"></a>

當您停用 AMI 時，不會刪除 AMI。如果 AMI 是 EBS 後端 AMI，您會繼續支付 AMI 的 EBS 快照。如果想要保留 AMI，可以透過封存快照來降低儲存成本。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[檔案 Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)。如果不想保留 AMI 及其快照，必須取消註冊 AMI 並刪除快照。如需詳細資訊，請參閱[取消註冊 AMI](deregister-ami.md)。

## 先決條件
<a name="ami-disable-prerequisites"></a>

若要停用或重新啟用 AMI，您必須是 AMI 的擁有者。

## 所需的 IAM 許可
<a name="ami-disable-iam-permissions"></a>

若要停用和重新啟用 AMI，您必須具有下列 IAM 許可：
+ `ec2:DisableImage`
+ `ec2:EnableImage`

## 停用 AMI
<a name="disable-ami"></a>

您可以使用 EC2 主控台或 AWS Command Line Interface () 停用 AMI AWS CLI。您必須是 AMI 擁有者才能執行此程序。

------
#### [ Console ]

**停用 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中選擇 **AMI**。

1. 從篩選條件列中，選擇 **Owned by me** (由我擁有)。

1. 選取 AMI，然後選擇**動作**、**停用 AMI**。可以選取多個 AMI，以便一次停用。

1. 在**停用 AMI** 視窗中，選擇**停用 AMI**。

------
#### [ AWS CLI ]

**停用 AMI**  
使用下列 [https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image.html) 命令。

```
aws ec2 disable-image --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**停用 AMI**  
使用 [Disable-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2Image.html) cmdlet。

```
Disable-EC2Image -ImageId ami-0abcdef1234567890
```

------

## 描述已停用的 AMI
<a name="describe-disabled-ami"></a>

可以使用 EC2 主控台或 AWS CLI來檢視已停用的 AMI。

您必須是 AMI 擁有者，才能檢視已停用的 AMI。因為已停用的 AMI 會設為私有，如果您不是擁有者，就無法檢視已停用的 AMI。

------
#### [ Console ]

**若要檢視已停用的 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中選擇 **AMI**。

1. 從篩選列中，選擇**已停用的映像**。  
![\[已停用映像篩選條件。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-filter-by-disabled-images.png)

------
#### [ AWS CLI ]

依預設，當您描述所有 AMI 時，停用的 AMI 不會包括在結果中。如需在結果中包括停用的 AMI，請指定 `--include-disabled` 選項。若已停用 AMI，AMI 的 `State` 欄位為 `disabled`。

**如需在為帳戶描述所有 AMI 時包括已停用的 AMI**  
使用下列 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --owners 123456789012 \
    --include-disabled
```

**如需列出帳戶的停用 AMI**  
使用下列 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --owners self \
    --include-disabled \
    --filters Name=state,Values=disabled \
    --query Images[].ImageId \
    --output text
```

以下為範例輸出。

```
ami-0abcdef1234567890
```

**如需描述 AMI 的狀態**  
使用下列 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。若輸出中不存在 `DeprecationTime`，不會棄用 AMI，或者將其設定為在未來日期棄用。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[].State \
    --output text
```

以下為範例輸出。

```
disabled
```

------
#### [ PowerShell ]

依預設，當您描述所有 AMI 時，停用的 AMI 不會包括在結果中。若要在結果中包含已停用的 AMI，請指定 `-IncludeDisabled` 參數。若已停用 AMI，AMI 的 `State` 欄位為 `disabled`。

**如需列出帳戶的停用 AMI**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
(Get-EC2Image `
    -Owner self `
    -IncludeDisabled $true | Where-Object {$_.State -eq "disabled"}).ImageId
```

以下為範例輸出。

```
ami-0abcdef1234567890
```

**如需描述 AMI 的狀態**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).State.Value
```

以下為範例輸出。

```
disabled
```

------

## 重新啟用已停用的 AMI
<a name="re-enable-a-disabled-ami"></a>

可以重新啟用已停用的 AMI。您必須是 AMI 擁有者才能執行此程序。

------
#### [ Console ]

**重新啟用已停用的 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中選擇 **AMI**。

1. 從篩選列中，選擇**已停用的映像**。

1. 選取 AMI，然後選擇**動作**、**啟用 AMI**。可以選取多個 AMI，一次重新啟用多個 AMI。

1. 在**啟用 AMI** 視窗中，選擇**啟用**。

------
#### [ AWS CLI ]

**重新啟用已停用的 AMI**  
使用下列 [https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image.html) 命令。

```
aws ec2 enable-image --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**重新啟用已停用的 AMI**  
使用 [Enable-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2Image.html) cmdlet。

```
Enable-EC2Image -ImageId ami-0abcdef1234567890
```

------

# 取消註冊 Amazon EC2 AMI
<a name="deregister-ami"></a>

當您取消註冊 AMI 時，Amazon EC2 會將其永久刪除。在您取消註冊 AMI 之後，您便無法用它來啟動新的執行個體。您可考慮在完成使用之後取消註冊 AMI。

為了防止意外或惡意取消註冊 AMI，您可以開啟[取消註冊保護](ami-deregistration-protection.md)。如果您意外登出 EBS 支援的 AMI，則只有在永久刪除之前的允許時間內復原，才可以使用[資源回收筒](https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin.html)來復原。

若取消註冊 AMI，您可選擇同時刪除其關聯的快照。然而，若快照與多個 AMI 關聯，儘管指定要將其刪除，亦不會刪除，但仍會取消註冊 AMI。任何未刪除快照皆會持續產生儲存費用。

取消註冊 AMI 不會影響從 AMI 啟動的任何執行個體。您可以繼續使用這些執行個體。依預設，取消註冊 AMI 亦不會影響 AMI 建立過程之中建立的任何快照。您將需要為這些執行個體繼續支付使用成本，以及快照的儲存成本。因此，為了避免產生不必要的成本，我們建議您終止所有執行個體並刪除不需要的快照。在取消註冊期間，您可自動刪除快照；或在取消註冊之後，手動刪除快照。如需詳細資訊，請參閱[避免因未使用的資源而產生成本](#delete-unneeded-resources-to-avoid-unnecessary-costs)。

對於從後續取消註冊的 AMI 啟動的執行個體，您仍然可以使用 `describe-instance-image-metadata` AWS CLI 命令檢視一些有關 AMI 的高階資訊。若要了解詳細資訊，請參閱 [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html)。

**Topics**
+ [考量事項](#deregister-ami-considerations)
+ [取消註冊 AMI](#deregister-an-ami)
+ [避免因未使用的資源而產生成本](#delete-unneeded-resources-to-avoid-unnecessary-costs)
+ [保護 Amazon EC2 AMI 免遭註銷](ami-deregistration-protection.md)

## 考量事項
<a name="deregister-ami-considerations"></a>
+ 您無法取消註冊不是您帳戶擁有的 AMI。
+ 您無法使用 Amazon EC2 取消註冊由 AWS Backup 服務管理的 AMI。反之，請使用 AWS Backup 刪除備份文件庫中對應的復原點。若要了解詳細資訊，請參閱 *AWS Backup 開發人員指南中的*[刪除備份](https://docs.aws.amazon.com/aws-backup/latest/devguide/deleting-backups.html)。

## 取消註冊 AMI
<a name="deregister-an-ami"></a>

您可取消註冊 EBS 支援的 AMI 及 Amazon S3 支援的 AMI。若是 EBS 支援的 AMI，您可選擇同時刪除關聯的快照。然後，若快照與其他 AMI 關聯，儘管指定要將其刪除，亦不會刪除。

------
#### [ Console ]

**取消註冊 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在篩選列中，選擇**我擁有**以列出可用的 AMI，或選擇**已停用的影像**以列出已停用的 AMI。

1. 選取要取消註冊的 AMI。

1. 選擇 **Actions** (動作)、**Deregister AMI** (取消註冊 AMI)。

1. (選用) 如需在取消註冊期間刪除關聯的快照，勾選**刪除關聯快照**核取方塊。
**注意**  
若快照與其他 AMI 關聯，儘管勾選核取方塊，亦不會將其刪除。

1. 選擇**取消註冊 AMI**。

   主控台從清單移除 AMI 可能需要幾分鐘的時間。選擇 **Refresh (重新整理)** 以重新整理狀態。

------
#### [ AWS CLI ]

**取消註冊 AMI**  
請使用下面的 [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) 命令。

```
aws ec2 deregister-image --image-id ami-0abcdef1234567890
```

**取消註冊 AMI 及刪除其關聯的快照**  
請使用下面的 [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) 命令及指定 `--delete-associated-snapshots` 參數。請注意，若快照與其他 AMI 關聯，儘管指定了此參數，亦不會將其刪除。

```
aws ec2 deregister-image \
    --image-id ami-0abcdef1234567890 \
    --delete-associated-snapshots
```

------
#### [ PowerShell ]

**取消註冊 AMI**  
使用 [Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) cmdlet。

```
Unregister-EC2Image -ImageId ami-0abcdef1234567890
```

**取消註冊 AMI 及刪除其關聯的快照**  
請使用 [Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) cmdlet 並指定 `-DeleteAssociatedSnapshots` 參數。請注意，若快照與其他 AMI 關聯，儘管指定了此參數，亦不會將其刪除。

```
Unregister-EC2Image `
    -ImageId ami-0abcdef1234567890 `
    -DeleteAssociatedSnapshots
```

------

## 避免因未使用的資源而產生成本
<a name="delete-unneeded-resources-to-avoid-unnecessary-costs"></a>

依預設，取消註冊 AMI 不會刪除與 AMI 關聯的全部資源。這些資源包括 EBS 支援的 AMI 快照以及 Amazon S3 中 Amazon S3 支援的檔案。當您取消註冊 AMI 時，您也不會終止或停止從 AMI 啟動的任何執行個體。

您將繼續產生儲存快照與檔案的成本，並且將產生任何執行個體的成本。

為了避免產生此類不必要的費用，我們建議刪除任何您不需要的資源。

**EBS 支援的 AMI**
+ 取消註冊 AMI 的同時刪除關聯的快照。如需詳細資訊，請參閱[取消註冊 AMI](#deregister-an-ami)。
+ 若取消註冊 AMI 但不刪除其關聯的快照，您可手動[刪除快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-snapshot.html#ebs-delete-snapshot)。在 AMI 建立期間，建立的執行個體根磁碟區快照具有以下說明格式：

  ```
  Created by CreateImage(i-1234567890abcdef0) for ami-0abcdef1234567890
  ```
+ 若您不再需要透過 AMI 啟動的執行個體，可[停止](Stop_Start.md#starting-stopping-instances)或[終止](terminating-instances.md#terminating-instances-console)這些執行個體。如需列出執行個體，依 AMI 的 ID 進行篩選。

**Amazon S3 支援的 AMI**
+ 使用 [ec2-delete-bundle](ami-tools-commands.md#ami-delete-bundle) (AMI 工具) 命令刪除 Amazon S3 中的套件。
+ 若刪除套件之後 Amazon S3 儲存貯體為空白，且您不再進一步使用該儲存貯體，可[刪除儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。
+ 若您不再需要透過 AMI 啟動的執行個體，可[終止](terminating-instances.md#terminating-instances-console)這些執行個體。如需列出執行個體，依 AMI 的 ID 進行篩選。

# 保護 Amazon EC2 AMI 免遭註銷
<a name="ami-deregistration-protection"></a>

您可以在 AMI 上開啟*註銷保護*以防止意外或惡意刪除。當您開啟註銷保護時，任何使用者都無法註銷 AMI，無論其 IAM 權限為何。如果您想要註銷 AMI，您必須先關閉其註銷保護。

當您在 AMI 上開啟註銷保護時，您可以選擇包含 24 小時冷卻時間。此冷卻時間是您關閉註銷保護之後，註銷保護仍然有效的時間。在此冷卻時間，無法註銷 AMI。當冷卻時間結束，便可以註銷 AMI。

預設情況下，所有現有與新 AMI 的註銷保護均處於關閉狀態。

## 開啟註銷保護
<a name="enable-deregistration-protection"></a>

使用下列程序來開啟註銷保護。

------
#### [ Console ]

**如需開啟取消註冊保護**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在篩選列中，選擇**我擁有**以列出可用的 AMI，或選擇**已停用的影像**以列出已停用的 AMI。

1. 選擇要開啟註銷保護的 AMI，然後選擇**執行**，**管理 AMI 註銷保護**。

1. 在**管理 AMI 註銷保護**對話方塊中，您可以開啟有或沒有冷卻時間的註銷保護。請選擇下列其中一個選項：
   + **啟用 24 小時冷卻時間** — 具有冷卻時間，當註銷保護關閉時，AMI 在 24 小時內無法註銷。
   + **無需冷卻即可啟用** — 無冷卻時間，當註銷保護關閉，AMI 可以立即註銷。

1. 選擇**儲存**。

------
#### [ AWS CLI ]

**如需開啟取消註冊保護**  
請使用 [enable-image-deregistration-protection](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-deregistration-protection.html) 命令。如需啟用包括 `--with-cooldown` 選項在內的選用冷卻時間。

```
aws ec2 enable-image-deregistration-protection \
    --image-id ami-0abcdef1234567890 \
    --with-cooldown
```

------
#### [ PowerShell ]

**如需開啟取消註冊保護**  
使用 [Enable-EC2ImageDeregistrationProtection](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageDeregistrationProtection.html) cmdlet。如需啟用選用冷卻時間，請設定 `-WithCooldown` 參數為 `true`。

```
Enable-EC2ImageDeregistrationProtection `
    -ImageId ami-0abcdef1234567890 `
    -WithCooldown $true
```

------

## 關閉註銷保護
<a name="disable-deregistration-protection"></a>

使用下列程序來關閉註銷保護。

如果您在開啟 AMI 註銷保護時選擇包含 24 小時冷卻時間，那麼當您關閉註銷保護時，您將無法立即註銷 AMI。冷卻時間是 24 小時的時間段，在此期間註銷保護即使在關閉之後仍然有效。在此冷卻時間，無法註銷 AMI。當冷卻時間結束，便可註銷 AMI。

------
#### [ Console ]

**如需關閉取消註冊保護**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在篩選列中，選擇**我擁有**以列出可用的 AMI，或選擇**已停用的影像**以列出已停用的 AMI。

1. 選擇要關閉註銷保護的 AMI，然後選擇**執行**，**管理 AMI 註銷保護**。

1. 在**管理 AMI 註銷保護**對話方塊中，選擇**停用**。

1. 選擇**儲存**。

------
#### [ AWS CLI ]

**如需關閉取消註冊保護**  
請使用 [disable-image-deregistration-protection](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-deregistration-protection.html) 命令。

```
aws ec2 disable-image-deregistration-protection --image-id ami-0abcdef1234567890
```

------
#### [ PowerShell ]

**如需關閉取消註冊保護**  
使用 [Disable-EC2ImageDeregistrationProtection](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageDeregistrationProtection.html) cmdlet。

```
Disable-EC2ImageDeregistrationProtection -ImageId ami-0abcdef1234567890
```

------

# 使用 Amazon EC2 開機模式執行個體啟動行為
<a name="ami-boot"></a>

電腦開機時，第一個執行的軟體會負責初始化平台，並提供作業系統執行平台特定作業的介面。

在 Amazon EC2 中，支援兩種開機模式軟體：整合可延伸韌體介面 (UEFI) 和 Legacy BIOS。

**AMI 上可能的開機模式參數**  
AMI 可以有下列其中一個開機模式參數值：`uefi`、`legacy-bios` 或 `uefi-preferred`。AMI 開機模式參數為選用。針對沒有開機模式參數的 AMI，從這些 AMI 啟動的執行個體會使用執行個體類型的預設開機模式值。

**AMI 開機模式參數的用途**  
AMI 開機模式參數會向 Amazon EC2 發出訊號，這是在啟動執行個體時要使用的開機模式。當開機模式參數設定為 `uefi` 時，EC2 會嘗試在 UEFI 上啟動執行個體。如果作業系統未設定為支援 UEFI，則執行個體啟動將會失敗。

**UEFI 偏好的開機模式參數**  
您可以使用 `uefi-preferred` 開機模式參數來建立同時支援 UEFI 和 Legacy BIOS 的 AMI。當開機模式參數設定為 `uefi-preferred`，並且如果執行個體類型支援 UEFI，則會在 UEFI 上啟動執行個體。如果執行個體類型不支援 UEFI，則會在 Legacy BIOS 上啟動執行個體。

**警告**  
某些功能 (例如 UEFI 安全開機) 僅適用於透過 UEFI 開機的執行個體。當您將 `uefi-preferred` AMI 開機模式參數與不支援 UEFI 的執行個體類型搭配使用時，執行個體會以 Legacy BIOS 的形式啟動，而且會停用與 UEFI 相關的功能。如果您依賴 UEFI 相關功能的可用性，則請將 AMI 開機模式參數設定為 `uefi`。

**執行個體類型的預設開機模式**
+ Graviton 執行個體類型︰UEFI
+ Intel 和 AMD 執行個體類型：Legacy BIOS

**區域支援**  
在 Wavelength 區域或不支援 UEFI 啟動。

**Topics**
+ [在 UEFI 開機模式啟動 EC2 執行個體的需求](launch-instance-boot-mode.md)
+ [確定 Amazon EC2 AMI 的開機模式參數](ami-boot-mode.md)
+ [確定 EC2 執行個體類型的支援開機模式](instance-type-boot-mode.md)
+ [確定 EC2 執行個體的開機模式](instance-boot-mode.md)
+ [確定 EC2 執行個體作業系統的開機模式](os-boot-mode.md)
+ [設定 Amazon EC2 AMI 的開機模式](set-ami-boot-mode.md)
+ [Amazon EC2 執行個體的 UEFI 變數](uefi-variables.md)
+ [Amazon EC2 執行個體的 UEFI 安全開機](uefi-secure-boot.md)

# 在 UEFI 開機模式啟動 EC2 執行個體的需求
<a name="launch-instance-boot-mode"></a>

執行個體的開機模式取決於 AMI 的組態、其中包含的作業系統以及執行個體類型。若要在 UEFI 開機模式啟動執行個體，您必須符合下列需求。

**AMI**  
必須為 UEFI 設定 AMI，如下所示：  
+ **作業系統** - AMI 中包含的作業系統必須設定為使用 UEFI；否則，執行個體啟動將會失敗。如需詳細資訊，請參閱[確定 EC2 執行個體作業系統的開機模式](os-boot-mode.md)。
+ **AMI 開機模式參數** – AMI 的開機模式參數必須設定為 `uefi` 或 `uefi-preferred`。如需詳細資訊，請參閱[確定 Amazon EC2 AMI 的開機模式參數](ami-boot-mode.md)。
**Linux** - 下列 Linux AMI 支援 UEFI：  
+ Amazon Linux 2023
+ Amazon Linux 2 (僅限 Graviton 執行個體類型)
對於其他 Linux AMI，您必須[設定 AMI](set-ami-boot-mode.md)，透過 [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/) 匯入 AMI，或透過 [CloudEndure](https://docs.cloudendure.com/) 匯入 AMI。  
**Windows** – 下列 Windows AMI 支援 UEFI：  
+ Windows\$1Server-2025-\$1 (以 `BIOS-` 為名稱字首的 AMI 除外)
+ TPM-Windows\$1Server-2022-English-Full-Base
+ TPM-Windows\$1Server-2022-English-Core-Base
+ TPM-Windows\$1Server-2019-English-Full-Base
+ TPM-Windows\$1Server-2019-English-Core-Base
+ TPM-Windows\$1Server-2016-English-Full-Base
+ TPM-Windows\$1Server-2016-English-Core-Base

**執行個體類型**  
在 AWS Nitro 系統上建置的所有執行個體都支援 UEFI 和舊版 BIOS，但以下除外：裸機執行個體、DL1, G4ad, P4、u-3tb1、u-6tb1、u-9tb1、u-12tb1、u-18tb1、u-24tb1 和 VT1。如需詳細資訊，請參閱[確定 EC2 執行個體類型的支援開機模式](instance-type-boot-mode.md)。

下表顯示執行個體的開機模式 (由**產生的執行個體開機模式**資料欄表示) 由 AMI 的開機模式參數 (資料欄 1)、AMI 所包含之作業系統的開機模式組態 (資料欄 2) 以及執行個體類型的開機模式支援 (資料欄 3) 的組合決定。


| AMI 開機模式參數 | 作業系統開機模式組態 | 執行個體類型開機模式支援 | 產生的執行個體開機模式 | 
| --- | --- | --- | --- | 
| UEFI | UEFI | UEFI | UEFI | 
| Legacy BIOS | Legacy BIOS | Legacy BIOS | Legacy BIOS | 
| UEFI Preferred | UEFI | UEFI | UEFI | 
| UEFI Preferred | UEFI | UEFI 與 Legacy BIOS | UEFI | 
| UEFI Preferred | Legacy BIOS | Legacy BIOS | Legacy BIOS | 
| UEFI Preferred | Legacy BIOS | UEFI 與 Legacy BIOS | Legacy BIOS | 
| 未指定開機模式 - ARM | UEFI | UEFI | UEFI | 
| 未指定開機模式 - x86 | Legacy BIOS | UEFI 與 Legacy BIOS | Legacy BIOS | 

# 確定 Amazon EC2 AMI 的開機模式參數
<a name="ami-boot-mode"></a>

AMI 開機模式參數為選用。AMI 可以有下列其中一個開機模式參數值：`uefi`、`legacy-bios` 或 `uefi-preferred`。

有些 AMI 沒有開機模式參數。當 AMI 沒有開機模式參數時，從 AMI 啟動的執行個體會使用執行個體類型的預設值，即 Graviton 上的 `uefi` 以及 Intel 和 AMD 執行個體類型上的 `legacy-bios`。

------
#### [ Console ]

**如需確定 AMI 的開機模式參數**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選取 **AMI**，然後選取該 AMI。

1. 檢查**開機模式**欄位。
   + 顯示 **uefi** 值表示 AMI 支援 UEFI。
   + 顯示 **uefi-preferred** 值表示 AMI 支援 UEFI 和 Legacy BIOS。
   + 如果未顯示任何值，表示透過 AMI 啟動的執行個體會使用其執行個體類型的預設值。

**如需啟動執行個體時確定 AMI 的開機模式參數**  
使用啟動執行個體精靈啟動執行個體時，在選取 AMI 的步驟中檢查 **Boot mode** (開機模式) 欄位。如需詳細資訊，請參閱[應用程式和作業系統映像 (Amazon Machine Image)](ec2-instance-launch-parameters.md#liw-ami)。

------
#### [ AWS CLI ]

**如需確定 AMI 的開機模式參數**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令確定 AMI 的開機模式。

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-id ami-0abcdef1234567890 \
    --query Images[].BootMode \
    --output text
```

以下為範例輸出。

```
uefi
```

在輸出中，`uefi` 的值表示 AMI 支援 UEFI。`uefi-preferred` 的值表示 AMI 支援 UEFI 和 Legacy BIOS。如果未顯示任何值，表示透過 AMI 啟動的執行個體會使用其執行個體類型的預設值。

------
#### [ PowerShell ]

**如需確定 AMI 的開機模式參數**  
請使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet 來確定 AMI 的啟動模式。

```
Get-EC2Image -Region us-east-1 `
    -ImageId ami-0abcdef1234567890 | Format-List Name, BootMode, TpmSupport
```

以下為範例輸出。

```
Name       : TPM-Windows_Server-2016-English-Full-Base-2023.05.10
BootMode   : uefi
TpmSupport : v2.0
```

在輸出中，`BootMode` 的值會指示 AMI 的啟動模式。`uefi` 的值表示 AMI 支援 UEFI。`uefi-preferred` 的值表示 AMI 支援 UEFI 和 Legacy BIOS。如果未顯示任何值，表示透過 AMI 啟動的執行個體會使用其執行個體類型的預設值。

------

# 確定 EC2 執行個體類型的支援開機模式
<a name="instance-type-boot-mode"></a>

您可確定執行個體類型的支援啟動模式。

Amazon EC2 主控台不顯示執行個體類型的支援啟動模式。

------
#### [ AWS CLI ]

使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 命令確定執行個體類型的支援開機模式。`--query` 參數會篩選輸出，只傳回支援的開機模式。

下列範例顯示了可同時支援 UEFI 和舊式 BIOS 啟動模式的指定執行個體類型。

```
aws ec2 describe-instance-types \
    --instance-types m5.2xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

以下為範例輸出。

```
[
    [
        "legacy-bios",
        "uefi"
    ]
]
```

下列範例顯示 `t2.xlarge` 僅支援 Legacy BIOS。

```
aws ec2 describe-instance-types \
    --instance-types t2.xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

以下為範例輸出。

```
[
    [
        "legacy-bios"
    ]
]
```

------
#### [ PowerShell ]

使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet 來確定執行個體類型的支援啟動模式。

下列範例顯示 `m5.2xlarge` 同時支援 UEFI 和 Legacy BIOS 開機模式。

```
Get-EC2InstanceType -InstanceType m5.2xlarge | Format-List InstanceType, SupportedBootModes
```

以下為範例輸出。

```
InstanceType       : m5.2xlarge
SupportedBootModes : {legacy-bios, uefi}
```

下列範例顯示 `t2.xlarge` 僅支援 Legacy BIOS。

```
Get-EC2InstanceType -InstanceType t2.xlarge | Format-List InstanceType, SupportedBootModes
```

以下為範例輸出。

```
InstanceType       : t2.xlarge
SupportedBootModes : {legacy-bios}
```

------

**確定支援 UEFI 的執行個體類型**  
您可確定支援 UEFI 的執行個體類型 Amazon EC2 主控台不顯示執行個體類型的 UEFI 支援。

------
#### [ AWS CLI ]

可用的執行個體類型因 AWS 區域而異。如需查看區域中支援 UEFI 的可用執行個體類型，請使用 [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 命令。包含 `--filters` 參數以將結果範圍限定為支援 UEFI 的執行個體類型，以及包含 `--query` 參數以將輸出範圍限定為 `InstanceType` 的值。

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi \
    --query "InstanceTypes[*].[InstanceType]" --output text | sort
```

------
#### [ PowerShell ]

可用的執行個體類型因 AWS 區域而異。如需查看區域中支援 UEFI 的可用執行個體類型，請使用 [Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet。

```
Get-EC2InstanceType | `
	Where-Object {$_.SupportedBootModes -Contains "uefi"} | `
	Sort-Object InstanceType | `
	Format-Table InstanceType -GroupBy CurrentGeneration
```

------

**若要確定支援 UEFI 安全開機並保留非揮發性變數的執行個體類型**  
裸機執行個體不支援 UEFI 安全開機和非揮發性變數，因此這些範例將其排除在輸出之外。如需有關 UEFI 安全開機的資訊，請參閱 [Amazon EC2 執行個體的 UEFI 安全開機](uefi-secure-boot.md)。

------
#### [ AWS CLI ]

請使用 [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 命令，然後從輸出中排除裸機執行個體。

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi Name=bare-metal,Values=false \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
```

------
#### [ PowerShell ]

請使用 [Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet，然後從輸出中排除裸機執行個體。

```
Get-EC2InstanceType | `
    Where-Object { `
        $_.SupportedBootModes -Contains "uefi" -and `
        $_.BareMetal -eq $False
        } | `
    Sort-Object InstanceType  | `
    Format-Table InstanceType, SupportedBootModes, BareMetal, `
        @{Name="SupportedArchitectures"; Expression={$_.ProcessorInfo.SupportedArchitectures}}
```

------

# 確定 EC2 執行個體的開機模式
<a name="instance-boot-mode"></a>

執行個體的開機模式會顯示在 Amazon EC2 主控台的**開機模式**欄位中，並透過 AWS CLI中的 `currentInstanceBootMode` 參數顯示。

啟動執行個體時，其啟動模式參數的值取決於用於將其啟動的 AMI 開機模式參數的值，如下所示：
+ 具有 `uefi` 開機模式參數的 AMI 會建立 `currentInstanceBootMode` 參數為 `uefi` 的執行個體。
+ 具有 `legacy-bios` 開機模式參數的 AMI 會建立 `currentInstanceBootMode` 參數為 ` legacy-bios` 的執行個體。
+ 如果執行個體類型支援 UEFI，則開機模式參數為 `uefi-preferred` 的 AMI 會建立 `currentInstanceBootMode` 參數為 `uefi` 的執行個體；否則，其會建立 `currentInstanceBootMode` 參數為 `legacy-bios` 的執行個體。
+ 沒有開機模式參數值的 AMI 會建立具有 `currentInstanceBootMode` 參數值的執行個體，該參數值取決於 AMI 架構是 ARM 還是 x86，以及支援的執行個體類型開機模式。Graviton 執行個體類型上的預設開機模式為 `uefi`，Intel 和 AMD 執行個體類型上的預設開機模式為 `legacy-bios`。

------
#### [ Console ]

**如需確定執行個體的啟動模式**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選取 **Instances (執行個體)**，然後選取您的執行個體。

1. 在 **Details** (詳細資訊) 標籤上，檢查 **Boot mode** (開機模式) 欄位。

------
#### [ AWS CLI ]

**如需確定執行個體的啟動模式**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令確定執行個體的開機模式。您也可以判斷用來建立執行個體之 AMI 的開機模式。

```
aws ec2 describe-instances \
    --region us-east-1 \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].BootMode \
    --output text
```

以下為範例輸出。

```
uefi
```

------
#### [ PowerShell ]

**如需確定執行個體的啟動模式**  
請使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet 來確定執行個體的開機模式。您也可以判斷用來建立執行個體之 AMI 的開機模式。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | Format-List BootMode, CurrentInstanceBootMode, InstanceType, ImageId
```

以下為範例輸出。

```
BootMode                : uefi
CurrentInstanceBootMode : uefi
InstanceType            : c5a.large
ImageId                 : ami-0abcdef1234567890
```

------

# 確定 EC2 執行個體作業系統的開機模式
<a name="os-boot-mode"></a>

AMI 的開機模式會引導 Amazon EC2 使用哪種開機模式來啟動執行個體。若要檢視執行個體的作業系統是否已針對 UEFI 進行設定，您必須使用 SSH (Linux 執行個體) 或 RDP (Windows 執行個體) 連線至您的執行個體。

請遵循於執行個體作業系統的指示。

## Linux
<a name="os-boot-mode-linux"></a>

**確定執行個體作業系統的開機模式**

1. [使用 SSH 連線至您的 Linux 執行個體](connect-linux-inst-ssh.md)。

1. 若要檢視作業系統的開機模式，請嘗試下列其中一個動作：
   + 執行下列命令。

     ```
     [ec2-user ~]$ sudo /usr/sbin/efibootmgr
     ```

     在 UEFI 開機模式下啟動的執行個體預期輸出

     ```
     BootCurrent: 0001
     Timeout: 0 seconds
     BootOrder: 0000,0001
     Boot0000* UiApp
     Boot0001* UEFI Amazon Elastic Block Store vol-xyz
     ```
   + 執行下列命令，以驗證 `/sys/firmware/efi` 目錄是否存在。只有在執行個體使用 UEFI 開機時，才會存在此目錄。如果此目錄不存在，命令會傳回 `Legacy BIOS Boot Detected`。

     ```
     [ec2-user ~]$ [ -d /sys/firmware/efi ] && echo "UEFI Boot Detected" || echo "Legacy BIOS Boot Detected"
     ```

     在 UEFI 開機模式下啟動的執行個體預期輸出

     ```
     UEFI Boot Detected
     ```

     在 Legacy BIOS 開機模式下啟動的執行個體預期輸出

     ```
     Legacy BIOS Boot Detected
     ```
   + 執行下列命令，以驗證 EFI 是否出現在 `dmesg` 輸出中。

     ```
     [ec2-user ~]$ dmesg | grep -i "EFI"
     ```

     在 UEFI 開機模式下啟動的執行個體預期輸出

     ```
     [    0.000000] efi: Getting EFI parameters from FDT:
     [    0.000000] efi: EFI v2.70 by EDK II
     ```

## Windows
<a name="os-boot-mode-windows"></a>

**確定執行個體作業系統的開機模式**

1. [使用 RDP 連線至您的 Windows 執行個體](connecting_to_windows_instance.md)。

1. 請移至 **System Information** (系統資訊)，然後檢查 **BIOS Mode** (BIOS 模式) 列。  
![\[顯示所選「BIOS 模式」列的「系統資訊」視窗。「BIOS 模式」的值為 Legacy。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/BIOS-mode-win.png)

# 設定 Amazon EC2 AMI 的開機模式
<a name="set-ami-boot-mode"></a>

AMI 預設會繼承用於建立 AMI 的 EC2 執行個體的啟動模式。例如，若透過舊式 BIOS 上執行的 EC2 執行個體來建立 AMI，新 AMI 的啟動模式為 `legacy-bios`。若透過使用啟動模式 `uefi-preferred` 的 EC2 執行個體來建立 AMI，新 AMI 的啟動模式為 `uefi-preferred`。

當您註冊 AMI 時，可將 AMI 的啟動模式設定為 `uefi`、`legacy-bios` 或 `uefi-preferred`。

當 AMI 開機模式設為 `uefi-preferred` 時，執行個體會以下列方式開機：
+ 對於同時支援 UEFI 和 Legacy BIOS (例如 `m5.large`) 的執行個體類型，執行個體會使用 UEFI 開機。
+ 對於僅支援 Legacy BIOS (例如 `m4.large`) 的執行個體類型，執行個體會使用 Legacy BIOS 開機。

如果您將 AMI 開機模式設定為 `uefi-preferred`，則作業系統必須支援 UEFI 和 Legacy BIOS 開機功能。

若要將現有的 Legacy BIOS 型執行個體轉換為 UEFI，或將現有的 UEFI 型執行個體轉換為 Legacy BIOS，您必須先修改執行個體的磁碟區和作業系統，以支援選取的開機模式。然後，建立磁碟區的快照。最後，透過快照建立 AMI

**考量事項**
+ 設定 AMI 開機模式參數並不會自動針對指定的開機模式設定作業系統。您必須先對執行個體的磁碟區和作業系統進行適當的修改，以支援使用選取的啟動模式來啟動。否則，產生的 AMI 將不可使用。例如，如果您要將 Legacy BIOS Windows 執行個體轉換為 UEFI，可以使用 Microsoft 的 [MBR2GPT](https://learn.microsoft.com/en-us/windows/deployment/mbr-to-gpt) 工具，將系統磁碟從 MBR 轉換為 GPT。所需的修改視作業系統而異。如需詳細資訊，請參閱作業系統的手冊。
+ 您不能使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 命令或 [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet 來建立同時支援 [NitroTPM](nitrotpm.md) 和 UEFI Preferred 的 AMI。
+ 某些功能 (例如 UEFI 安全開機) 僅適用於透過 UEFI 開機的執行個體。當您將 `uefi-preferred` AMI 開機模式參數與不支援 UEFI 的執行個體類型搭配使用時，執行個體會以 Legacy BIOS 的形式啟動，而且會停用與 UEFI 相關的功能。如果您依賴 UEFI 相關功能的可用性，則請將 AMI 開機模式參數設定為 `uefi`。

------
#### [ AWS CLI ]

**如需設定 AMI 的啟動模式**

1. 對執行個體的磁碟區和作業系統進行適當的修改，以支援透過選取的開機模式開機。所需的修改視作業系統而異。如需詳細資訊，請參閱作業系統的手冊。
**警告**  
如果您不執行此步驟，則 AMI 將無法使用。

1. 若要尋找執行個體的磁碟區 ID，請使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。您將在下一個步驟中建立此磁碟區的快照。

   ```
   aws ec2 describe-instances \
       --instance-ids i-1234567890abcdef0 \
       --query Reservations[].Instances[].BlockDeviceMappings
   ```

   以下為範例輸出。

   ```
   [
       [
           {
               "DeviceName": "/dev/xvda",
               "Ebs": {
                   "AttachTime": "2024-07-11T01:05:51+00:00",
                   "DeleteOnTermination": true,
                   "Status": "attached",
                   "VolumeId": "vol-1234567890abcdef0"
               }
           }
       ]
   ]
   ```

1. 若要建立磁碟區的快照，請使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html) 命令。使用上一個步驟的磁碟區 ID。

   ```
   aws ec2 create-snapshot \
       --volume-id vol-01234567890abcdef \
       --description "my snapshot"
   ```

   以下為範例輸出。

   ```
   {
       "Description": "my snapshot",
       "Encrypted": false,
       "OwnerId": "123456789012",
       "Progress": "",
       "SnapshotId": "snap-0abcdef1234567890",
       "StartTime": "",
       "State": "pending",
       "VolumeId": "vol-01234567890abcdef",
       "VolumeSize": 30,
       "Tags": []
   }
   ```

1. 等到快照的狀態為 `completed` 後，再進行下一個步驟。如需獲取快照狀態，請使用上一個步驟的快照 ID 並搭配 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 命令。

   ```
   aws ec2 describe-snapshots \
       --snapshot-ids snap-0abcdef1234567890 \
       --query Snapshots[].State \
       --output text
   ```

   以下為範例輸出。

   ```
   completed
   ```

1. 若要建立新 AMI，請使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 命令。使用輸出 **CreateSnapshot** 中的值 `SnapshotId`。
   + 如需將啟動模式設定為 UEFI，請新增包含值 `uefi` 的 `--boot-mode` 參數。

     ```
     aws ec2 register-image \
        --description "my image" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi
     ```
   + 如需將啟動模式設定為 `uefi-preferred`，請將 `--boot-mode` 的值設定為 `uefi-preferred`

     ```
     aws ec2 register-image \
        --description "my description" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi-preferred
     ```

1. (選用) 如需驗證新建立的 AMI 是否具有您指定的啟動模式，請使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

   ```
   aws ec2 describe-images \
       --image-id ami-1234567890abcdef0 \
       --query Images[].BootMode \
       --output text
   ```

   以下為範例輸出。

   ```
   uefi
   ```

------
#### [ PowerShell ]

**如需設定 AMI 的啟動模式**

1. 對執行個體的磁碟區和作業系統進行適當的修改，以支援透過選取的開機模式開機。所需的修改視作業系統而異。如需詳細資訊，請參閱作業系統的手冊。
**警告**  
如果您不執行此步驟，則 AMI 將無法使用。

1. 如需尋找執行個體的磁碟區 ID，請使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

   ```
   (Get-EC2Instance `
       -InstanceId i-1234567890abcdef0).Instances.BlockDeviceMappings.Ebs
   ```

   以下為範例輸出。

   ```
   AssociatedResource  : 
   AttachTime          : 7/11/2024 1:05:51 AM
   DeleteOnTermination : True
   Operator            : 
   Status              : attached
   VolumeId            : vol-01234567890abcdef
   ```

1. 如需建立磁碟區的快照，請使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html) cmdlet。使用上一個步驟的磁碟區 ID。

   ```
   New-EC2Snapshot `
       -VolumeId vol-01234567890abcdef `
       -Description "my snapshot"
   ```

   以下為範例輸出。

   ```
   AvailabilityZone          : 
   Description               : my snapshot
   Encrypted                 : False
   FullSnapshotSizeInBytes   : 0
   KmsKeyId                  : 
   OwnerId                   : 123456789012
   RestoreExpiryTime         : 
   SnapshotId                : snap-0abcdef1234567890
   SseType                   : 
   StartTime                 : 4/25/2025 6:08:59 PM
   State                     : pending
   StateMessage              : 
   VolumeId                  : vol-01234567890abcdef
   VolumeSize                : 30
   ```

1. 等到快照的狀態為 `completed` 後，再進行下一個步驟。如需獲取快照狀態，請使用上一個步驟的快照 ID 並搭配 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html) cmdlet。

   ```
   (Get-EC2Snapshot `
       -SnapshotId snap-0abcdef1234567890).State.Value
   ```

   以下為範例輸出。

   ```
   completed
   ```

1. 如需使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet 來建立新的 AMI。使用輸出 **New-EC2Snapshot** 中的值 `SnapshotId`。
   + 如需將啟動模式設定為 UEFI，請新增包含值 `uefi` 的 `-BootMode` 參數。

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi
     ```
   + 如需將啟動模式設定為 `uefi-preferred`，請將 `-BootMode` 的值設定為 `uefi-preferred`

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi-preferred
     ```

1. (選用) 如需驗證新建立的 AMI 是否具有您指定的啟動模式，請使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

   ```
   (Get-EC2Image `
       -ImageId ami-1234567890abcdef0).BootMode.Value
   ```

   以下為範例輸出。

   ```
   uefi
   ```

------

# Amazon EC2 執行個體的 UEFI 變數
<a name="uefi-variables"></a>

啟動其中啟動模式設定為 UEFI 的執行個體時，就會建立變數的機碼值存放區。UEFI 和執行個體作業系統可以使用存放區來儲存 UEFI 變數。

開機載入器和作業系統會使用 UEFI 變數來設定早期系統啟動。它們允許作業系統管理開機程序的特定設定，例如開機順序，或管理 UEFI 安全開機的金鑰。

**警告**  
任何可以連線至執行個體 (以及可能會在執行個體上運行的任何軟體)，或任何具有在執行個體上使用 [GetInstanceUefiData](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData.html) API 許可的人員都可以讀取變數。您決不應該將敏感資料 (例如密碼或個人識別資訊) 存放在 UEFI 變數存放區中。

**UEFI 變數持久性**
+ 對於在 2022 年 5 月 10 日或之前啟動的執行個體，UEFI 變數將在重新開機或停止時被抹除。
+ 對於在 2022 年 5 月 11 日或之後啟動的執行個體，標示為非揮發性的 UEFI 變數會在重新開機和停止/啟動時持續存在。
+ 裸機執行個體不會在執行個體停止/啟動操作中保留 UEFI 非揮發性變數。

# Amazon EC2 執行個體的 UEFI 安全開機
<a name="uefi-secure-boot"></a>

UEFI 安全開機依托 Amazon EC2 的長期安全開機程序，提供額外的深度防禦，幫助客戶保護軟體免受重新開機期間持續存在的威脅。它確保執行個體僅對使用密碼編譯金鑰簽署的軟體進行開機。這些金鑰存放在 [UEFI 非揮發性變數存放區](uefi-variables.md)的金鑰資料庫中。UEFI 安全開機可避免對執行個體開機流程進行未經授權的修改。

**Topics**
+ [UEFI 安全開機如何與 Amazon EC2 執行個體搭配使用](how-uefi-secure-boot-works.md)
+ [Amazon EC2 的 UEFI 安全啟動要求](launch-instance-with-uefi-sb.md)
+ [驗證 Amazon EC2 執行個體是否已啟用 UEFI 安全開機](verify-uefi-secure-boot.md)
+ [使用自訂 UEFI 安全開機金鑰建立 Linux AMI](create-ami-with-uefi-secure-boot.md)
+ [建立 AWS UEFI 安全開機的二進位 Blob](aws-binary-blob-creation.md)

# UEFI 安全開機如何與 Amazon EC2 執行個體搭配使用
<a name="how-uefi-secure-boot-works"></a>

UEFI 安全開機是 UEFI 中指定的一項功能，它提供有關開機鏈狀態的驗證。該功能旨在確保韌體自我初始化後，只會執行以密碼編譯驗證的 UEFI 二進位檔案。這些二進位檔案包括 UEFI 驅動程式和主要開機載入器，以及鏈式載入元件。

UEFI 安全開機指定在信任鏈中使用的四個金鑰資料庫。資料庫存放在 UEFI 變數存放區中。

信任鏈如下：

**平台金鑰 (PK) 資料庫**  
PK 資料庫是信任根。它包含在信任鏈中用於更新金鑰交換金鑰 (KEK) 資料庫的單一公有 PK 金鑰。  
若要變更 PK 資料庫，您必須具有私有 PK 金鑰才能簽署更新要求。這包括透過寫入空 PK 金鑰來刪除 PK 資料庫。

**金鑰交換金鑰 (KEK) 資料庫**  
KEK 資料庫是一份公有 KEK 金鑰清單，這些金鑰用於在信任鏈中更新簽章 (db) 和拒絕清單 (dbx) 資料庫。  
若要變更公有 KEK 資料庫，您必須具有私有 PK 金鑰才能簽署更新要求。

**簽章 (db) 資料庫**  
db 資料庫是一份公有金鑰和雜湊清單，這些金鑰和雜湊用於在信任鏈中驗證所有 UEFI 開機二進位檔案。  
若要變更 db 資料庫，您必須具有私有 PK 金鑰或任何一項私有 KEK 金鑰才能簽署更新要求。

**簽章拒絕清單 (dbx) 資料庫**  
dbx 資料庫是一份不受信任的公有金鑰和二進位檔案雜湊清單，在信任鏈中作為撤銷檔案使用。  
dbx 資料庫始終優先於所有其他金鑰資料庫。  
若要變更 dbx 資料庫，您必須具有私有 PK 金鑰或任何一項私有 KEK 金鑰才能簽署更新要求。  
UEFI 論壇維護有適用於許多已知不良二進位檔案和憑證的公開可用的 dbx，網址為：[https://uefi.org/revocationlistfile](https://uefi.org/revocationlistfile)。

**重要**  
UEFI 安全開機強制對任何 UEFI 二進位檔案執行簽章驗證。若要允許在 UEFI 安全開機中執行 UEFI 二進位檔案，請使用上述任何私有 db 金鑰予以簽署。

UEFI 安全開機預設為停用，且系統處於 `SetupMode` 模式。當系統處於 `SetupMode` 模式時，所有金鑰變數都可以在沒有密碼編譯簽章的情況下更新。設定 PK 後，UEFI 安全開機將啟用，並結束設定模式。

# Amazon EC2 的 UEFI 安全啟動要求
<a name="launch-instance-with-uefi-sb"></a>

當您[啟動 Amazon EC2 執行個體](LaunchingAndUsingInstances.md)，且其具支援 AMI 和支援執行個體類型時，該執行個體會自動根據其 UEFI 安全開機資料庫驗證 UEFI 開機二進位檔案。不需任何其他設定。您還可以在啟動後在執行個體上設定 UEFI 安全開機。

**注意**  
UEFI 安全開機可保護您的執行個體及其作業系統免受開機流程修改的影響。如果您從啟用 UEFI 安全開機的來源 AMI 建立新 AMI，並在複製過程修改部分參數 (例如變更 AMI 內的 `UefiData`)，您可停用 UEFI 安全開機。

**Topics**
+ [支援的 AMI](#uefi-amis)
+ [支援的執行個體類型](#uefi-instance)

## 支援的 AMI
<a name="uefi-amis"></a>

**Linux AMI**  
若要啟動 Linux 執行個體，Linux AMI 必須啟用 UEFI 安全開機。

Amazon Linux 從 AL2023 2023.1 版起開始支援 UEFI 安全開機。不過，AMI 在預設情況下並不會啟用 UEFI 安全開機。如需詳細資訊，請參閱「AL2023 使用者指南」**中的 [UEFI 安全開機](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html)。舊版 Amazon Linux AMI 並未啟用 UEFI 安全開機。若要使用支援的 AMI，必須在自有的 Linux AMI 上執行多個設定步驟。如需詳細資訊，請參閱[使用自訂 UEFI 安全開機金鑰建立 Linux AMI](create-ami-with-uefi-secure-boot.md)。

**Windows AMI**  
若要啟動 Windows 執行個體，Windows AMI 必須啟用 UEFI 安全開機。若要尋找已針對使用 Microsoft 金鑰的 UEFI 安全開機預先設定的 AWS Windows AMI，請參閱 [Windows AMIs參考中的尋找使用 NitroTPM 和 UEFI 安全開機設定的 Windows Server](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find) AMI。 *AWS AMIs *

目前，我們不支援使用 [import-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html) 命令來匯入具有 UEFI 安全開機的 Windows。

## 支援的執行個體類型
<a name="uefi-instance"></a>

所有支援 UEFI 的虛擬化執行個體類型也支援 UEFI 安全開機。如需有關支援 UEFI 安全開機的執行個體類型詳細資訊，請參閱[UEFI 開機模式需求](launch-instance-boot-mode.md)。

**注意**  
裸機執行個體類型不支援 UEFI 安全開機。

# 驗證 Amazon EC2 執行個體是否已啟用 UEFI 安全開機
<a name="verify-uefi-secure-boot"></a>

您可使用下列程序來確定 Amazon EC2 是否已啟用 UEFI 安全開機。

## Linux 執行個體
<a name="verify-uefi-secure-boot-linux"></a>

可使用 `mokutil` 公用程式來驗證 Linux 執行個體是否已啟用 UEFI 安全開機。如果執行個體上沒有安裝 `mokutil`，則必須安裝。如需 Amazon Linux 2 安裝說明，請參閱[在 Amazon Linux 2 執行個體尋找並安裝軟體套件](https://docs.aws.amazon.com/linux/al2/ug/find-install-software.html)。若是其他 Linux 發行版，請參閱其特定文件。

**驗證 Linux 執行個體是否已啟用 UEFI 安全開機**  
連線您的執行個體，並在終端機視窗以 `root` 身分執行以下命令。

```
mokutil --sb-state 
```

以下為範例輸出。
+ 如果啟用了 UEFI 安全開機，則輸出會包含 `SecureBoot enabled`。
+ 如果未啟用 UEFI 安全開機，則輸出會包含 `SecureBoot disabled` 或 `Failed to read SecureBoot`。

## Windows 執行個體
<a name="verify-uefi-secure-boot-windows"></a>

**驗證 Windows 執行個體是否已啟用 UEFI 安全開機**

1. 連線到您的執行個體。

1. 開啟 msinfo32 工具。

1. 檢查 **Secure Boot State** (安全開機狀態) 欄位。如果啟用了 UEFI 安全開機，則值為**支援**，如下圖所示。  
![\[System Information (系統資訊) 中的 Secure Boot State (安全開機狀態)。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/secure-boot-state-win.png)

您也可以使用 Windows PowerShell Cmdlet `Confirm-SecureBootUEFI` 檢查安全開機狀態。如需有關 cmdlet 的詳細資訊，請參閱 Microsoft 文件的 [Confirm-SecureBootUEFI](https://learn.microsoft.com/en-us/powershell/module/secureboot/confirm-securebootuefi)。

# 使用自訂 UEFI 安全開機金鑰建立 Linux AMI
<a name="create-ami-with-uefi-secure-boot"></a>

這些說明向您展示了如何使用 UEFI 安全開機和自訂私有金鑰來建立 Linux AMI。Amazon Linux 從 AL2023 2023.1 版起開始支援 UEFI 安全開機。如需詳細資訊，請參閱 *Amazon Linux 2023 使用者指南*中的 [AL2023 的 UEFI 安全啟動](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html)。

**重要**  
以下程序**僅適用於進階使用者**。您必須具備充分的 SSL 和 Linux 發行版本開機流程的知識才能使用這些程序。

**先決條件**
+ 將會使用下列工具：
  + OpenSSL - [https://www.openssl.org/](https://www.openssl.org/)
  + efivar - [https://github.com/rhboot/efivar](https://github.com/rhboot/efivar)
  + efitools - [https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/](https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/)
  + [get-instance-uefi-data](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) 命令
+ 您的 Linux 執行個體必須使用支援 UEFI 開機模式的 Linux AMI 啟動，並且有非揮發性資料存在。

沒有 UEFI 安全開機金鑰的新建立執行個體是在 `SetupMode` 中建立，允許您註冊自己的金鑰。某些 AMI 預先設定為具有 UEFI 安全開機功能，您無法變更現有金鑰。如果您想要變更金鑰，您必須根據原始 AMI 建立新 AMI。

您有兩種在變數存放區傳播金鑰的方法，這些方法在接下來的選項 A 和選項 B 中說明。選項 A 說明如何在執行個體中執行此操作，並模仿真實硬體的流程。選項 B 說明如何建立二進位檔案 Blob，其隨後會在建立 AMI 時作為 base64 編碼的檔案傳遞。對於這兩個選項，您必須先建立用於信任鏈的三對金鑰對。

**Topics**
+ [任務 1：建立金鑰對](#uefi-secure-boot-create-three-key-pairs)
+ [任務 2 – 選項 A：從執行個體中將金鑰新增至變數存放區](#uefi-secure-boot-optionA)
+ [任務 2 – 選項 B：建立一個包含預先填寫的變數存放區的二進位 blob](#uefi-secure-boot-optionB)

## 任務 1：建立金鑰對
<a name="uefi-secure-boot-create-three-key-pairs"></a>

UEFI 安全開機基於下列用於信任鏈的三個金鑰資料庫：平台金鑰 (PK)、金鑰交換金鑰 (KEK) 和簽章資料庫 (db)。¹

您需在執行個體上建立每個金鑰。若要以對 UEFI 安全開機標準有效的格式準備公有金鑰，請為每個金鑰建立一個憑證。`DER` 定義 SSL 格式 (格式的二進位編碼)。然後，您可以將每個憑證轉換為 UEFI 簽章清單，該清單為 UEFI 安全開機中所理解的二進位格式。最後，您需使用相關金鑰簽署每個憑證。

**Topics**
+ [準備建立金鑰對](#uefisb-prepare-to-create-key-pairs)
+ [金鑰對 1：建立平台金鑰 (PK)](#uefisb-create-key-pair-1)
+ [金鑰對 2：建立金鑰交換金鑰 (KEK)](#uefisb-create-key-pair-2)
+ [金鑰對 3：建立簽章資料庫 (db)](#uefisb-create-key-pair-3)
+ [使用私有金鑰簽署開機映像 (核心)](#uefi-secure-boot-sign-kernel)

### 準備建立金鑰對
<a name="uefisb-prepare-to-create-key-pairs"></a>

建立金鑰對之前，請建立一個用於金鑰產生的全域唯一識別符 (GUID)。

1. [連線到執行個體。](connect.md)

1. 在 shell 提示中執行下列命令。

   ```
   uuidgen --random > GUID.txt
   ```

### 金鑰對 1：建立平台金鑰 (PK)
<a name="uefisb-create-key-pair-1"></a>

PK 是 UEFI 安全開機執行個體的信任根。私有 PK 用於更新 KEK，其又可接續用於將授權的金鑰新增至簽章資料庫 (db)。

X.509 標準用於建立金鑰對。如需有關標準的資訊，請參閱*維基百科*上的 [X.509](https://en.wikipedia.org/wiki/X.509)。

**建立 PK**

1. 建立金鑰。您必須將變數命名為 `PK`。

   ```
   openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt
   ```

   指定了下列參數：
   + `-keyout PK.key` - 私有金鑰檔案。
   + `-days 3650` - 憑證有效的天數。
   + `-out PK.crt` - 用於建立 UEFI 變數的憑證。
   + `CN=Platform key` - 金鑰的通用名稱 (CN)。您可以輸入自己的組織名稱，而不是*平台金鑰*。

1. 建立憑證。

   ```
   openssl x509 -outform DER -in PK.crt -out PK.cer
   ```

1. 將憑證轉換至 UEFI 簽章清單。

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
   ```

1. 使用私有 PK (自我簽署) 簽署 UEFI 簽章清單。

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
   ```

### 金鑰對 2：建立金鑰交換金鑰 (KEK)
<a name="uefisb-create-key-pair-2"></a>

私有 KEK 用於將金鑰新增至 db，這是要在系統上開機使用的授權簽章清單。

**建立 KEK**

1. 建立金鑰。

   ```
   openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
   ```

1. 建立憑證。

   ```
   openssl x509 -outform DER -in KEK.crt -out KEK.cer
   ```

1. 將憑證轉換至 UEFI 簽章清單。

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
   ```

1. 使用私有 PK 簽署簽章清單。

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
   ```

### 金鑰對 3：建立簽章資料庫 (db)
<a name="uefisb-create-key-pair-3"></a>

db 清單包含授權在系統上開機的授權金鑰。必須使用私有 KEK 才能修改清單。將使用在此步驟中建立的私有金鑰簽署開機映像。

**建立 db**

1. 建立金鑰。

   ```
   openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
   ```

1. 建立憑證。

   ```
   openssl x509 -outform DER -in db.crt -out db.cer
   ```

1. 將憑證轉換至 UEFI 簽章清單。

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
   ```

1. 使用私有 KEK 簽署簽章清單。

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
   ```

### 使用私有金鑰簽署開機映像 (核心)
<a name="uefi-secure-boot-sign-kernel"></a>

若為 Ubuntu 22.04，下列映像需要簽章。

```
/boot/efi/EFI/ubuntu/shimx64.efi
/boot/efi/EFI/ubuntu/mmx64.efi
/boot/efi/EFI/ubuntu/grubx64.efi
/boot/vmlinuz
```

**簽署映像**  
使用下列語法簽署映像。

```
sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
```

**注意**  
您必須簽署所有新核心。*`/boot/vmlinuz`* 通常會以符號連結到上次安裝的核心。

請參閱您的發行版本說明文件，了解您的開機鏈和所需映像。

¹ 感謝 ArchWiki 社群所做的所有工作。用於建立 PK、建立 KEK、建立 DB 和簽署映像的命令來自 [Creating keys](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys) (建立金鑰)，該文章由 ArchWiki 維護團隊和/或 ArchWiki 貢獻者撰寫。

## 任務 2 – 選項 A：從執行個體中將金鑰新增至變數存放區
<a name="uefi-secure-boot-optionA"></a>

建立[三個金鑰對](#uefi-secure-boot-create-three-key-pairs)後，您即可以連接到執行個體，並透過完成以下步驟從執行個體中將金鑰新增至變數存放區。或者，完成 [任務 2 – 選項 B：建立一個包含預先填寫的變數存放區的二進位 blob](#uefi-secure-boot-optionB) 中的步驟。

**Topics**
+ [步驟 1：啟動將支援 UEFI 安全開機的執行個體](#step1-launch-uefi-sb)
+ [步驟 2：設定執行個體以支援 UEFI 安全開機](#step2-launch-uefi-sb)
+ [步驟 3：從執行個體建立 AMI](#step3-launch-uefi-sb)

### 步驟 1：啟動將支援 UEFI 安全開機的執行個體
<a name="step1-launch-uefi-sb"></a>

當您[啟動執行個體](LaunchingAndUsingInstances.md) (具有下列先決條件) 時，執行個體將準備好設定為支援 UEFI 安全開機。您只能在啟動時在執行個體上啟用對 UEFI 安全開機的支援；以後無法啟用它。

**先決條件**
+ **AMI** - Linux AMI 必須支援 UEFI 開機模式。若要驗證 AMI 是否支援 UEFI 開機模式，AMI 開機模式參數必須為 **uefi**。如需詳細資訊，請參閱[確定 Amazon EC2 AMI 的開機模式參數](ami-boot-mode.md)。

  請注意， AWS 僅提供設定為支援 Graviton 型執行個體類型的 UEFI 的 Linux AMIs。 AWS 目前不提供支援 UEFI 開機模式的 x86\$164 Linux AMIs。您可以設定自有的 AMI，以支援所有架構的 UEFI 開機模式。若要設定支援 UEFI 開機模式的 AMI，必須在自有的 AMI 上執行多個設定步驟。如需詳細資訊，請參閱[設定 Amazon EC2 AMI 的開機模式](set-ami-boot-mode.md)。
+ **執行個體類型** - 所有支援 UEFI 的虛擬化執行個體類型也支援 UEFI 安全開機。裸機執行個體類型不支援 UEFI 安全開機。如需有關支援 UEFI 安全開機的執行個體類型詳細資訊，請參閱[UEFI 開機模式需求](launch-instance-boot-mode.md)。
+ 在發佈 UEFI 安全開機後啟動您的執行個體。只有在 2022 年 5 月 10 日 (發佈 UEFI 安全開機時) 後啟動的執行個體才能支援 UEFI 安全開機。

啟動執行個體後，您可以透過檢查 UEFI 資料是否存在，驗證執行個體是否已準備好設定為支援 UEFI 安全開機 (換句話說，您可以繼續執行[步驟 2](#step2-launch-uefi-sb))。UEFI 資料的存在表示非揮發性資料是持續的。

**驗證執行個體是否準備好執行步驟 2**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) 命令並指定執行個體 ID。

```
aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0
```

如果輸出中存在 UEFI 資料，則執行個體已準備好執行步驟 2。如果輸出為空白，則無法將執行個體設定為支援 UEFI 安全開機。如果您的執行個體在 UEFI 安全開機支援可用之前啟動，則會發生這種情況。啟動新的執行個體，然後再試一次。

### 步驟 2：設定執行個體以支援 UEFI 安全開機
<a name="step2-launch-uefi-sb"></a>

#### 在執行個體上的 UEFI 變數存放區中註冊金鑰對
<a name="step2a-launch-uefi-sb"></a>

**警告**  
您必須在註冊金鑰*之後*簽署開機映像，否則您將無法啟動執行個體。

建立已簽署的 UEFI 簽章清單 (`PK`、`KEK` 以及`db`) 後，必須將他們註冊至 UEFI 韌體。

只有在以下情況下才能寫入 `PK` 變數：
+ 如果 `SetupMode` 變數為 `1`，表示尚未註冊 PK。透過以下命令來檢查這一點：輸出為 `1` 或 `0`。

  ```
  efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode 
  ```
+ 新 PK 由現有 PK 的私有金鑰簽署。

**在 UEFI 變數存放區中註冊金鑰**  
必須在執行個體上執行以下命令。

如果啟用了設定模式 (值為 `1`)，則可以在執行個體上執行下列命令來註冊金鑰：

```
[ec2-user ~]$ efi-updatevar -f db.auth db
```

```
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
```

```
[ec2-user ~]$ efi-updatevar -f PK.auth PK
```

**驗證 UEFI 安全開機是否已啟用**  
若要驗證 UEFI 安全開機是否已啟用，請依照 [驗證 Amazon EC2 執行個體是否已啟用 UEFI 安全開機](verify-uefi-secure-boot.md) 中的步驟執行動作。

現在，您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) CLI 命令匯出 UEFI 變數存放區，或者繼續執行下一個步驟．簽署開機映像以重新開機到已啟用 UEFI 安全開機的執行個體。

### 步驟 3：從執行個體建立 AMI
<a name="step3-launch-uefi-sb"></a>

若要從執行個體建立 AMI，您可以使用主控台或 `CreateImage` API、CLI 或 SDK。如需主控台的說明，請參閱 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md)。如需 API 的說明，請參閱 [CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)。

**注意**  
`CreateImage` API 會自動將執行個體的 UEFI 變數存放區複製到 AMI。控制台使用 `CreateImage` API。使用此 AMI 啟動執行個體後，執行個體將具有相同的 UEFI 變數存放區。

## 任務 2 – 選項 B：建立一個包含預先填寫的變數存放區的二進位 blob
<a name="uefi-secure-boot-optionB"></a>

建立[三個金鑰對](#uefi-secure-boot-create-three-key-pairs)之後，您可以建立一個包含預先填寫的變數存放區 (包含 UEFI 安全開機金鑰) 的二進位 blob。或者，完成 [任務 2 – 選項 A：從執行個體中將金鑰新增至變數存放區](#uefi-secure-boot-optionA) 中的步驟。

**警告**  
您必須在註冊金鑰*之前*簽署開機映像，否則您將無法啟動執行個體。

**Topics**
+ [步驟 1：建立新的變數存放區或更新現有變數存放區](#uefi-secure-boot-create-or-update-variable)
+ [步驟 2：在建立 AMI 時上傳二進位 blob](#uefi-secure-boot-upload-binary-blob-on-ami-creation)

### 步驟 1：建立新的變數存放區或更新現有變數存放區
<a name="uefi-secure-boot-create-or-update-variable"></a>

您可以使用 python-uefivars 工具，在沒有執行個體執行的情況下*離線*建立變數存放區。該工具可以從您的金鑰建立一個新的變數存放區。指令碼目前支援 EDK2 格式、 AWS 格式和 JSON 表示法，以便使用高階工具進行編輯。

**在沒有執行個體執行的情況下離線建立變數存放區**

1. 在下列連結下載該工具。

   ```
   https://github.com/awslabs/python-uefivars
   ```

1. 通過執行下列命令從您的金鑰建立新的變數存放區。這將在 *your\$1binary\$1blob*.bin 中建立 base64 編碼二進位 blob。該工具還支援透過 `-I` 參數更新二進位 blob。

   ```
   ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl
   ```

### 步驟 2：在建立 AMI 時上傳二進位 blob
<a name="uefi-secure-boot-upload-binary-blob-on-ami-creation"></a>

使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 傳遞您的 UEFI 變數存放區資料。對於 `--uefi-data` 參數，請指定您的二進位 blob，而對於 `--boot-mode` 參數，則指定 `uefi`。

```
aws ec2 register-image \
    --name uefi_sb_tpm_register_image_test \
    --uefi-data $(cat your_binary_blob.bin) \
    --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \
    --architecture x86_64 \
    --root-device-name /dev/sda1 \
    --virtualization-type hvm \
    --ena-support \
    --boot-mode uefi
```

# 建立 AWS UEFI 安全開機的二進位 Blob
<a name="aws-binary-blob-creation"></a>

您可以使用以下步驟在 AMI 建立過程中自定義 UEFI 安全開機變數。在這些步驟中使用的 KEK 截至 2021 年 9 月都是最新的。如果 Microsoft 更新 KEK，則您必須使用最新的 KEK。

**建立 AWS 二進位 Blob**

1. 建立一個空白的 PK 簽章清單。

   ```
   touch empty_key.crt
   cert-to-efi-sig-list empty_key.crt PK.esl
   ```

1. 下載 KEK 憑證。

   ```
   https://go.microsoft.com/fwlink/?LinkId=321185
   ```

1. 將 KEK 憑證包裝在 UEFI 簽章清單中 (`siglist`)。

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK.esl MicCorKEKCA2011_2011-06-24.crt 
   ```

1. 下載 Microsoft 的 db 憑證。

   ```
   https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
   https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
   ```

1. 產生 db 簽章清單。

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
   cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
   ```

1. Unified Extensible Firmware Interface 論壇不再提供 DBX 檔案。這些檔案目前由 Microsoft 在 GitHub 上提供。請前往 [ https://github.com/microsoft/secureboot\$1objects](https://github.com/microsoft/secureboot_objects)，透過 Microsoft 安全啟動更新儲存庫下載最新 DBX 更新。

1. 解壓縮簽署的 update-binary。

   透過下面的指令碼內容來建立 `SplitDbxContent.ps1`。或者，您可使用 `Install-Script -Name SplitDbxContent`，透過 [PowerShell Gallery](https://www.powershellgallery.com/packages/SplitDbxContent/1.0) 來安裝指令碼。

   ```
   <#PSScriptInfo
    
   .VERSION 1.0
    
   .GUID ec45a3fc-5e87-4d90-b55e-bdea083f732d
    
   .AUTHOR Microsoft Secure Boot Team
    
   .COMPANYNAME Microsoft
    
   .COPYRIGHT Microsoft
    
   .TAGS Windows Security
    
   .LICENSEURI
    
   .PROJECTURI
    
   .ICONURI
    
   .EXTERNALMODULEDEPENDENCIES
    
   .REQUIREDSCRIPTS
    
   .EXTERNALSCRIPTDEPENDENCIES
    
   .RELEASENOTES
   Version 1.0: Original published version.
    
   #>
   
   <#
   .DESCRIPTION
    Splits a DBX update package into the new DBX variable contents and the signature authorizing the change.
    To apply an update using the output files of this script, try:
    Set-SecureBootUefi -Name dbx -ContentFilePath .\content.bin -SignedFilePath .\signature.p7 -Time 2010-03-06T19:17:21Z -AppendWrite'
   .EXAMPLE
   .\SplitDbxAuthInfo.ps1 DbxUpdate_x64.bin
   #>
   
   
   # Get file from script input
   $file  = Get-Content -Encoding Byte $args[0]
   
   # Identify file signature
   $chop = $file[40..($file.Length - 1)]
   if (($chop[0] -ne 0x30) -or ($chop[1] -ne 0x82 )) {
       Write-Error "Cannot find signature"
       exit 1
   }
   
   # Signature is known to be ASN size plus header of 4 bytes
   $sig_length = ($chop[2] * 256) + $chop[3] + 4
   $sig = $chop[0..($sig_length - 1)]
   
   if ($sig_length -gt ($file.Length + 40)) {
       Write-Error "Signature longer than file size!"
       exit 1
   }
   
   # Content is everything else
   $content = $file[0..39] + $chop[$sig_length..($chop.Length - 1)]
   
   # Write signature and content to files
   Set-Content -Encoding Byte signature.p7 $sig
   Set-Content -Encoding Byte content.bin $content
   ```

   使用指令碼來解壓縮簽署的 DBX 檔案。

   ```
   PS C:\Windows\system32> SplitDbxContent.ps1 .\dbx.bin
   ```

   這會產生兩個檔案 - `signature.p7` 與 `content.bin`。在下一個步驟使用 `content.bin`。

1. 使用 `uefivars.py` 指令碼建置 UEFI 變數存放區。

   ```
   ./uefivars.py -i none -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin 
   ```

1. 檢查二進位 blob 和 UEFI 變數存放區。

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o json | less
   ```

1. 您可以透過再次將 blob 傳遞給同一工具來更新 Blob。

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin
   ```

   預期的輸出結果

   ```
   Replacing PK
   Replacing KEK
   Replacing db
   Replacing dbx
   ```

# 對 EBS 後端 AMI 使用加密
<a name="AMIEncryption"></a>

以 Amazon EBS 快照為後端的 AMI 可以利用 Amazon EBS 加密。資料和根磁碟區的快照可以經過加密再連接至 AMI。您可以啟動執行個體並複製映像，而且包括完整 EBS 加密支援在內。 AWS KMS 可使用 的所有區域都支援這些操作的加密參數。

具有 EBS 磁碟區的 EC2 執行個體從 AMIs 啟動的方式，如同其他執行個體一樣。此外，從以未加密 EBS 快照為後端的 AMI 啟動執行個體時，您可以在啟動期間加密部分或所有磁碟區。

如同 EBS 磁碟區，AMIs 中的快照可由您的預設金鑰 AWS KMS key或您指定的客戶受管金鑰加密。無論是哪種情況，您都必須擁有許可才能使用所選取的 KMS 金鑰。

具有加密快照的 AMIs 可以跨 AWS 帳戶共用。如需詳細資訊，請參閱[了解 Amazon EC2 的共用 AMI 使用情況](sharing-amis.md)。

**Topics**
+ [執行個體啟動案例](#AMI-encryption-launch)
+ [映像複製案例](#AMI-encryption-copy)

## 執行個體啟動案例
<a name="AMI-encryption-launch"></a>



透過 或直接使用 Amazon EC2 API AWS 管理主控台 或 CLI，透過區塊型設備映射提供的參數，使用 `RunInstances`動作從 AMIs 啟動 Amazon EC2 執行個體。如需詳細資訊，請參閱[Amazon EC2 執行個體上磁碟區的區塊型儲存設備映射](block-device-mapping-concepts.md)。如需從 控制區塊型設備映射的範例 AWS CLI，請參閱[啟動、列出和終止 EC2 執行個體](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html)。

根據預設，如果沒有明確的加密參數，從 AMI 的來源快照還原 EBS 磁碟區時，`RunInstances` 動作會維護快照的現有加密狀態。如果預設啟用加密，則從 AMI (無論是加密快照還是未加密快照) 建立的所有磁碟區都加密。如果預設加密未啟用，則執行個體會維護 AMI 的加密狀態。

您也可以啟動執行個體並提供加密參數，以同時將新的加密狀態套用到產生的磁碟區。因此，可看到有下列行為：

**在無加密參數的情況下啟動**
+ 未加密快照會還原到未加密的磁碟區，除非預設加密已啟用，在此情況下，所有新建立的磁碟區都加密。
+ 您擁有的加密快照會還原到以相同 KMS 金鑰 所加密的磁碟區。
+ 您未擁有的加密快照 （例如，與您共用 AMI) 會還原至由您 AWS 帳戶預設 KMS 金鑰加密的磁碟區。

您可以提供加密參數來覆寫預設行為。可用的參數是 `Encrypted` 和 `KmsKeyId`。只設定 `Encrypted` 參數會產生下列行為：

**已設定 `Encrypted` 但未指定 `KmsKeyId` 的執行個體啟動行為**
+ 未加密快照會還原到以您的 AWS 帳戶的預設 KMS 金鑰所加密的 EBS 磁碟區。
+ 您擁有的加密快照會還原到以相同 KMS 金鑰 所加密的 EBS 磁碟區。(換言之，`Encrypted` 參數沒有效果。)
+ 您未擁有的加密快照 （即與您共用的 AMI) 會還原至由您 AWS 帳戶預設 KMS 金鑰加密的磁碟區。(換言之，`Encrypted` 參數沒有效果。)

同時設定 `Encrypted` 和 `KmsKeyId` 參數可讓您為加密操作指定非預設 KMS 金鑰。產生下列行為：

**`Encrypted` 和 `KmsKeyId` 都設定的執行個體**
+ 未加密快照會還原到以指定的 KMS 金鑰 所加密的 EBS 磁碟區。
+ 加密快照會還原到不是以原始 KMS 金鑰 所加密的 EBS 磁碟區，而是以指定的 KMS 金鑰 所加密的 EBS 磁碟區。

提交 `KmsKeyId` 但未同時設定 `Encrypted` 參數會導致錯誤。

下列各節提供從 AMI 使用非預設加密參數來啟動執行個體的範例。在每個案例中，提供給 `RunInstances` 動作的參數會導致從快照還原磁碟區期間變更加密狀態。

如需使用主控台從 AMI 啟動執行個體的資訊，請參閱 [啟動 Amazon EC2 執行個體](LaunchingAndUsingInstances.md)。

### 啟動期間加密磁碟區
<a name="launch1"></a>

在此範例中，以未加密快照為後端的 AMI 用於啟動具有加密 EBS 磁碟區的 EC2 執行個體。

![\[啟動執行個體並即時加密磁碟區。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-launch-convert.png)


單獨 `Encrypted` 參數會導致加密此執行個體的磁碟區。提供 `KmsKeyId` 參數為選擇性。如果未指定 KMS 金鑰 ID，則會使用 AWS 帳戶的預設 KMS 金鑰來加密磁碟區。若要以您擁有的不同 KMS 金鑰 來加密磁碟區，請提供 `KmsKeyId` 參數。

### 啟動期間重新加密磁碟區
<a name="launch2"></a>

在此範例中，受加密快照支援的 AMI 用於啟動 EC2 執行個體，而此執行個體具有以新的 KMS 金鑰 所加密的 EBS 磁碟區。

![\[啟動執行個體並即時重新加密磁碟區。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-launch-encrypted.png)


如果您擁有 AMI 但未提供加密參數，則產生的執行個體具有使用與快照相同的 KMS 金鑰 所加密的磁碟區。如果 AMI 是共享，而非您所擁有，而且您未提供加密參數，則會以您的預設 KMS 金鑰 來加密磁碟區。按上圖所示提供加密參數，磁碟區會以指定的 KMS 金鑰 加密。

### 啟動期間變更多個磁碟區的加密狀態
<a name="launch3"></a>

在這個較複雜的範例中，以多個快照 (各有其自己的加密狀態) 為後端的 AMI 用於啟動 EC2 執行個體，而此執行個體具新加密的磁碟區和重新加密的磁碟區。

![\[啟動期間加密和重新加密多個磁碟區。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-launch-mixed.png)


在此案例中，提供每個來源快照的加密參數給 `RunInstances` 動作。指定所有可能的加密參數時，無論您是否擁有 AMI，產生的執行個體都相同。

## 映像複製案例
<a name="AMI-encryption-copy"></a>

透過 AWS 管理主控台 或直接使用 Amazon EC2 API 或 CLI，使用 `CopyImage` 動作來複製 Amazon EC2 AMI。

根據預設，如果沒有明確的加密參數，在複製期間，`CopyImage` 動作會維護 AMI 的來源快照的現有加密狀態。您也可以啟動 AMI 並提供加密參數，以同時將新的加密狀態套用到其相關聯的 EBS 快照。因此，可看到有下列行為：

**在無加密參數的情況下複製**
+ 未加密快照會複製到另一個未加密的快照，除非預設加密已啟用，在此情況下，所有新建立的快照都加密。
+ 您擁有的加密快照會複製到以相同 KMS 金鑰 加密的快照。
+ 您未擁有的加密快照 （也就是與您共用的 AMI) 會複製到您 AWS 帳戶預設 KMS 金鑰所加密的快照。

您可以提供加密參數來覆寫所有這些預設行為。可用的參數是 `Encrypted` 和 `KmsKeyId`。只設定 `Encrypted` 參數會產生下列行為：

**已設定 `Encrypted` 但未指定 `KmsKeyId` 的複製映像行為**
+ 未加密快照會複製到以 AWS 帳戶的預設 KMS 金鑰所加密的快照。
+ 加密快照會複製到以相同 KMS 金鑰 所加密的快照。(換言之，`Encrypted` 參數沒有效果。)
+ 您未擁有的加密快照 （即與您共用的 AMI) 會複製到您 AWS 帳戶的預設 KMS 金鑰所加密的磁碟區。(換言之，`Encrypted` 參數沒有效果。)

同時設定 `Encrypted` 和 `KmsKeyId` 參數可讓您為加密操作指定客戶受管 KMS 金鑰。產生下列行為：

**`Encrypted` 和 `KmsKeyId` 都設定的複製映像行為**
+ 未加密快照會複製到以指定的 KMS 金鑰 所加密的快照。
+ 加密快照會複製到不是以原始 KMS 金鑰 所加密的快照，而是以指定的 KMS 金鑰 加密的快照。

提交 `KmsKeyId` 但未同時設定 `Encrypted` 參數會導致錯誤。

下一節提供使用非預設加密參數來複製 AMI 的範例，結果導致變更加密狀態。

如需使用主控台的詳細說明，請參閱 [複製 Amazon EC2 AMI](CopyingAMIs.md)。

### 複製期間加密未加密的映像
<a name="copy-unencrypted-to-encrypted"></a>

在此案例中，未加密根快照所支援的 AMI 將複製到具有加密根快照的 AMI。透過兩個加密參數叫用 `CopyImage` 動作，包括客戶受管金鑰。因此，根快照的加密狀態會變更，目標 AMI 會受到包含與來源快照相同資料的根快照支援，但使用指定的金鑰進行加密。您需要為兩個 AMI 中的快照支付儲存成本，以及從任一 AMI 啟動的任何執行個體的費用。

**注意**  
啟用預設加密，這與在 AMI 中針對所有快照將 `Encrypted` 參數設定為 `true` 具有相同效果。

![\[快速複製 AMI 並加密快照\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-to-ami-convert.png)


設定 `Encrypted` 參數會加密此執行個體的單一快照。若您未指定 `KmsKeyId` 參數，則會使用預設的客戶受管金鑰來加密快照複本。

**注意**  
您也可以複製具有多個快照的映像，並個別設定各快照的加密狀態。

# 了解 Amazon EC2 的共用 AMI 使用情況
<a name="sharing-amis"></a>

*共享 AMI* 是由開發人員建置並可讓其他人員使用的 AMI。開始使用 Amazon EC2 最簡單的方式之一，就是使用具備您所需元件的共享 AMI，然後再新增自訂的內容。您也可以建立自己的 AMI 並與其他人共享。

但使用共享 AMI 所面臨的風險由您自行承擔。對於其他 Amazon EC2 使用者共享的 AMI，Amazon 不保證其完整性或安全性。因此，您對待共享 AMI 的方式應與您在考慮將任何外部程式碼部署到自己的資料中心時相同，且應善盡相關責任。建議您從信任的來源取得 AMI，例如經過驗證的供應商。

## 已驗證的供應商
<a name="verified-ami-provider"></a>

在 Amazon EC2 主控台中，Amazon 或已驗證的 Amazon 合作夥伴擁有的公用 AMI 標記為 **Verified provider** (已驗證的供應商)。

您也可以使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) AWS CLI 命令來識別來自已驗證提供者的公AMIs。Amazon 或已驗證的合作夥伴擁有的公有映像有一個採用別名的擁有者，即 `amazon`、`aws-backup-vault` 或 `aws-marketplace`。在 CLI 輸出中，這些值顯示為 `ImageOwnerAlias`。其他使用者無法為其 AMI 設定別名。這可讓您輕鬆地尋找來自 Amazon 或已驗證的合作夥伴的 AMI。

若要成為已驗證的供應商，您必須在 AWS Marketplace上註冊為賣方。註冊後，您可以將您的 AMI 在 AWS Marketplace上列出。如需詳細資訊，請參閱*「AWS Marketplace 賣方指南」*中的[賣方入門](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html)和[以 AMI 為基礎的產品](https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html)。

**Topics**
+ [已驗證的供應商](#verified-ami-provider)
+ [尋找用於 Amazon EC2 執行個體的共用 AMI](usingsharedamis-finding.md)
+ [準備使用適用於 Linux 的共用 AMI](usingsharedamis-confirm.md)
+ [透過允許 AMI 在 Amazon EC2 控制 AMI 的探索及使用](ec2-allowed-amis.md)
+ [在 Amazon EC2 中公開提供您的 AMI](sharingamis-intro.md)
+ [了解封鎖 AMI 的公有存取權](block-public-access-to-amis.md)
+ [與組織或組織單位共用 AMI](share-amis-with-organizations-and-OUs.md)
+ [與特定 AWS 帳戶共用 AMI](sharingamis-explicit.md)
+ [取消將 AMI 與您的 共用 AWS 帳戶](cancel-sharing-an-AMI.md)
+ [建立共用 Linux AMI 的建議](building-shared-amis.md)

**如果您正在尋找有關其他主題的資訊**
+ 如需有關建立 AMI 的詳細資訊，請參閱 [建立 Amazon S3 支援的 AMI](creating-an-ami-instance-store.md) 或 [建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md).。
+ 如需有關在 AWS Marketplace上建置、交付和維護應用程式的資訊，請參閱 [AWS Marketplace 文件](https://docs.aws.amazon.com/marketplace/)。

# 尋找用於 Amazon EC2 執行個體的共用 AMI
<a name="usingsharedamis-finding"></a>

您可使用 Amazon EC2 主控台或命令列來尋找要與 Amazon EC2 執行個體搭配使用的公用或私有共用 AMI。

AMI 是一種區域性的資源。因此，您必須在 AMI 進行共享的區域中搜尋，才能搜尋到共享 AMI (公有或私有)。若要讓 AMI 在其他區域可用，請將 AMI 複製到該區域，然後共享。如需詳細資訊，請參閱[複製 Amazon EC2 AMI](CopyingAMIs.md)。

------
#### [ Console ]

主控台提供了一個 AMI 篩選欄位。您亦可用**搜尋**欄位中提供的篩選條件，來確定搜尋範圍。

**如需尋找共享項或 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在第一個篩選條件中，選擇下列其中一個選項：
   + **私有映像** – 列示與您共享的全部 AMI。
   + **公有映像** – 列示全部公有 AMI。

1. (選用) 如需僅顯示 Amazon 的公有映像，選擇**搜尋**欄位，然後從功能表選項中依序選擇**擁有者別名**、**=** 和 **amazon**。

1. (選用) 新增篩選條件，以便將搜尋範圍限定在符合您要求的 AMI 上。

**如需透過[經驗證的服務提供者](sharing-amis.md#verified-ami-provider)來共享公有 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI Catalog** (AMI 型錄)。

1. 選擇 **Community AMI** (社群 AMI)。

1. 在**優化結果**窗格中，選取**經驗證的服務提供者**。**經驗證的服務提供者**標籤指示來自 Amazon 或已驗證的合作夥伴的 AMI。

------
#### [ AWS CLI ]

請使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令來列出 AMI。您可縮小範圍，僅列出感興趣的 AMI 類型，如下列範例所示。

**如需列出全部公有 AMI**  
下列命令列出所有公用 AMI，包括您所擁有的任何公用 AMI。

```
aws ec2 describe-images --executable-users all
```

**如需列出具有明確啟動許可的 AMI**  
下列命令列出您擁有明確啟動許可的 AMI。此清單不含您所擁有的任何 AMI。

```
aws ec2 describe-images --executable-users self
```

**如需列出經驗證的服務提供者擁有的 AMI**  
下列命令會列示[經驗證的服務提供者](sharing-amis.md#verified-ami-provider)擁有的 AMI。已驗證的供應商 (Amazon 或已驗證的合作夥伴) 擁有的公用 AMI 有一個採用別名的擁有者，其在帳戶欄位顯示為 `amazon`、`aws-backup-vault` 或 `aws-marketplace`。這可協助您輕鬆尋找來自已驗證的供應商的 AMI。其他使用者無法為其 AMI 設定別名。

```
aws ec2 describe-images \
    --owners amazon aws-marketplace \
    --query 'Images[*].[ImageId]' \
    --output text
```

**如需列出某一帳戶擁有的 AMI**  
下列命令會列出特定 AWS 帳戶擁有的 AMI。

```
aws ec2 describe-images --owners 123456789012
```

**如需使用篩選條件確定 AMI 範圍**  
若要減少顯示的 AMI 數量，請使用篩選條件，只列出感興趣的 AMI 類型。例如，下列篩選條件只會顯示 EBS 後端 AMI。

```
--filters "Name=root-device-type,Values=ebs"
```

------
#### [ PowerShell ]

請使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet (Tools for Windows PowerShell) 來列出 AMI。您可縮小範圍，僅列出感興趣的 AMI 類型，如下列範例所示。

**如需列出全部公有 AMI**  
下列命令列出所有公用 AMI，包括您所擁有的任何公用 AMI。

```
Get-EC2Image -ExecutableUser all
```

**如需列出具有明確啟動許可的 AMI**  
下列命令列出您擁有明確啟動許可的 AMI。此清單不含您所擁有的任何 AMI。

```
Get-EC2Image -ExecutableUser self
```

**如需列出經驗證的服務提供者擁有的 AMI**  
下列命令會列示[經驗證的服務提供者](sharing-amis.md#verified-ami-provider)擁有的 AMI。已驗證的供應商 (Amazon 或已驗證的合作夥伴) 擁有的公用 AMI 有一個採用別名的擁有者，其在帳戶欄位顯示為 `amazon`、`aws-backup-vault` 或 `aws-marketplace`。這可協助您輕鬆尋找來自已驗證的供應商的 AMI。其他使用者無法為其 AMI 設定別名。

```
Get-EC2Image -Owner amazon aws-marketplace
```

**如需列出某一帳戶擁有的 AMI**  
下列命令會列出特定 AWS 帳戶擁有的 AMI。

```
Get-EC2Image -Owner 123456789012
```

**如需使用篩選條件確定 AMI 範圍**  
若要減少顯示的 AMI 數量，請使用篩選條件，只列出感興趣的 AMI 類型。例如，下列篩選條件只會顯示 EBS 後端 AMI。

```
-Filter @{Name="root-device-type"; Values="ebs"}
```

------

# 準備使用適用於 Linux 的共用 AMI
<a name="usingsharedamis-confirm"></a>

在使用適用於 Linux 的共用 AMI 之前，請先採取下列步驟，確定沒有預先安裝的登入資料可能允許第三方對您的執行個體執行不必要的存取，並確定沒有預先設定的遠端登入可能將機密資料傳送至第三方。請參閱 AMI 所使用 Linux 發行版本的說明文件，以取得改善系統安全性的詳細資訊。

為確保您不會意外失去執行個體的存取權，建立您初始化兩個 SSH 工作階段，並保持第二個工作階段為開啟狀態，直到您移除無法識別的登入資料並確認您仍可用 SSH 登入您的執行個體為止。

1. 識別並停用任何未經授權的公有 SSH 金鑰。檔案中唯一能存在的金鑰應該是您用來啟動 AMI 的金鑰。以下命令可找出 `authorized_keys` 檔案：

   ```
   [ec2-user ~]$ sudo find / -name "authorized_keys" -print -exec cat {} \;
   ```

1. 停用根使用者的密碼型態身分驗證。開啟 `sshd_config` 檔案並編輯 `PermitRootLogin` 行，如下所示：

   ```
   PermitRootLogin without-password
   ```

   或者，您可停用公用程式，以根使用者身分登入執行個體：

   ```
   PermitRootLogin No
   ```

   重新啟動 sshd 服務。

1. 檢查是否有任何其他使用者能夠登入您的執行個體。具有超級使用者權限的使用者特別危險。移除或鎖定任何未知帳戶的密碼。

1. 檢查未使用且正在執行網路服務偵聽是否有傳入連線的開放中連接埠。

1. 若要避免預先設定的遠端登入，您應刪除現有的組態檔案，然後重新啟動 `rsyslog` 服務。例如：

   ```
   [ec2-user ~]$ sudo rm /etc/rsyslog.conf
   [ec2-user ~]$ sudo service rsyslog restart
   ```

1. 確認所有的 cron 任務均為合法。

如果發現可能存有安全風險的公用 AMI，請聯絡 AWS 安全團隊。如需詳細資訊，請參閱 [AWS 安全中心](https://aws.amazon.com/security/)。

# 透過允許 AMI 在 Amazon EC2 控制 AMI 的探索及使用
<a name="ec2-allowed-amis"></a>

若要控制使用者在 AWS 帳戶對於 Amazon Machine Images (AMI) 的探索及使用，您可以使用*允許 AMI* 功能。您可指定 AMI 必須符合的條件，才能在您的帳戶中可見且可供使用。在啟用條件之後，啟動執行個體的使用者只會看到並存取符合指定條件的 AMI。例如，您可指定受信任的 AMI 供應商清單作為條件，只有來自這些供應商的 AMI 才可見且可供使用。

在啟用允許 AMI 設定之前，您可啟用*稽核模式*，以預覽 AMI 是否可見且可供使用。這可讓您根據需要調整條件，確保只有預期的 AMI 可見且可供您帳戶的使用者使用。此外，使用 [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) 命令，來尋找使用不符合指定條件的 AMI 啟動的執行個體。此資訊可指導您決定是否更新啟動組態以使用符合規範的 AMI (例如，在啟動範本指定不同 AMI)，或調整條件以允許這些 AMI。

您可直接在帳戶或使用宣告式政策，在帳戶層級指定允許 AMI 設定。這些設定必須在您想要控制 AMI 用量的每個 AWS 區域 位置設定。您可使用宣告式政策同時在多個區域及多個帳戶套用設定。使用宣告式政策時，您無法直接在帳戶中修改設定。本主題說明如何直接在帳戶內配置設定。如需使用宣告式政策的相關資訊，請參閱「AWS Organizations 使用者指南」**中的[宣告式政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

**注意**  
允許 AMI 功能僅可針對公共 AMI 或與您的帳戶共享的 AMI 控制其探索及使用。其不限制您帳戶擁有的 AMI。無論您設定什麼條件，您帳戶建立的 AMI 一律可供您帳戶的使用者探索及使用。

**允許 AMI 的主要優點**
+ **合規性和安全性**：使用者只能探索及使用符合指定條件的 AMI，進而降低以不合規方式使用 AMI 的風險。
+ **高效管理**：透過減少允許 AMI 數量可讓管理剩餘的 AMI 變得更簡單、更有效率。
+ **集中帳戶層級實作**：直接在帳戶內或使用宣告式政策，在帳戶層級配置允許 AMI 設定。這可提供集中且有效的方式來控制整個帳戶的 AMI 使用情況。

**Topics**
+ [允許 AMI 運作方式](#how-allowed-amis-works)
+ [實作允許 AMI 的最佳實務](#best-practice-for-implementing-allowed-amis)
+ [所需的 IAM 許可](#iam-permissions-for-allowed-amis)
+ [管理允許的 AMI 的設定](manage-settings-allowed-amis.md)

## 允許 AMI 運作方式
<a name="how-allowed-amis-works"></a>

如需控制在帳戶中可探索及使用哪些 AMI，您可定義評估 AMI 的條件集。這些條件由如下圖所示的一個或多個 `ImageCriterion` 組成。說明性文字遵循圖表。

![\[允許的 AMI ImageCriteria 組態階層。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami_allowed-amis-imagecriteria.png)


組態具有三個層級：
+ **1** – 參數值
  + 多值參數：
    + `ImageProviders`
    + `ImageNames`
    + `MarketplaceProductCodes`

      AMI 可比對參數內允許的*任何*值。

      範例：`ImageProviders` = `amazon` **OR** 帳戶 `111122223333` **OR** 帳戶 `444455556666` (圖表中並未顯示參數值的評估邏輯。)
  + 單一值參數：
    + `CreationDateCondition`
    + `DeprecationTimeCondition`
+ **2** – `ImageCriterion`
  + 透過 **AND** 邏輯來分組多個參數。
  + AMI 必須比對 `ImageCriterion` 允許的*所有*參數。
  + 範例：`ImageProviders` = `amazon` **AND** `CreationDateCondition` = 300 天或以下
+ **3** – `ImageCriteria`
  + 使用 **OR** 邏輯來分組多個 `ImageCriterion`。
  + AMI 可比對允許的*任何* `ImageCriterion`。
  + 構成用於評估 AMI 的完整組態。

**Topics**
+ [允許的 AMI 參數](#allowed-amis-criteria)
+ [允許的 AMI 組態](#allowed-amis-json-configuration)
+ [條件評估方式](#how-allowed-amis-criteria-are-evaluated)
+ [限制](#allowed-amis-json-configuration-limits)
+ [允許 AMI 操作](#allowed-amis-operations)

### 允許的 AMI 參數
<a name="allowed-amis-criteria"></a>

還可設定以下參數來建立 `ImageCriterion`：

`ImageProviders`  
允許其 AMI 的 AMI 服務提供者。  
有效值是由 AWS和 AWS 帳戶 IDs 定義的別名，如下所示：  
+ `amazon` - 此別名可識別由 Amazon 的經驗證的服務提供者建立的 AMI
+ `aws-marketplace` – 識別 中已驗證提供者所建立 AMIs 的別名 AWS Marketplace
+ `aws-backup-vault` - 此別名可識別位於邏輯氣隙 AWS 備份保存庫帳戶的備份 AMI。如果您使用 AWS Backup 邏輯氣隙隔離保存庫功能，請確定此別名包含為 AMI 供應商。
+ AWS 帳戶 IDs – 一或多個 12 位數 AWS 帳戶 IDs
+ `none` - 表示只能探索及使用由您帳戶建立的 AMI。無法探索及使用公用或共用 AMI。指定後不可指定其他條件。

`ImageNames`  
允許的 AMI 名稱，使用完全相符或萬用字元 (`?` 或 `*`)。

`MarketplaceProductCodes`  
允許 AMIs AWS Marketplace 的產品代碼。

`CreationDateCondition`  
允許的 AMI 的最長存留期。

`DeprecationTimeCondition`  
自允許的 AMI 棄用以來的最長期間。

若要了解每個條件的有效值與約束條件，請參閱 *Amazon EC2 API 參考*中的 [ImageCriterionRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImageCriterionRequest.html)。

### 允許的 AMI 組態
<a name="allowed-amis-json-configuration"></a>

允許的 AMI 核心組態為 `ImageCriteria` 組態，其定義允許 AMI 的條件。下面的 JSON 結構顯示可指定的參數：

```
{
    "State": "enabled" | "disabled" | "audit-mode",  
    "ImageCriteria" : [
        {
            "ImageProviders": ["string",...],
            "MarketplaceProductCodes": ["string",...],           
            "ImageNames":["string",...],
            "CreationDateCondition" : {
                "MaximumDaysSinceCreated": integer
            },
            "DeprecationTimeCondition" : {
                "MaximumDaysSinceDeprecated": integer
            }
         },
         ...
}
```

#### ImageCriteria 範例
<a name="allowed-amis-json-configuration-example"></a>

下面的 `ImageCriteria` 範例可設定四個 `ImageCriterion`。若 AMI 與這些 `ImageCriterion` 中的任何一個相符，則允許該 AMI。若要了解有關如何評估條件的詳細資訊，請參閱 [條件評估方式](#how-allowed-amis-criteria-are-evaluated)。

```
{
    "ImageCriteria": [
        // ImageCriterion 1: Allow AWS Marketplace AMIs with product code "abcdefg1234567890"
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        // ImageCriterion 2: Allow AMIs from providers whose accounts are
        // "123456789012" OR "123456789013" AND AMI age is less than 300 days
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        // ImageCriterion 3: Allow AMIs from provider whose account is "123456789014" 
        // AND with names following the pattern "golden-ami-*"
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        // ImageCriterion 4: Allow AMIs from Amazon or verified providers 
        // AND which aren't deprecated
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ]
}
```

### 條件評估方式
<a name="how-allowed-amis-criteria-are-evaluated"></a>

下表說明了確定是否允許 AMI 的評估規則，並顯示了 `AND` 或 `OR` 運算子如何在每個層級套用：


| 評估層級 | 運算子 | 需要是允許的 AMI | 
| --- | --- | --- | 
| ImageProviders、ImageNames 及 MarketplaceProductCodes 的參數值 | OR | AMI 必須與每個參數清單中至少一個值相符 | 
| ImageCriterion | AND | AMI 必須與每個 ImageCriterion 的全部參數相符 | 
| ImageCriteria | OR | AMI 必須與 ImageCriterion 任意一個參數相符 | 

我們使用上述評估規則，來了解如何套用規則至 [ImageCriteria 範例](#allowed-amis-json-configuration-example)：
+ `ImageCriterion` 1：允許具有 AWS Marketplace 產品代碼的 AMIs `abcdefg1234567890`

  `OR`
+ `ImageCriterion` 2：允許滿足以下兩項條件的 AMI：
  + 由任一帳戶 `123456789012` `OR` `123456789013` 擁有
    + `AND`
  + 在過去 300 天內建立

  `OR`
+ `ImageCriterion` 3：允許滿足以下兩項條件的 AMI：
  + 由帳戶 `123456789014` 擁有
    + `AND`
  + 以模式 `golden-ami-*` 命名

  `OR`
+ `ImageCriterion` 4：允許滿足以下兩項條件的 AMI：
  + 由 Amazon 或經驗證的服務提供者發布 (由 `amazon` 別名指定)
    + `AND`
  + 未棄用 (自棄用以來的最長天數為 `0`)

### 限制
<a name="allowed-amis-json-configuration-limits"></a>

`ImageCriteria` 可包括最多：
+ 10 `ImageCriterion`

每個 `ImageCriterion` 可包括最多：
+ `ImageProviders` 的 200 個值
+ `ImageNames` 的 50 個值 
+ `MarketplaceProductCodes` 的 50 個值 

**限制範例**

使用上述 [ImageCriteria 範例](#allowed-amis-json-configuration-example)：
+ 有 4 個 `ImageCriterion`。最多可新增 6 個至請求，達到上限 10 個。
+ 在第一個 `ImageCriterion` 中， 有 1 個 `MarketplaceProductCodes` 的值。最多可新增 49 個至此 `ImageCriterion`，達到上限 50 個。
+ 在第二個 `ImageCriterion` 中， 有 2 個 `ImageProviders` 的值。最多可新增 198 個至此 `ImageCriterion`，達到上限 200 個。
+ 在第三個 `ImageCriterion` 中， 有 1 個 `ImageNames` 的值。最多可新增 49 個至此 `ImageCriterion`，達到上限 50 個。

### 允許 AMI 操作
<a name="allowed-amis-operations"></a>

允許的 AMI 功能有三種操作狀態來管理映像條件：**已啟用**、**已停用**和**稽核模式**。這些模式可讓您啟用或停用映像條件，或根據需要來檢閱這些條件。

**已啟用**

當啟用允許 AMI 時：
+ 會套用 `ImageCriteria`。
+ 僅可在 EC2 主控台以及透過使用映像的 API (例如，描述、複製、儲存或執行使用映像的其他動作) 來探索允許 AMI。
+ 只能使用允許 AMI 啟動執行個體。

**Disabled**

當停用允許 AMI 時：
+ 不會套用 `ImageCriteria`。
+ AMI 的可探索性或使用方式不受任何限制。

**稽核模式**

 在稽核模式中：
+ 會套用 `ImageCriteria`，但 AMI 的可探索性或使用方式不受任何限制。
+ 在 EC2 主控台中，對於每個 AMI，**允許映像**欄位會顯示**是**或**否**，以指示啟用允許 AMI 時，帳戶使用者可否探索及使用該 AMI。
+ 在命令列，`describe-image` 操作的回應包括 `"ImageAllowed": true` 或 `"ImageAllowed": false`，以指示當允許 AMI 啟用時，帳戶使用者可否探索及使用 AMI。
+ 在 EC2 主控台，當啟用允許 AMI 時，AMI 目錄會在帳戶使用者無法探索或使用的 AMI 旁邊顯示**不允許**。

## 實作允許 AMI 的最佳實務
<a name="best-practice-for-implementing-allowed-amis"></a>

實作允許 AMIs 時，請考慮這些最佳實務，以確保順利轉換，並將對您 AWS 環境的潛在干擾降至最低。

1. **啟用稽核模式**

   從在稽核模式啟用允許 AMI 開始。此狀態可讓您無需實際限制存取，即可查看哪些 AMI 會受到您的條件影響，提供無風險的評估期。

1. **設定允許 AMI 條件**

   仔細確定哪些 AMI 供應商符合您組織的安全性策略、合規性要求和營運需求。
**注意**  
使用 AWS 受管服務時，例如 Amazon ECS、Amazon EKS 或 AWS Lambda `amazon` 受管執行個體，建議您指定別名以允許 建立AMIs AWS。這些服務取決於 Amazon 發布的 AMI 來啟動執行個體。  
設定任何 AMI `CreationDateCondition` 約束條件時要謹慎。設定過度限制的日期條件 （例如，AMIs 必須少於 5 天） 可能會導致執行個體啟動失敗，無論 AMIs 來自 AWS 或其他供應商，都不會在您指定的時間範圍內更新。  
建議將 `ImageNames` 與 `ImageProviders` 配對，以便實現更好的控制與特徵。單獨使用 `ImageNames` 可能無法唯一識別 AMI。

1. **檢查對預期業務流程的影響**

   您可使用主控台或者 CLI，來確定透過不滿足指定條件的 AMI 來啟動的任何執行個體。此資訊可指導您決定是否更新啟動組態以使用符合規範的 AMI (例如，在啟動範本指定不同 AMI)，或調整條件以允許這些 AMI。

   主控台：使用 [ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html) AWS Config 規則，檢查執行中或已停止的執行個體是否使用AMIs 啟動。 AMIs 若 AMI 不滿足允許的 AMI 條件，則規則為 **NON\$1COMPLIANT**；若滿足條件，則規則為 **COMPLIANT**。僅當允許的 AMI 設定被設為**已啟用**或**稽核模式**時，規則才能運作。

   CLI：執行 [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) 命令並篩選回應，確定使用不符合指定條件的 AMI 啟動的任何執行個體。

   若要了解主控台與 CLI 的說明，請參閱 [尋找透過不允許的 AMI 啟動的執行個體](manage-settings-allowed-amis.md#identify-instances-with-allowed-AMIs)。

1. **啟用允許 AMI**

   在確認條件不會對預期業務流程產生負面影響之後，請啟用允許 AMI。

1. **監控執行個體啟動**

   繼續監控您應用程式和所用 AWS 受管服務的 AMIs 執行個體啟動，例如 Amazon EMR、Amazon ECR、Amazon EKS 和 AWS Elastic Beanstalk。檢查是否有任何意外問題，並對允許 AMI 條件進行必要調整。

1. **試驗新的 AMI**

   若要測試不符合目前允許 AMIs 設定的第三方 AMIs， AWS 建議下列方法：
   + 使用單獨的 AWS 帳戶：建立無法存取您關鍵業務資源的帳戶。確認在此帳戶中，未啟用允許的 AMI 設定；或者明確允許您想要測試的 AMI，以便測試這些 AMI。
   + 在另一個測試 AWS 區域：使用可使用第三方 AMIs的區域，但您尚未啟用允許 AMIs設定的區域。

   在測試新的 AMI 時，這些方法可協助確保您的業務關鍵性資源保持安全。

## 所需的 IAM 許可
<a name="iam-permissions-for-allowed-amis"></a>

若要使用允許 AMI 功能，您需要下列 IAM 許可：
+ `GetAllowedImagesSettings`
+ `EnableAllowedImagesSettings`
+ `DisableAllowedImagesSettings`
+ `ReplaceImageCriteriaInAllowedImagesSettings`

# 管理允許的 AMI 的設定
<a name="manage-settings-allowed-amis"></a>

您可管理允許的 AMI 的設定。這些設定依據每個帳戶每個區域設定。

**Topics**
+ [啟用允許 AMI](#enable-allowed-amis-criteria)
+ [設定允許的 AMI 條件](#update-allowed-amis-criteria)
+ [停用允許 AMI](#disable-allowed-amis-criteria)
+ [獲取允許的 AMI 條件](#identify-allowed-amis-state-and-criteria)
+ [尋找允許的 AMI](#identify-amis-that-meet-allowed-amis-criteria)
+ [尋找透過不允許的 AMI 啟動的執行個體](#identify-instances-with-allowed-AMIs)

## 啟用允許 AMI
<a name="enable-allowed-amis-criteria"></a>

您可啟用允許的 AMI 並指定允許的 AMI 條件 建議以稽核模式開始，該模式可顯示哪些 AMI 會受條件影響，而不會實際限制存取權。

------
#### [ Console ]

**若要啟用允許 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡的設定下****，選擇**允許的 AMIs**。

1. 在**允許的 AMI** 索引標籤上，選擇**管理**。

1. 針對**允許的 AMI 設定**，選擇**稽核模式**或**已啟用**。建議以稽核模式開始，測試條件，然後返回此步驟，以便啟用允許的 AMI。

1. (選用) 針對 **AMI 條件**，輸入 JSON 格式的條件。

1. 選擇**更新**。

------
#### [ AWS CLI ]

**若要啟用允許 AMI**  
請使用 [enable-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-allowed-images-settings.html) 命令。

```
aws ec2 enable-allowed-images-settings --allowed-images-settings-state enabled
```

如需轉為啟用稽核模式，指定 `audit-mode` 而不是 `enabled`。

```
aws ec2 enable-allowed-images-settings --allowed-images-settings-state audit-mode
```

------
#### [ PowerShell ]

**若要啟用允許 AMI**  
使用 [Enable-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2AllowedImagesSetting.html) cmdlet。

```
Enable-EC2AllowedImagesSetting -AllowedImagesSettingsState enabled
```

如需轉為啟用稽核模式，指定 `audit-mode` 而不是 `enabled`。

```
Enable-EC2AllowedImagesSetting -AllowedImagesSettingsState audit-mode
```

------

## 設定允許的 AMI 條件
<a name="update-allowed-amis-criteria"></a>

在啟用允許的 AMI 之後，您可設定或取代允許的 AMI 條件。

如需了解正確的組態與有效值，請參閱 [允許的 AMI 組態](ec2-allowed-amis.md#allowed-amis-json-configuration) 和 [允許的 AMI 參數](ec2-allowed-amis.md#allowed-amis-criteria)。

------
#### [ Console ]

**如需設定允許的 AMI 條件**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡的設定下****，選擇**允許的 AMIs**。

1. 在**允許的 AMI** 索引標籤上，選擇**管理**。

1. 針對 **AMI 條件**，輸入 JSON 格式的條件。

1. 選擇**更新**。

------
#### [ AWS CLI ]

**如需設定允許的 AMI 條件**  
請使用 [replace-image-criteria-in-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-image-criteria-in-allowed-images-settings.html) 命令，然後指定包含允許的 AMI 條件的 JSON 檔案。

```
aws ec2 replace-image-criteria-in-allowed-images-settings --cli-input-json file://file_name.json
```

------
#### [ PowerShell ]

**如需設定允許的 AMI 條件**  
請使用 [Set-EC2ImageCriteriaInAllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2ImageCriteriaInAllowedImagesSetting.html) cmdlet，然後指定包含允許的 AMI 條件的 JSON 檔案。

```
$imageCriteria = Get-Content -Path .\file_name.json | ConvertFrom-Json
Set-EC2ImageCriteriaInAllowedImagesSetting -ImageCriterion $imageCriteria
```

------

## 停用允許 AMI
<a name="disable-allowed-amis-criteria"></a>

您可如下所示停用允許的 AMI。

------
#### [ Console ]

**若要停用允許 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡的設定下****，選擇**允許的 AMIs**。

1. 在**允許的 AMI** 索引標籤上，選擇**管理**。

1. 對於**允許 AMI 設定**，選擇**已停用**。

1. 選擇**更新**。

------
#### [ AWS CLI ]

**若要停用允許 AMI**  
請使用 [disable-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-allowed-images-settings.html) 命令。

```
aws ec2 disable-allowed-images-settings
```

------
#### [ PowerShell ]

**若要停用允許 AMI**  
使用 [Disable-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2AllowedImagesSetting.html) cmdlet。

```
Disable-EC2AllowedImagesSetting
```

------

## 獲取允許的 AMI 條件
<a name="identify-allowed-amis-state-and-criteria"></a>

您可獲取允許的 AMI 設定的目前狀態及允許的 AMI 條件。

------
#### [ Console ]

**如需獲取允許的 AMI 狀態及條件**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡的設定下****，選擇**允許的 AMIs**。

1. 在**允許的 AMI** 索引標籤上，將**允許的 AMI 設定**設定為**已啟用**、**已停用**或**稽核模式**。

1. 若允許的 AMI 狀態為**已啟用**或**稽核模式**、**AMI 條件**，會顯示 JSON 格式的 AMI 條件。

------
#### [ AWS CLI ]

**如需獲取允許的 AMI 狀態及條件**  
請使用 [get-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-allowed-images-settings.html) 命令。

```
aws ec2 get-allowed-images-settings
```

在下面的範例輸出中，狀態為 `audit-mode`，且映像條件已在帳戶中設定。

```
{
    "State": "audit-mode",
    "ImageCriteria": [
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ],
    "ManagedBy": "account"
}
```

------
#### [ PowerShell ]

**如需獲取允許的 AMI 狀態及條件**  
使用 [Get-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2AllowedImagesSetting.html) cmdlet。

```
Get-EC2AllowedImagesSetting | Select-Object `
    State, `
    ManagedBy, `
    @{Name='ImageProviders'; Expression={($_.ImageCriteria.ImageProviders)}}, `
    @{Name='MarketplaceProductCodes'; Expression={($_.ImageCriteria.MarketplaceProductCodes)}}, `
    @{Name='ImageNames'; Expression={($_.ImageCriteria.ImageNames)}}, `
    @{Name='MaximumDaysSinceCreated'; Expression={($_.ImageCriteria.CreationDateCondition.MaximumDaysSinceCreated)}}, `
    @{Name='MaximumDaysSinceDeprecated'; Expression={($_.ImageCriteria.DeprecationTimeCondition.MaximumDaysSinceDeprecated)}}
```

在下面的範例輸出中，狀態為 `audit-mode`，且映像條件已在帳戶中設定。

```
State      : audit-mode
ManagedBy  : account
ImageProviders            : {123456789012, 123456789013, 123456789014, amazon}
MarketplaceProductCodes   : {abcdefg1234567890}
ImageNames                : {golden-ami-*}
MaximumDaysSinceCreated  : 300
MaximumDaysSinceDeprecated: 0
```

------

## 尋找允許的 AMI
<a name="identify-amis-that-meet-allowed-amis-criteria"></a>

您可尋找依據目前允許的 AMI 條件而被允許或不被允許的 AMI。

**注意**  
允許的 AMI 必須為稽核模式。

------
#### [ Console ]

**如需檢查 AMI 是否滿足允許的 AMI 條件**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 請選取 AMI。

1. 在**詳細資料**索引標籤 (如選取核取方塊) 或在摘要區域 (如選取 AMI ID)，找到**允許映像**欄位。
   + **是** – AMI 滿足允許的 AMI 條件。在啟用允許的 AMI 之後，您帳戶中的使用者將可使用此 AMI。
   + **否** – AMI 不滿足允許的 AMI 條件。

1. 在導覽窗格中，選擇 **AMI Catalog** (AMI 型錄)。

   當 AMI 標記為**不允許**時，表示其不符合允許 AMI 條件。當啟用允許 AMI 時，您帳戶的使用者將無法看到或使用此 AMI。

------
#### [ AWS CLI ]

**如需檢查 AMI 是否滿足允許的 AMI 條件**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query Images[].ImageAllowed \
    --output text
```

以下為範例輸出。

```
True
```

**如需尋找滿足允許的 AMI 條件的 AMI**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --filters "Name=image-allowed,Values=true" \
    --max-items 10 \
    --query Images[].ImageId
```

以下為範例輸出。

```
ami-000eaaa8be2fd162a
ami-000f82db25e50de8e
ami-000fc21eb34c7a9a6
ami-0010b876f1287d7be
ami-0010b929226fe8eba
ami-0010957836340aead
ami-00112c992a47ba871
ami-00111759e194abcc1
ami-001112565ffcafa5e
ami-0011e45aaee9fba88
```

------
#### [ PowerShell ]

**如需檢查 AMI 是否滿足允許的 AMI 條件**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).ImageAllowed
```

以下為範例輸出。

```
True
```

**如需尋找滿足允許的 AMI 條件的 AMI**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
Get-EC2Image `
    -Filter @{Name="image-allows";Values="true"} `
    -MaxResult 10 | `
    Select ImageId
```

以下為範例輸出。

```
ami-000eaaa8be2fd162a
ami-000f82db25e50de8e
ami-000fc21eb34c7a9a6
ami-0010b876f1287d7be
ami-0010b929226fe8eba
ami-0010957836340aead
ami-00112c992a47ba871
ami-00111759e194abcc1
ami-001112565ffcafa5e
ami-0011e45aaee9fba88
```

------

## 尋找透過不允許的 AMI 啟動的執行個體
<a name="identify-instances-with-allowed-AMIs"></a>

您可確定使用不滿足允許的 AMI 條件的 AMI 啟動的執行個體。

------
#### [ Console ]

**如需檢查識別執行個體是否使用不允許的 AMI 啟動**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體。

1. 在**詳細資訊**索引標籤的**執行個體詳細資訊**下，找到**允許的映像**。
   + **是** – AMI 滿足允許的 AMI 條件。
   + **否** – AMI 不滿足允許的 AMI 條件。

------
#### [ AWS CLI ]

**如需尋找使用不允許的 AMI 啟動的執行個體**  
請使用 `image-allowed` 篩選條件並搭配 [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) 命令。

```
aws ec2 describe-instance-image-metadata \
    --filters "Name=image-allowed,Values=false" \
    --query "InstanceImageMetadata[*].[InstanceId,ImageMetadata.ImageId]" \
    --output table
```

以下為範例輸出。

```
--------------------------------------------------
|          DescribeInstanceImageMetadata         |
+----------------------+-------------------------+
|  i-08fd74f3f1595fdbd |  ami-09245d5773578a1d6  |
|  i-0b1bf24fd4f297ab9 |  ami-07cccf2bd80ed467f  |
|  i-026a2eb590b4f7234 |  ami-0c0ec0a3a3a4c34c0  |
|  i-006a6a4e8870c828f |  ami-0a70b9d193ae8a799  |
|  i-0781e91cfeca3179d |  ami-00c257e12d6828491  |
|  i-02b631e2a6ae7c2d9 |  ami-0bfddf4206f1fa7b9  |
+----------------------+-------------------------+
```

------
#### [ PowerShell ]

**如需尋找使用不允許的 AMI 啟動的執行個體**  
使用 [Get-EC2InstanceImageMetadata](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceImageMetadata.html) cmdlet。

```
Get-EC2InstanceImageMetadata `
    -Filter @{Name="image-allowed";Values="false"} | `
    Select InstanceId, @{Name='ImageId'; Expression={($_.ImageMetadata.ImageId)}}
```

以下為範例輸出。

```
InstanceId          ImageId
----------          -------
i-08fd74f3f1595fdbd ami-09245d5773578a1d6
i-0b1bf24fd4f297ab9 ami-07cccf2bd80ed467f
i-026a2eb590b4f7234 ami-0c0ec0a3a3a4c34c0
i-006a6a4e8870c828f ami-0a70b9d193ae8a799
i-0781e91cfeca3179d ami-00c257e12d6828491
i-02b631e2a6ae7c2d9 ami-0bfddf4206f1fa7b9
```

------
#### [ AWS Config ]

您可以新增 **ec2-instance-launched-with-allowed-ami** AWS Config 規則、根據您的需求進行設定，然後使用它來評估您的執行個體。

如需詳細資訊，請參閱《 *AWS Config 開發人員指南*》中的[新增 AWS Config 規則](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_add-rules.html)和 [ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html)。

------

# 在 Amazon EC2 中公開提供您的 AMI
<a name="sharingamis-intro"></a>

您可以與所有人共用 AMI，使其可公開使用 AWS 帳戶。

如果您希望阻止公開共用您的 AMI，則可以啟用*封鎖 AMI 的公有存取權*。這樣可以阻止任何公開 AMI 的嘗試，有助於防止未經授權的存取和 AMI 資料的潛在濫用。請注意，啟用封鎖公開存取並不會影響您已公開提供的 AMI；它們仍然可以公開使用。如需詳細資訊，請參閱[了解封鎖 AMI 的公有存取權](block-public-access-to-amis.md)。

若要只允許特定帳戶使用 AMI 來啟動執行個體，請參閱 [與特定 AWS 帳戶共用 AMI](sharingamis-explicit.md)。

**Topics**
+ [考量事項](#considerations-for-sharing-public-AMIs)
+ [與所有 AWS 帳戶共用 AMI （公開共用）](#share-an-ami-publicly)

## 考量事項
<a name="considerations-for-sharing-public-AMIs"></a>

在將 AMI 設定為公有之前，請考慮以下項目。
+ **擁有權** – 若要公開 AMI，您的 AWS 帳戶 必須擁有 AMI。
+ **區域** - AMI 是一種區域性的資源。共享 AMI 後，只能從共享 AMI 的區域中使用 AMI。若要讓 AMI 在其他區域可用，請將 AMI 複製到該區域，然後共用。如需詳細資訊，請參閱[複製 Amazon EC2 AMI](CopyingAMIs.md)。
+ **封鎖公開存取** – 若要公開共用 AMI，必須在將公開共用 AMI 的每個區域中停用[封鎖 AMI 的公有存取權](block-public-access-to-amis.md)。公開共用 AMI 後，您可以重新啟用「封鎖 AMI 的公有存取權」，以防止進一步公開共用您的 AMI。
+ **部分 AMI 無法設定為公有** - 如果您的 AMI 有下列任一情況，則無法將其設定為公有 (但您可以[與指定的 AWS 帳戶共用 AMI](sharingamis-explicit.md))：
  + 加密磁碟區
  + 加密磁碟區的快照
  + 產品代碼
+ **避免敏感資料外洩** - 若要避免共享 AMI 時洩漏敏感資料，請詳讀 [建立共用 Linux AMI 的建議](building-shared-amis.md) 中的安全性考量，並遵照推薦的動作進行。
+ **使用** - 共享 AMI 後，使用者只能從 AMI 啟動執行個體。他們無法刪除、共用或修改它。不過，他們在使用您的 AMI 啟動了執行個體之後，就可以從其啟動的執行個體建立 AMI。
+ **自動棄用** - 在預設情況下，所有公用 AMI 的棄用日期都設定為自 AMI 建立日期起兩年。您可將棄用日期設定為早於兩年。若要取消棄用日期，或將棄用移至稍後日期，您必須僅[與特定 共用 AMI，使其 AWS 帳戶](sharingamis-explicit.md)成為私有。
+ **移除過時的 AMIs** – 在公有 AMI 到達其棄用日期後，如果六個月或更長時間沒有從 AMI 啟動新的執行個體， AWS 則 會移除公有共用屬性，讓過時的 AMIs 不會出現在公有 AMI 清單中。
+ **帳單** – 當其他 使用 AMI AWS 帳戶 啟動執行個體時，您不需要付費。使用 AMI 啟動執行個體的帳戶會根據它們啟動的執行個體計費。

## 與所有 AWS 帳戶共用 AMI （公開共用）
<a name="share-an-ami-publicly"></a>

將 AMI 公有化之後，可以在主控台的**社群 AMI** 中使用，您可以從 EC2 主控台左側導覽器中的 **AMI 目錄**存取，也可在使用主控台啟動執行個體時進行存取。請注意，AMI 公有化後要經過一段時間才會出現在 **Community AMI** (社群 AMI) 內。

------
#### [ Console ]

**使 AMI 公有化**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 從清單中選取您的 AMI，然後選取 **Actions** (動作)、**Edit AMI permissions** (編輯 AMI 許可)。

1. 在 **AMI 可用性**下，選擇**公有**。

1. 選擇**儲存變更**。

------
#### [ AWS CLI ]

每個 AMI 都有一個`launchPermission`屬性，可控制除了擁有者的 AWS 帳戶之外，還允許使用該 AMI 來啟動執行個體。透過修改 AMI 的 `launchPermission` 屬性，您可以將 AMI 設為公有 （授予所有 的啟動許可 AWS 帳戶)，或僅與您指定的 AWS 帳戶 共用。

您可在具有 AMI 啟動許可的帳戶清單中新增或移除帳戶 ID。若要將 AMI 設定為公有，請指定 `all` 群組。您可同時指定公有和明確啟動許可。

**使 AMI 公有化**

1. 如下所示，使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 命令，新增 `all` 群組至指定 AMI 的 `launchPermission` 清單。

   ```
   aws ec2 modify-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --launch-permission "Add=[{Group=all}]"
   ```

1. 若要確認 AMI 的啟動許可，請使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 命令。

   ```
   aws ec2 describe-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --attribute launchPermission
   ```

1. (選用) 若要重新將 AMI 設定為私有，請從啟動許可中移除 `all` 群組。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

   ```
   aws ec2 modify-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --launch-permission "Remove=[{Group=all}]"
   ```

------
#### [ PowerShell ]

每個 AMI 都有一個`launchPermission`屬性，可控制除了擁有者的 AWS 帳戶之外，還允許使用該 AMI 來啟動執行個體。透過修改 AMI 的 `launchPermission` 屬性，您可以將 AMI 設為公有 （授予所有 的啟動許可 AWS 帳戶)，或僅與您指定的 AWS 帳戶 共用。

您可在具有 AMI 啟動許可的帳戶清單中新增或移除帳戶 ID。若要將 AMI 設定為公有，請指定 `all` 群組。您可同時指定公有和明確啟動許可。

**使 AMI 公有化**

1. 如下所示，使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) 命令，新增 `all` 群組至指定 AMI 的 `launchPermission` 清單。

   ```
   Edit-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission `
       -OperationType add `
       -UserGroup all
   ```

1. 若要確認 AMI 的啟動許可，請使用下列 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) 命令。

   ```
   Get-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission
   ```

1. (選用) 若要重新將 AMI 設定為私有，請從啟動許可中移除 `all` 群組。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

   ```
   Edit-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission `
       -OperationType remove `
       -UserGroup all
   ```

------

# 了解封鎖 AMI 的公有存取權
<a name="block-public-access-to-amis"></a>

若要阻止公開共用您的 AMI，您可以在帳戶層級啟用*封鎖 AMI 的公有存取權*。

啟用「封鎖公有存取權」時，將會自動封鎖任何將 AMI 公開的嘗試。但是，若您已有公有 AMI，則其將保持公開可用。

若要公開共用 AMI，則需要停用封鎖公有存取權。完成共用後，最佳實務是重新啟用「封鎖公有存取權」，以防止任何非預期性公開共用您的 AMI。

**注意**  
此設定是在帳戶層級配置，可直接在帳戶中設定，或使用宣告式政策設定。它必須在您想要防止公開共用 AMIs的每個 AWS 區域 中設定。您可使用宣告式政策同時在多個區域及多個帳戶套用設定。使用宣告式政策時，您無法直接在帳戶中修改設定。本主題說明如何直接在帳戶內配置設定。如需使用宣告式政策的相關資訊，請參閱「AWS Organizations 使用者指南」**中的[宣告式政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

您可以將 IAM 許可限制為管理員使用者，這樣便只有他們才能啟用或停用「封鎖 AMI 的公有存取權」。

**Topics**
+ [預設設定](#block-public-access-to-amis-default-settings)
+ [管理封鎖 AMI 的公有存取權設定](manage-block-public-access-for-amis.md)

## 預設設定
<a name="block-public-access-to-amis-default-settings"></a>

根據您的帳戶是新帳戶還是現有帳戶，以及您是否擁有公有 AMI，**封鎖 AMI 的公有存取權**設定預設為啟用或停用。下表列出了預設的設定：


| AWS 帳戶 | 封鎖 AMI 預設設定的公有存取權 | 
| --- | --- | 
| 新帳戶 | 已啟用 | 
|  沒有公有 AMI 的現有帳戶 ¹  | 已啟用 | 
|  具有一個或多個公有 AMI 的現有帳戶  | Disabled | 

¹ 如果您的帳戶在 2023 年 7 月 15 日或之後擁有一個或多個公有 AMI，即使您隨後將所有 AMI 設為私有，依預設會停用您帳戶的**封鎖 AMI 的公有存取權**。

# 管理封鎖 AMI 的公有存取權設定
<a name="manage-block-public-access-for-amis"></a>

您可管理封鎖您 AMI 的公有存取權設定，以控制可否公開分享 AMI。您可使用 Amazon EC2 主控台或 AWS CLI來啟用、停用或檢視 AMI 目前的封鎖公有存取權狀態。

## 檢視封鎖 AMI 的公有存取權的狀態
<a name="get-block-public-access-state-for-amis"></a>

若要查看您帳戶中 AMI 的公開共用是否已封鎖，您可以檢視封鎖 AMI 之公有存取權的狀態。您必須檢視您希望查看您的 AMI 的公開共用是否已封鎖之每個 AWS 區域 的狀態。

**所需的許可**  
若要取得目前封鎖 AMI 的公有存取權設定，您必須擁有 `GetImageBlockPublicAccessState` IAM 許可。

------
#### [ Console ]

**在指定區域中檢視封鎖 AMI 的公有存取權的狀態**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽列 (位於畫面頂端) 中，選取要檢視封鎖 AMI 的公有存取權的狀態的區域。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡片**的設定**下，選擇**資料保護和安全性**。

1. 在**封鎖 AMI 的公有存取權**下，請勾選**公有存取權**欄位。值可能是**已封鎖新的公開共用**，也可能是**已允許新的公開共用**。

------
#### [ AWS CLI ]

**若要取得封鎖 AMI 的公有存取權狀態**  
使用 [get-image-block-public-access-state](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-image-block-public-access-state.html) 命令。此值為 `block-new-sharing` 或 `unblocked`。

**範例：針對特定區域**

```
aws ec2 get-image-block-public-access-state --region us-east-1
```

`ManagedBy` 欄位指示配置設定的實體。在此範例中，`account` 表示設定是直接在帳戶內配置。值為 `declarative-policy` 表示設定是透過宣告式政策來配置。如需詳細資訊，請參閱「AWS Organizations 使用者指南」**中的[宣告式政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

```
{
    "ImageBlockPublicAccessState": "block-new-sharing",
    "ManagedBy": "account"
}
```

**範例：針對帳戶中的所有區域**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-image-block-public-access-state \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

以下為範例輸出。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       unblocked
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**若要取得封鎖 AMI 的公有存取權狀態**  
使用 [Get-EC2ImageBlockPublicAccessState](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageBlockPublicAccessState.html) cmdlet。此值為 `block-new-sharing` 或 `unblocked`。

**範例：針對特定區域**

```
Get-EC2ImageBlockPublicAccessState -Region us-east-1
```

以下為範例輸出。

```
block-new-sharing
```

**範例：針對帳戶中的所有區域**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
        [PSCustomObject]@{
            Region   = $_
            PublicAccessState = (Get-EC2ImageBlockPublicAccessState -Region $_)
        }
} | `
Format-Table -AutoSize
```

以下為範例輸出。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

## 啟用「封鎖 AMI 的公有存取權」
<a name="enable-block-public-access-for-amis"></a>

若要阻止公開共用您的 AMI，請在帳戶層級啟用「封鎖 AMI 的公有存取權」。您必須在您希望阻止公開共用您的 AMI 的每個 AWS 區域 中啟用「封鎖 AMI 的公有存取權」。若您已有公有 AMI，則它們將保持公開可用。

**所需的許可**  
若要啟用封鎖 AMI 的公有存取權設定，您必須擁有 `EnableImageBlockPublicAccess` IAM 許可。

**考量事項**
+ 可能最多需要 10 分鐘的時間來設定此設定。在此期間，若描述公有存取權狀態，回應為 `unblocked`。完成組態設定後，回應為 `block-new-sharing`。

------
#### [ Console ]

**在指定區域中啟用 AMI 的封鎖公開存取**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽列 (位於畫面頂端) 中，選取要啟用「封鎖 AMI 的公有存取權」的區域。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡片**的設定**下，選擇**資料保護和安全性**。

1. 在**封鎖 AMI 的公有存取權**下，選擇**管理**。

1. 選取**封鎖新的公開共用**核取方塊，然後選擇**更新**。

------
#### [ AWS CLI ]

**啟用封鎖 AMI 的公有存取權**  
使用 [enable-image-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-block-public-access.html) 命令。

**範例：針對特定區域**

```
aws ec2 enable-image-block-public-access \
--region us-east-1 \
--image-block-public-access-state block-new-sharing
```

以下為範例輸出。

```
{ 
    "ImageBlockPublicAccessState": "block-new-sharing"
}
```

**範例：針對帳戶中的所有區域**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 enable-image-block-public-access \
            --region $region \
            --image-block-public-access-state block-new-sharing \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

以下為範例輸出。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       block-new-sharing
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**啟用封鎖 AMI 的公有存取權**  
使用 [Enable-EC2ImageBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageBlockPublicAccess.html) 命令。

**範例：針對特定區域**

```
Enable-EC2ImageBlockPublicAccess `
    -Region us-east-1 `
    -ImageBlockPublicAccessState block-new-sharing
```

以下為範例輸出。

```
Value
-----
block-new-sharing
```

**範例：針對帳戶中的所有區域**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (
        Enable-EC2ImageBlockPublicAccess `
         -Region $_ `
         -ImageBlockPublicAccessState block-new-sharing)
    }
} | `
Format-Table -AutoSize
```

以下為範例輸出。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

## 停用「封鎖 AMI 的公有存取權」
<a name="disable-block-public-access-for-amis"></a>

若要允許您帳戶中的使用者公開共用您的 AMI，請在帳戶層級停用「封鎖 AMI 的公有存取權」。在您要允許公開共用 AMIs 的每個 AWS 區域 中，您必須停用封鎖 AMIs的公開存取。

**所需的許可**  
若要停用封鎖 AMI 的公有存取權設定，您必須擁有 `DisableImageBlockPublicAccess` IAM 許可。

**考量事項**
+ 可能最多需要 10 分鐘的時間來設定此設定。在此期間，若描述公有存取權狀態，回應為 `block-new-sharing`。完成組態設定後，回應為 `unblocked`。

------
#### [ Console ]

**在指定區域中停用 AMI 的封鎖公開存取**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽列 (位於畫面頂端) 中，選取要停用「封鎖 AMI 的公有存取權」的區域。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡片**的設定**下，選擇**資料保護和安全性**。

1. 在**封鎖 AMI 的公有存取權**下，選擇**管理**。

1. 清除**封鎖新的公開共用**核取方塊，然後選擇**更新**。

1. 出現確認提示時，請輸入 **confirm**，然後選擇**允許公開共用**。

------
#### [ AWS CLI ]

**停用封鎖 AMI 的公有存取權**  
使用 [disable-image-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-block-public-access.html) 命令。

**範例：針對特定區域**

```
aws ec2 disable-image-block-public-access --region us-east-1
```

以下為範例輸出。

```
{
   "ImageBlockPublicAccessState": "unblocked"
}
```

**範例：針對帳戶中的所有區域**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 disable-image-block-public-access \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

以下為範例輸出。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       unblocked
eu-north-1       unblocked
eu-west-3        unblocked
...
```

------
#### [ PowerShell ]

**停用封鎖 AMI 的公有存取權**  
使用 [Disable-EC2ImageBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageBlockPublicAccess.html) cmdlet。

**範例：針對特定區域**

```
Disable-EC2ImageBlockPublicAccess -Region us-east-1
```

以下為範例輸出。

```
Value
-----
unblocked
```

**範例：針對帳戶中的所有區域**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (Disable-EC2ImageBlockPublicAccess -Region $_)
    }
} | `
Format-Table -AutoSize
```

以下為範例輸出。

```
Region         PublicAccessState
------         -----------------
ap-south-1     unblocked
eu-north-1     unblocked
eu-west-3      unblocked
...
```

------

# 與組織或組織單位共用 AMI
<a name="share-amis-with-organizations-and-OUs"></a>

 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html) 是一種帳戶管理服務，可讓您將多個 合併 AWS 帳戶 到您建立並集中管理的組織。除了[與指定的帳戶共享 AMI](sharingamis-explicit.md) 之外，您還可以與組織或您建立的組織單位 (OU) 共享 AMI。

組織是您建立來合併並集中管理 AWS 帳戶的實體。您可以將帳戶組織為階層式、類似樹狀目錄的結構，其中的[根](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#root)位於頂層，而[組織單位](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit)在組織根下形成巢狀。每個帳戶都可以直接新增至根中，或放在階層中的其中一個 OU 中。如需帳戶類型的詳細資訊，請參閱*「AWS Organizations 使用者指南」*中的 [AWS Organizations 術語與概念](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)。

當您與組織或 OU 共用 AMI 時，所有子帳戶都可以存取 AMI。例如，在下圖中，與頂層 OU 共用 AMI (由編號 **1** 的箭頭表示)。在該頂層 OU 之下形成巢狀的所有 OU 和帳戶 (由編號 **2** 的虛線表示) 也可以存取 AMI。組織中的帳戶和虛線外的 OU (由編號 **3** 表示) 無法存取 AMI，因為它們不是與其共用 AMI 之 OU 的子項。

![\[與 OU 共用 AMI，而且所有子 OU 和帳戶都可以存取 AMI。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ami-share-with-orgs-and-ous.png)


**Topics**
+ [考量事項](#considerations-org-ou)
+ [取得組織或組織單位的 ARN](get-org-ou-ARN.md)
+ [允許組織和 OU 使用 KMS 金鑰](allow-org-ou-to-use-key.md)
+ [管理與組織或 OU 的 AMI 共用](share-amis-org-ou-manage.md)

## 考量事項
<a name="considerations-org-ou"></a>

與特定組織或組織單位共享 AMI 時，請考慮以下項目。
+ **擁有權** – 若要共用 AMI，您的 AWS 帳戶 必須擁有 AMI。
+ **共用限制** – AMI 擁有者可以與任何組織或 OU 共用 AMI，包括他們不是其成員的組織和 OU。

  如需可在區域內共用 AMI 的最大實體數量，請參閱 [Amazon EC2 服務配額](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)。
+ **標籤** – 您無法共用使用者定義的標籤 (連接至 AMI 的標籤)。當您共用 AMI 時，使用者定義的標籤不適用於與 AMI 共用的組織或 OU AWS 帳戶 中的任何 。
+ **ARN 格式** - 在命令中指定組織或 OU 時，請務必使用正確的 ARN 格式。如果只指定 ID，則您會收到錯誤，例如，如果只指定 `o-123example` 或 `ou-1234-5example`。

  正確的 ARN 格式：
  + 組織 ARN：`arn:aws:organizations::111122223333:organization/organization-id`
  + OU ARN：`arn:aws:organizations::111122223333:ou/organization-id/ou-id`

  其中：
  + *`111122223333`* 為管理帳戶 12 位數帳戶 ID 範例。如果不知道管理帳號，您可以描述組織或組織單位以取得 ARN，其中包括管理帳號。如需詳細資訊，請參閱 [取得組織或組織單位的 ARN](get-org-ou-ARN.md)。
  + *`organization-id`* 是組織 ID，例如，`o-123example`。
  + *`ou-id`* 是組織單位 ID，例如，`ou-1234-5example`。

  如需 ARN 格式的詳細資料，請參閱「IAM 使用者指南」**中的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)。
+ **加密和金鑰** – 您可以共用未加密和加密快照所支援的 AMI。
  + 加密快照必須透過客戶受管金鑰進行加密。您無法共用由使用預設 AWS 受管金鑰加密的快照所支援的 AMIs。
  + 如果您共用加密快照所支援的 AMI，則必須允許組織或 OU 使用客戶受管金鑰，而這些金鑰用來加密快照。如需詳細資訊，請參閱[允許組織和 OU 使用 KMS 金鑰](allow-org-ou-to-use-key.md)。
+ **區域** - AMI 是一種區域性的資源。共享 AMI 後，只能從共享 AMI 的區域中使用 AMI。若要讓 AMI 在其他區域可用，請將 AMI 複製到該區域，然後共用。如需詳細資訊，請參閱[複製 Amazon EC2 AMI](CopyingAMIs.md)。
+ **使用** - 共享 AMI 後，使用者只能從 AMI 啟動執行個體。他們無法刪除、共用或修改它。不過，他們在使用您的 AMI 啟動了執行個體之後，就可以從其啟動的執行個體建立 AMI。
+ **帳單** – 當其他 使用 AMI AWS 帳戶 啟動執行個體時，您不需要付費。使用 AMI 啟動執行個體的帳戶會根據它們啟動的執行個體計費。

# 取得組織或組織單位的 ARN
<a name="get-org-ou-ARN"></a>

組織和組織單位 ARN 包含 12 位數的管理帳號。如果不知道管理帳號，您可以描述組織或組織單位以取得其中每一個的 ARN。在下面的範例中，`123456789012` 為管理帳號。

**所需的許可**  
在取得 ARN 之前，您必須具有描述組織和組織單位的許可。下列政策提供必要的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "organizations:Describe*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ AWS CLI ]

**取得組織的 ARN**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html) 命令。新增 `--query` 選項，以便僅傳回組織 ARN。

```
aws organizations describe-organization --query 'Organization.Arn'
```

以下為範例輸出。

```
"arn:aws:organizations::123456789012:organization/o-1234567abc"
```

**取得組織單位的 ARN**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organizational-unit.html](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organizational-unit.html) 命令。使用 `--query` 參數，以便僅傳回組織單位 ARN。

```
aws organizations describe-organizational-unit \
    --organizational-unit-id ou-a123-b4567890 \
    --query 'OrganizationalUnit.Arn'
```

以下為範例輸出。

```
"arn:aws:organizations::123456789012:ou/o-1234567abc/ou-a123-b4567890"
```

------
#### [ PowerShell ]

**取得組織的 ARN**  
使用 [Get-ORGOrganization](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ORGOrganization.html) cmdlet。

```
(Get-ORGOrganization).Arn
```

以下為範例輸出。

```
arn:aws:organizations::123456789012:organization/o-1234567abc
```

**取得組織單位的 ARN**  
使用 [Get-ORGOrganizationalUnit](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ORGOrganizationalUnit.html) cmdlet。

```
(Get-ORGOrganizationalUnit -OrganizationalUnitId "ou-a123-b4567890").Arn
```

以下為範例輸出。

```
arn:aws:organizations::123456789012:ou/o-1234567abc/ou-a123-b4567890
```

------

# 允許組織和 OU 使用 KMS 金鑰
<a name="allow-org-ou-to-use-key"></a>

如果您共用加密快照支援的 AMI，您還必須允許組織或組織單位 (OU) 使用用於加密快照的 KMS 金鑰。

**注意**  
加密快照必須透過*客戶受管*金鑰進行加密。您無法共用由使用預設 AWS 受管金鑰加密的快照所支援的 AMIs。

若要控制 KMS 金鑰的存取權，您可在[金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths) 條件金鑰，僅允許特定主體對指定動作的權限。委託人可以是使用者、IAM 角色、聯合身分使用者或 AWS 帳戶 根使用者。

條件金鑰使用方式如下：
+ `aws:PrincipalOrgID` - 允許屬於指定 ID 所代表組織的任何主體。
+ `aws:PrincipalOrgPaths` - 允許屬於指定路徑所代表 OU 的任何主體。

若要授予組織 (包括所屬的 OU 和帳戶) 使用 KMS 金鑰的權限，請將以下陳述式新增至金鑰政策。

```
{
    "Sid": "Allow access for organization root",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
        "kms:Describe*",
        "kms:List*",
        "kms:Get*",
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:CreateGrant"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:PrincipalOrgID": "o-123example"
        }
    }
}
```

若要授予特定 OU (及其所屬帳戶) 使用 KMS 金鑰的權限，您可以使用與下列範例類似的政策。

```
{
        "Sid": "Allow access for specific OUs and their descendants",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "kms:Describe*",
            "kms:List*",
            "kms:Get*",
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:CreateGrant"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": "o-123example"
            },
            "ForAnyValue:StringLike": {
                "aws:PrincipalOrgPaths": [
                    "o-123example/r-ab12/ou-ab12-33333333/*",
                    "o-123example/r-ab12/ou-ab12-22222222/*"
                ]
            }
        }
}
```

如需更多條件陳述式範例，請參閱*「IAM 使用者指南」*中的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths)。

如需跨帳户存取權的更多相關資訊，請參閱「AWS Key Management Service 開發人員指南」**中的[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

# 管理與組織或 OU 的 AMI 共用
<a name="share-amis-org-ou-manage"></a>

您可以管理與組織和組織單位 (OU) 共用的 AMI，以控制其可否啟動 Amazon EC2 執行個體。

## 查看與之共用 AMI 的組織和 OU
<a name="decribe-ami-launch-permissions"></a>

您可尋找您與之共享 AMI 的組織和 OU

------
#### [ Console ]

**檢查與之共用 AMI 的組織和 OU**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 從清單中選取 AMI，選取 **Permissions** (許可) 索引標籤，然後向下滾動至 **Shared organizations/OUs** (共用的組織/OU)。

   若要尋找與您共用的 AMI，請參閱[尋找用於 Amazon EC2 執行個體的共用 AMI](usingsharedamis-finding.md)。

------
#### [ AWS CLI ]

**檢查與之共用 AMI 的組織和 OU**  
請使用 `launchPermission` 屬性並搭配 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 命令。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

以下是回應範例。

```
{
    "ImageId": "ami-0abcdef1234567890",
    "LaunchPermissions": [
        {
            "OrganizationalUnitArn": "arn:aws:organizations::111122223333:ou/o-123example/ou-1234-5example"
        }
    ]
}
```

------
#### [ PowerShell ]

**檢查與之共用 AMI 的組織和 OU**  
使用 [Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) cmdlet。

```
Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

## 與組織或 OU 共用 AMI
<a name="share-amis-org-ou"></a>

您可與組織或 OU 共享 AMI。

**注意**  
共享 AMI 時，不需要共享 AMI 所參考的 Amazon EBS 快照。需要共享的只有 AMI 本身，而且系統可自動讓執行個體存取參考的 EBS 快照，以進行啟動。不過，您的確需要共用 KMS 金鑰，而這些金鑰用來加密 AMI 參考的快照。如需詳細資訊，請參閱[允許組織和 OU 使用 KMS 金鑰](allow-org-ou-to-use-key.md)。

------
#### [ Console ]

**與組織或 OU 共用 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在清單中選取您的 AMI，然後選取 **Actions** (動作)、**Edit AMI permissions** (編輯 AMI 許可)。

1. 在 **AMI availability** (AMI 可用性) 下，選擇 **Private** (私有)。

1. 在 **Shared organizations/OUs** (共用組織/OU) 旁邊，選擇 **Add organization/OU ARN** (新增組織/OU ARN)。

1. 對於 **Organization/OU ARN** (組織/OU ARN)，輸入要與之共用 AMI 的組織 ARN 或 OU ARN，然後選擇 **Share AMI** (共用 AMI)。請注意，您必須指定完整的 ARN，而不只是 ID。

   若要與多個組織或 OU 共用此 AMI，請重覆此步驟，直到新增所有需要的組織或 OU。

1. 完成後，請選擇 **Save changes** (儲存變更)。

1. (選用) 若要查看與其共用 AMI 的組織或 OU，請從清單中選取 AMI，然後選取 **Permissions** (許可) 索引標籤，向下滾動至 **Shared organizations/OUs** (共用的組織/OU)。若要尋找與您共用的 AMI，請參閱[尋找用於 Amazon EC2 執行個體的共用 AMI](usingsharedamis-finding.md)。

------
#### [ AWS CLI ]

**與組織共用 AMI**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 命令，可將所指定 AMI 的啟動許可授予給指定組織。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
```

**與 OU 共用 AMI**  
[modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 命令可將所指定 AMI 的啟動許可授予指定的 OU。請注意，您必須指定完整的 ARN，而不只是 ID。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{OrganizationalUnitArn=arn:aws:organizations::123456789012:ou/o-123example/ou-1234-5example}]"
```

------
#### [ PowerShell ]

使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) 命令 (Tools for Windows PowerShell) 來共用 AMI，如下列範例所示。

**與組織或 OU 共用 AMI**  
下列命令可將所指定 AMI 的啟動許可授予指定的組織。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType add `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**停止與組織或 OU 共用 AMI**  
下列命令可從指定的組織移除所指定 AMI 的啟動許可。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType remove `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**停止與所有組織、OUs 和 共用 AMI AWS 帳戶**  
下列命令可從指定的 AMI 移除所有的公有和明確啟動許可。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

## 停止與組織或 OU 共用 AMI
<a name="stop-sharing-amis-org-ou"></a>

您可停止與組織或 OU 共享 AMI。

**注意**  
如果特定帳戶位於與其共用 AMI 的組織或 OU 中，則無法停止與該帳戶共用 AMI。如果您嘗試透過移除帳戶的啟動許可來停止共用 AMI，Amazon EC2 會傳回成功訊息。不過，會繼續與該帳戶共用 AMI。

------
#### [ Console ]

**停止與組織或 OU 共用 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在清單中選取您的 AMI，然後選取 **Actions** (動作)、**Edit AMI permissions** (編輯 AMI 許可)。

1. 在 **Shared organizations/OUs** (共用的組織/OU)，選取要停止與其共用 AMI 的組織或 OU，然後選取 **Remove Selected** (移除所選項)。

1. 完成後，請選擇 **Save changes** (儲存變更)。

1. (選用) 若要確認您已停止與組織或 OU 共用 AMI，請從清單中選取此 AMI，然後選取**Permissions** (許可) 索引標籤，向下滾動至 **Shared organizations/OUs** (共用的組織/OU)。

------
#### [ AWS CLI ]

**停止與組織或 OU 共用 AMI**  
請使用 [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 命令。此範例可從指定的組織中移除所指定 AMI 的啟動許可。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Remove=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
```

**停止與所有組織、OUs 和 共用 AMI AWS 帳戶**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/reset-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/reset-image-attribute.html) 命令。此範例可從指定的 AMI 中移除所有的公有和明確啟動許可。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

```
aws ec2 reset-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

------
#### [ PowerShell ]

**停止與組織或 OU 共用 AMI**  
使用 [Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) cmdlet。此範例可從指定的組織中移除所指定 AMI 的啟動許可。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType remove `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**停止與所有組織、OUs 和 共用 AMI AWS 帳戶**  
使用 [Reset-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Reset-EC2ImageAttribute.html) cmdlet。此範例可從指定的 AMI 中移除所有的公有和明確啟動許可。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute LaunchPermission
```

------

# 與特定 AWS 帳戶共用 AMI
<a name="sharingamis-explicit"></a>

您可以與特定 共用 AMI， AWS 帳戶 而不公開 AMI。您只需要 AWS 帳戶 IDs

 AWS 帳戶 ID 是可唯一識別 的 12 位數號碼`012345678901`，例如 AWS 帳戶。如需詳細資訊，請參閱 *AWS 帳戶管理 參考指南*中的[檢視 AWS 帳戶 識別符](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)。



## 考量事項
<a name="considerations-for-sharing-AMI-with-accounts"></a>

與特定 共用 AMIs時，請考慮下列事項 AWS 帳戶。
+ **擁有權** – 若要共用 AMI，您的 AWS 帳戶 必須擁有 AMI。
+ **共用限制** - 如需可在區域內共用 AMI 的最大實體數量，請參閱 [Amazon EC2 服務配額](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)。
+ **標籤** – 您無法共用使用者定義的標籤 (連接至 AMI 的標籤)。當您共用 AMI 時，使用者定義的標籤不適用於與 AWS 帳戶 AMI 共用的任何 。
+ **快照** – 共享 AMI 時，不需要共享 AMI 所參考的 Amazon EBS 快照。您可僅共享 AMI 本身；系統會為執行個體提供所參考 EBS 快照的存取權，供其啟動。不過，您必須共享任何用來加密快照的 KMS 金鑰，而 AMI 會參考這些快照。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的[共用 Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)。
+ **加密和金鑰** – 您可以共用未加密和加密快照所支援的 AMI。
  + 加密快照必須透過 KMS 金鑰進行加密。您無法共用透過預設 AWS 受管金鑰加密之快照支援的 AMI。
  + 如果您共用由加密快照支援的 AMI，您必須允許 AWS 帳戶 使用用來加密快照的 KMS 金鑰。如需詳細資訊，請參閱[允許組織和 OU 使用 KMS 金鑰](allow-org-ou-to-use-key.md)。若要設定當您使用客戶受管金鑰進行加密時啟動 Auto Scaling 執行個體所需的金鑰政策，請參閱《*Amazon EC2 Auto Scaling 使用者指南*》中的[搭配加密磁碟區使用的必要 AWS KMS key 政策](https://docs.aws.amazon.com/autoscaling/ec2/userguide/key-policy-requirements-EBS-encryption.html)。
+ **區域** - AMI 是一種區域性的資源。當您共用 AMI 時，其只能在該區域中使用。若要讓 AMI 在其他區域可用，請將 AMI 複製到該區域，然後共用。如需詳細資訊，請參閱[複製 Amazon EC2 AMI](CopyingAMIs.md)。
+ **使用** - 共享 AMI 後，使用者只能從 AMI 啟動執行個體。他們無法刪除、共用或修改它。不過，在使用您的 AMI 啟動了執行個體之後，他們可以從其執行個體建立 AMI。
+ **複製共享 AMI** – 如果其他帳戶中的使用者想要複製共享 AMI，則必須向他們授予用於支援 AMI 的儲存的讀取許可。如需詳細資訊，請參閱[跨帳戶複製](how-ami-copy-works.md#copy-ami-across-accounts)。
+ **帳單** – 當其他 使用 AMI AWS 帳戶 啟動執行個體時，您不需要付費。使用 AMI 啟動執行個體的帳戶會根據它們啟動的執行個體計費。

------
#### [ Console ]

**授予明確啟動許可**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 在清單中選取您的 AMI，然後選取 **Actions** (動作)、**Edit AMI permissions** (編輯 AMI 許可)。

1. 選擇 **Private (私有)**。

1. 在 **Shared accounts** (共享帳戶) 中，選擇 **Add account ID** (新增帳戶 ID)。

1. 針對 **AWS 帳戶 ID**，輸入您要與其共用 AMI 的 AWS 帳戶 ID，然後選擇**共用 AMI**。

   若要與多個帳戶共用此 AMI，請重覆步驟 5 和 6，直到您新增了所有必要的帳戶 ID。

1. 完成後，請選擇 **Save changes** (儲存變更)。

1. （選用） 若要檢視您已共用 AMI 的 AWS 帳戶 IDs，請在清單中選取 AMI，然後選擇**許可**索引標籤。若要尋找與您共用的 AMI，請參閱[尋找用於 Amazon EC2 執行個體的共用 AMI](usingsharedamis-finding.md)。

------
#### [ AWS CLI ]

請使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 命令來共享 AMI，如下列範例所示。

**授予明確啟動許可**  
下列範例可向指定的 AWS 帳戶授予指定 AMI 的啟動許可。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{UserId=123456789012}]"
```

**移除帳戶的啟動許可**  
下列範例可從指定的 AWS 帳戶移除指定 AMI 的啟動許可。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Remove=[{UserId=123456789012}]"
```

**移除所有的啟動許可**  
下列範例可從指定的 AMI 移除所有的公有和明確啟動許可。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

```
aws ec2 reset-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

------
#### [ PowerShell ]

使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) 命令 (Tools for Windows PowerShell) 來共用 AMI，如下列範例所示。

**授予明確啟動許可**  
下列範例可向指定的 AWS 帳戶授予指定 AMI 的啟動許可。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 ` 
    -Attribute launchPermission `
    -OperationType add `
    -UserId "123456789012"
```

**移除帳戶的啟動許可**  
下列範例可從指定的 AWS 帳戶移除指定 AMI 的啟動許可。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission -OperationType remove `
    -UserId "123456789012"
```

**移除所有的啟動許可**  
下列範例可從指定的 AMI 移除所有的公有和明確啟動許可。請注意，AMI 擁有者始終具備啟動許可，因此不受此命令影響。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

# 取消將 AMI 與您的 共用 AWS 帳戶
<a name="cancel-sharing-an-AMI"></a>

透過將帳戶新增到 AMI 的啟動許可，可以[與指定的 AWS 帳戶共用](sharingamis-explicit.md) Amazon Machine Image (AMI)。如果 AMI 已與 共用， AWS 帳戶 而且您不希望再與您的帳戶共用，您可以從 AMI 的啟動許可中移除您的帳戶。您可以執行 `cancel-image-launch-permission` AWS CLI 命令來執行此操作。執行此命令時，您的 AWS 帳戶 會從指定 AMI 的啟動許可中移除。若要尋找與 共用AMIs AWS 帳戶，請參閱 [尋找用於 Amazon EC2 執行個體的共用 AMI](usingsharedamis-finding.md)。

例如，您可能會取消與您的帳戶共用 AMI，以降低啟動與您共用的未使用或已棄用 AMI 的執行個體的可能性。當您取消與您的帳戶共用 AMI 時，它將不再出現在 EC2 主控台的任何 AMI 清單或 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 的輸出中。

**Topics**
+ [限制](#cancel-sharing-an-AMI-limitations)
+ [取消與您的帳戶共用 AMI](#cancel-image-launch-permission)

## 限制
<a name="cancel-sharing-an-AMI-limitations"></a>
+ 您可以從 AWS 帳戶 僅與 共用的 AMI 啟動許可中移除您的帳戶。您無法使用 `cancel-image-launch-permission` 從[與組織或組織單位 (OU) 共用的 AMI](share-amis-with-organizations-and-OUs.md) 的啟動許可中移除帳戶，也無法移除公用 AMI 的存取權。
+ 您無法從 AMI 的啟動許可中永久移除您的帳戶。AMI 擁有者可再次與您的帳戶共用 AMI。
+ AMI 是一種區域性的資源。執行 `cancel-image-launch-permission` 時，必須指定 AMI 所在的區域。在命令中指定區域，或使用 AWS\$1DEFAULT\$1REGION [環境變數](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)。
+ 只有 AWS CLI 和 SDKs支援從 AMI 的啟動許可中移除您的帳戶。EC2 主控台目前不支援此動作。

## 取消與您的帳戶共用 AMI
<a name="cancel-image-launch-permission"></a>

**注意**  
取消與您的帳戶共用 AMI 後，將無法復原。若要重新獲得對 AMI 的存取權，AMI 擁有者必須與您的帳戶共用它。

------
#### [ AWS CLI ]

**如需取消與您的帳戶共享 AMI**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-image-launch-permission.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-image-launch-permission.html) 命令。

```
aws ec2 cancel-image-launch-permission \
    --image-id ami-0abcdef1234567890 \
    --region us-east-1
```

------
#### [ PowerShell ]

**如需取消與您的帳戶共享 AMI**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/index.html](https://docs.aws.amazon.com/powershell/latest/reference/index.html) cmdlet。

```
Stop-EC2ImageLaunchPermission `
    -ImageId ami-0abcdef1234567890 `
    -Region us-east-1
```

------

# 建立共用 Linux AMI 的建議
<a name="building-shared-amis"></a>

請使用下列準則來減少可能遭受攻擊的範圍，以及改善所建立 AMI 的可靠性。

**重要**  
沒有任何一份清單可詳盡列出所有的安全性準則。請小心建置您的共享 AMI，並花些時間思考那些位置可能暴露機密資料。

**Topics**
+ [停用根使用者的密碼型態遠端登入](#public-amis-disable-password-logins-for-root)
+ [停用本機根存取](#restrict-root-access)
+ [移除 SSH 主機金鑰對](#remove-ssh-host-key-pairs)
+ [安裝公有金鑰登入資料](#public-amis-install-credentials)
+ [停用 sshd DNS 檢查 (選用)](#public-amis-disable-ssh-dns-lookups)
+ [移除敏感性資料](#public-amis-protect-yourself)

如果您要為 建置 AMIs AWS Marketplace，請參閱《 *AWS Marketplace 賣方指南*》中的[建置 AMIs 的最佳實務](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html)，以取得指導方針、政策和最佳實務。

## 停用根使用者的密碼型態遠端登入
<a name="public-amis-disable-password-logins-for-root"></a>

公用 AMI 使用固定的根密碼會帶來安全風險，且資訊會迅速向外散佈。即便仰賴使用者於第一次登入時變更密碼，都會留下一些可能遭到濫用的空窗。

若要解決此問題，請停用根使用者的密碼型態遠端登入。

**停用根使用者的密碼型態遠端登入**

1. 使用文字編輯器開啟 `/etc/ssh/sshd_config` 檔案，並找出下行：

   ```
   #PermitRootLogin yes
   ```

1. 將行變為：

   ```
   PermitRootLogin without-password
   ```

   此組態檔案的位置可能與您的發行版本不同，或您不是執行 OpenSSH。若是這種情況，請參閱相關文件。

## 停用本機根存取
<a name="restrict-root-access"></a>

使用共享 AMI 時，最佳實務之一就是停用直接根登入。若要停用，請登入運作中的執行個體，然後發出下列命令：

```
[ec2-user ~]$ sudo passwd -l root
```

**注意**  
此命令不會影響 `sudo` 的使用。

## 移除 SSH 主機金鑰對
<a name="remove-ssh-host-key-pairs"></a>

 如果您打算共享來自公用 AMI 的 AMI，請移除 `/etc/ssh` 中現有的 SSH 主機金鑰對。有其他人使用您的 AMI 啟動執行個體時，會強迫 SSH 產生新的唯一 SSH 金鑰對，藉此以改善安全性和減少發生「中間人」攻擊的可能性。

移除位在您系統中所有下列的金鑰檔案。
+  ssh\$1host\$1dsa\$1key 
+  ssh\$1host\$1dsa\$1key.pub 
+  ssh\$1host\$1key 
+  ssh\$1host\$1key.pub 
+  ssh\$1host\$1rsa\$1key 
+  ssh\$1host\$1rsa\$1key.pub 
+ ssh\$1host\$1ecdsa\$1key
+ ssh\$1host\$1ecdsa\$1key.pub
+ ssh\$1host\$1ed25519\$1key
+ ssh\$1host\$1ed25519\$1key.pub

您可以使用下列命令安全地移除所有這些檔案：

```
[ec2-user ~]$ sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
```

**警告**  
**shred** 等安全移除公用程式可能不會從儲存媒體中移除檔案的所有複本。檔案的隱藏複本可能由日誌檔案系統 (包含 Amazon Linux 預設 ext4)、快照、備份、RAID 和暫時性快取建立。若要了解詳細資訊，請參閱[銷毀文件](https://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html)。

**重要**  
如果您忘記從公用 AMI 中移除現有的 SSH 主機金鑰對，我們的定期稽核流程會通知您和執行您可能有安全風險之 AMI 執行個體的所有客戶。過一段短時間的寬限期後，我們會將 AMI 標示為私有。

## 安裝公有金鑰登入資料
<a name="public-amis-install-credentials"></a>

設定 AMI 避免使用密碼登入後，您必須確定使用者可用其他機制登入。

Amazon EC2 允許使用者在啟動執行個體時指定公私金鑰對名稱。為 `RunInstances` API 呼叫 (或透過命令列 API 工具) 提供有效的金鑰對名稱時，公有金鑰 (呼叫 `CreateKeyPair` 或 `ImportKeyPair` 後金鑰對中 Amazon EC2 保留在伺服器上的部分) 會透過執行個體中繼資料的 HTTP 查詢提供給執行個體。

若要透過 SSH 登入，您的 AMI 必須在開機時擷取金鑰值，並將其附加至 `/root/.ssh/authorized_keys` (或 AMI 上任何其他使用者帳戶的對等檔案)。使用者可用金鑰對啟動您 AMI 的執行個體並登入，無需根密碼。

包括 Amazon Linux 和 Ubuntu 等許多發行版本皆使用 `cloud-init` 套件來注入所設定使用者的公有金鑰登入資料。如果您的發行版本不支援 `cloud-init`，您可新增下列程式碼至系統啟動指令碼 (例如 `/etc/rc.local`)，以納入您在啟動時為根使用者指定的公有金鑰。

**注意**  
在下列範例中，IP 地址 http://169.254.169.254/ 是 link-local 地址且僅在執行個體中有效。

------
#### [ IMDSv2 ]

```
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
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/public-keys/0/openssh-key > /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key >> /root/.ssh/authorized_keys
        chmod 700 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
```

------
#### [ IMDSv1 ]

```
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key >> /root/.ssh/authorized_keys
        chmod 700 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
```

------

 這會套用到任何使用者；無需將其限制到 `root` 使用者。

**注意**  
重新綁定以此 AMI 為基礎的執行個體，會加入其啟動金鑰。若要避免加入金鑰，您必須清除 (或刪除) `authorized_keys` 檔案或將此檔案排除於重新綁定之外。

## 停用 sshd DNS 檢查 (選用)
<a name="public-amis-disable-ssh-dns-lookups"></a>

停用 sshd DNS 檢查會稍微降低 sshd 的安全性。但假如 DNS 解析失敗，SSH 登入仍能如預期運作。如果您不停用 sshd 檢查，DNS 解析失敗將封鎖所有登入。

**停用 sshd DNS 檢查**

1. 使用文字編輯器開啟 `/etc/ssh/sshd_config` 檔案，並找出下行：

   ```
   #UseDNS yes
   ```

1. 將行變為：

   ```
   UseDNS no
   ```

**注意**  
此組態檔案的位置可能與您的發行版本不同，或您不是執行 OpenSSH。若是這種情況，請參閱相關文件。

## 移除敏感性資料
<a name="public-amis-protect-yourself"></a>

我們建議您不要將機密資料或軟體存放在共享的任何 AMI 上。啟動共享 AMI 的使用者可能會重新綁定，並將其註冊為自己的 AMI。請按照以下準則幫助您避免一些容易遭到忽視的安全風險：
+ 建議使用 `--exclude directory` 的 `ec2-bundle-vol` 選項跳過含有您不想加入到套件內之機密資訊的任何目錄和子目錄。尤其請在綁定映像時排除所有使用者擁有的 SSH 公有/私有金鑰對和 SSH `authorized_keys` 檔案。Amazon 公有 AMI 會將這些資訊存放在根使用者的 `/root/.ssh`，和一般使用者的 `/home/user_name/.ssh/` 內。如需詳細資訊，請參閱[ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol)。
+ 綁定前務必刪除 shell 歷程記錄。如果您在同一 AMI 嘗試一次以上的套件上傳，shell 歷程記錄會包含您的存取金鑰。以下範例應該是您在從執行個體內綁定之前執行的最後一項命令。

  ```
  [ec2-user ~]$ shred -u ~/.*history
  ```
**警告**  
上面警告中提及的 **shred** 限制同樣適用於此處。  
請注意，bash 會在退出時將目前工作階段的歷程記錄寫入到磁碟。如果您在刪除 `~/.bash_history` 後登出執行個體，然後再重新登入，您會發現 `~/.bash_history` 已重新建立，並包含在先前工作階段中執行的所有命令。  
bash 以外的其他程式也會將歷程記錄寫入到磁碟。請小心使用，並移除或排除不必要以點開頭的檔案或以點開頭的目錄。
+ 綁定執行中的執行個體需要您的私有金鑰和 X.509 憑證。因此請將這些憑證和其他登入資料放在不會加入綁定的位置 (例如執行個體儲存體)。

# 使用 Amazon EventBridge 監控 AMI 事件
<a name="monitor-ami-events"></a>

當 Amazon Machine Image (AMI) 的狀態變更時，Amazon EC2 會產生傳送至 Amazon EventBridge (之前稱為 Amazon CloudWatch Events) 的事件。事件會以 JSON 格式傳送至預設 EventBridge 事件匯流排。您可以使用 Amazon EventBridge 來偵測並對這些事件做出反應。為此，您可以在 EventBridge 中建立觸發動作以回應事件的規則。例如，您可以建立 EventBridge 規則，以偵測 AMI 建立程序完成的時間，然後呼叫 Amazon SNS 主題來傳送電子郵件通知給您。

當 AMI 進入下列任何狀態時，Amazon EC2 會產生 `EC2 AMI State Change` 事件：
+ `available`
+ `failed`
+ `deregistered`
+ `disabled`

盡可能產生事件。

下表列出 AMI 操作和 AMI 可以進入的狀態。在該表中，**是**表示當對應操作執行時 AMI 可進入的狀態。


| AMI 操作 | available | failed | deregistered | disabled | 
| --- | --- | --- | --- | --- | 
| CopyImage | 是 | 是 |  |  | 
|  CreateImage  |  是  |  是  |  |  | 
|  CreateRestoreImageTask  | 是 | 是 |  |  | 
| DeregisterImage |  |  |  是  |  | 
|  DisableImage  |  |  |  |  是  | 
|  EnableImage  |  是  |  |  |  | 
| RegisterImage | 是 | 是 |  |  | 

**EC2 AMI State Change 事件**
+ [事件詳細資訊](#ami-events)
+ [available 事件](#ami-event-available)
+ [failed 事件](#ami-event-failed)
+ [deregistered 事件](#ami-event-deregistered)
+ [disabled 事件](#ami-event-disabled)

## 事件詳細資訊
<a name="ami-events"></a>

您可以使用事件中的下列欄位來建立觸發動作的規則：

`"source": "aws.ec2"`  
識別該事件是來自 Amazon EC2。

`"detail-type": "EC2 AMI State Change"`  
識別事件名稱。

`"detail": { "ImageId": "ami-0abcdef1234567890", "State": "available", }`  
提供 AMI ID 和 AMI 狀態 (`available`、`failed`、`deregistered`、或 `disabled`)。

如需詳細資訊，請參閱「Amazon EventBridge 使用者指南」**中的以下內容：
+ [Amazon EventBridge 事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)
+ [Amazon EventBridge 事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

如需如何建立 Lambda 函數和執行 Lambda 函數的 EventBridge 規則的教學課程，請參閱「AWS Lambda 開發人員指南」**中的[教學課程：使用 EventBridge 記錄 Amazon EC2 執行個體的狀態](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-log-ec2-instance-state.html)。

## available 事件
<a name="ami-event-available"></a>

以下是 `CreateImage`、`CopyImage`、`RegisterImage`、`CreateRestoreImageTask` 或 `EnableImage` 操作成功之後，AMI 進入 `available` 狀態時，Amazon EC2 產生的事件範例。

`"State": "available"` 表示操作成功。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "available",
        "ErrorMessage": ""
    }
}
```

## failed 事件
<a name="ami-event-failed"></a>

以下是 `CreateImage`、`CopyImage`、`RegisterImage` 或 `CreateRestoreImageTask` 操作失敗之後，AMI 進入 `failed` 狀態時，Amazon EC2 產生的事件範例。

下列欄位會提供相關資訊：
+ `"State": "failed"` - 表示操作失敗。
+ `"ErrorMessage": ""` - 提供操作失敗的原因。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "failed",
        "ErrorMessage": "Description of failure"
    }
}
```

## deregistered 事件
<a name="ami-event-deregistered"></a>

以下是在 `DeregisterImage` 操作成功之後，AMI 進入 `deregistered` 狀態時，Amazon EC2 產生的事件範例。如果操作失敗，則不會產生任何事件。因為 `DeregisterImage` 是一個同步操作，所以會立刻發現所有失敗。

`"State": "deregistered"` 表示 `DeregisterImage` 操作成功。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "deregistered",
        "ErrorMessage": ""
    }
}
```

## disabled 事件
<a name="ami-event-disabled"></a>

以下是在 `DisableImage` 操作成功之後，AMI 進入 `disabled` 狀態時，Amazon EC2 產生的事件範例。如果操作失敗，則不會產生任何事件。因為 `DisableImage` 是一個同步操作，所以會立刻發現所有失敗。

`"State": "disabled"` 表示 `DisableImage` 操作成功。

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "disabled",
        "ErrorMessage": ""
    }
}
```

# 了解 AMI 帳單資訊
<a name="ami-billing-info"></a>

啟動執行個體時，有多種 Amazon Machine Image (AMI) 可供選擇，而且它們支援各種作業系統平台和功能。若要了解您在啟動執行個體時選擇的 AMI 如何影響 AWS 帳單的底線，您可以研究相關聯的作業系統平台和帳單資訊。在啟動任何隨需或 競價型執行個體，或購買 預留執行個體 之前執行此動作。

以下兩個例子說明事先研究 AMI 如何幫助您選擇最符合需求的 AMI：
+ 針對 競價型執行個體，您可以使用 AMI **平台詳細資訊**來確認 競價型執行個體 是否支援 AMI。
+ 購買 預留執行個體 時，您可確保對應 AMI **平台詳細資訊**選取操作系統平台 (**平台**)。

如需執行個體定價的詳細資訊，請參閱 [Amazon EC2 定價](https://aws.amazon.com/ec2/pricing/)。

**Topics**
+ [AMI 帳單資訊欄位](billing-info-fields.md)
+ [尋找 AMI 帳單和用量詳細資訊](view-billing-info.md)
+ [驗證帳單上的 AMI 費用](verify-ami-charges.md)

# AMI 帳單資訊欄位
<a name="billing-info-fields"></a>

下列欄位提供與 AMI 相關的帳單資訊：

平台詳細資料  
 與 AMI 帳單代碼相關的平台詳細資訊。例如：`Red Hat Enterprise Linux`。

使用操作  
Amazon EC2 執行個體的操作以及與 AMI 相關聯的帳單代碼。例如：`RunInstances:0010`。**用量操作**會對應至 AWS 成本和用量報告 (CUR) 和[AWS 價格清單 API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html) 中的 [lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation) 欄。

您可以在 Amazon EC2 主控台的**執行個體**或 **AMI** 頁面上，或是在 [describe-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 或 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 命令傳回的回應中，檢視這些欄位。

## 範例資料：使用操作 (依平台)
<a name="billing-info"></a>

下表列出可在 Amazon EC2 主控台的**執行個體**或 **AMI** 頁面上，或是在 [describe-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 或 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 命令傳回的回應中顯示的部分平台詳細資訊和使用操作值。


| 平台詳細資料 | 使用操作 2 | 
| --- | --- | 
|  Linux/UNIX  |  RunInstances  | 
|  Red Hat BYOL Linux  |  RunInstances:00g0 3  | 
|  Red Hat Enterprise Linux  |  RunInstances:0010  | 
|  Red Hat Enterprise Linux with HA  |  RunInstances:1010  | 
|  Red Hat Enterprise Linux with SQL Server Standard and HA  |  RunInstances:1014  | 
|  Red Hat Enterprise Linux with SQL Server Enterprise and HA  |  RunInstances:1110  | 
|  Red Hat Enterprise Linux with SQL Server Standard  |  RunInstances:0014  | 
|  Red Hat Enterprise Linux with SQL Server Web  |  RunInstances:0210  | 
|  Red Hat Enterprise Linux with SQL Server Enterprise  |  RunInstances:0110  | 
|  SQL Server Enterprise  |  RunInstances:0100  | 
|  SQL Server Standard  |  RunInstances:0004  | 
|  SQL Server Web  |  RunInstances:0200  | 
|  SUSE Linux  |  RunInstances:000g  | 
| Ubuntu Pro |  RunInstances:0g00  | 
|  Windows  |  RunInstances:0002  | 
|  Windows BYOL  |  RunInstances:0800  | 
|  Windows with SQL Server Enterprise 1  |  RunInstances:0102  | 
|  Windows with SQL Server Standard 1  |  RunInstances:0006  | 
|  Windows with SQL Server Web 1  |  RunInstances:0202  | 

1 如果有兩個軟體授權與 AMI 相關聯，**平台詳細資料**欄位會顯示兩者。

2 如果您執行 Spot 執行個體， AWS 成本和用量報告[https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)上的 可能與此處列出的**用量操作**值不同。例如，如果 `[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 顯示 `RunInstances:0010:SV006`，表示 Amazon EC2 在 Zone 6 的美國東部 (維吉尼亞北部) 正在執行 Red Hat Enterprise Linux Spot 執行個體小時。

3 這會在您的用量報告顯示為 RunInstances (Linux/UNIX)。

# 尋找 AMI 帳單和用量詳細資訊
<a name="view-billing-info"></a>

下列屬性可協助您驗證帳單上的 AMI 費用：
+ **平台詳細資料**
+ **使用操作**
+ **AMI ID**

------
#### [ Console ]

**如需針對 AMI 尋找 AMI 帳單資訊**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **AMI**。

1. 請選取 AMI。

1. 在**詳細資訊**索引標籤上，尋找**平台詳細資訊**與**使用操作**。

**如需針對執行個體尋找 AMI 帳單資訊**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體。

1. 在**詳細資訊**索引標籤上，展開**執行個體詳細資訊**，然後尋找**平台詳細資訊**與**使用操作**。

------
#### [ AWS CLI ]

**如需針對 AMI 尋找 AMI 帳單資訊**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query "Images[].{PlatformDetails:PlatformDetails,UsageOperation:UsageOperation}"
```

下列為 Linux AMI 的範例輸出。

```
[
    {
        "PlatformDetails": "Linux/UNIX",
        "UsageOperation": "RunInstances"
    }
]
```

**如需針對執行個體尋找 AMI 帳單資訊**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[].Instances[].{PlatformDetails:PlatformDetails,UsageOperation:UsageOperation}"
```

下列為 Windows 執行個體的範例輸出。

```
[
    {
        "PlatformDetails": "Windows",
        "UsageOperation": "RunInstances:0002"
    }
]
```

------
#### [ PowerShell ]

**如需針對 AMI 尋找 AMI 帳單資訊**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
Get-EC2Image `
    -ImageId ami-0abcdef1234567890 | `
    Format-List PlatformDetails, UsageOperation
```

下列為 Linux AMI 的範例輸出。

```
PlatformDetails : Linux/UNIX
UsageOperation  : RunInstances
```

**如需針對執行個體尋找 AMI 帳單資訊**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | `
    Format-List PlatformDetails, UsageOperation
```

下列為 Windows 執行個體的範例輸出。

```
PlatformDetails : Windows
UsageOperation  : RunInstances:0002
```

------

# 驗證帳單上的 AMI 費用
<a name="verify-ami-charges"></a>

為了確保不會產生意外成本，您可以驗證 AWS 成本和用量報告 (CUR) 中執行個體的帳單資訊是否與您用來啟動執行個體的 AMI 相關聯的帳單資訊相符。

若要確認帳單資訊，請在 CUR 中尋找執行個體 ID，然後檢查 `[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 欄中對應的值。該值應該符合 AMI 相關聯**使用操作** 的值。

例如，AMI `ami-0123456789EXAMPLE` 具有下列帳單資訊：
+ **平台詳細資訊** = `Red Hat Enterprise Linux`
+ **使用操作** = `RunInstances:0010`

如果使用此 AMI 啟動執行個體，可在 CUR 中找到該執行個體 ID，然後檢查 `[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 欄中的相應值。在此範例中，此值應為 `RunInstances:0010`。

# Amazon EC2 的 AMI 配額
<a name="ami-quotas"></a>

下列配額適用於建立及共用 AMI。這些配額適用於每個 AWS 區域。


****  

| 配額名稱 | Description | 每個區域的預設配額 | 
| --- | --- | --- | 
| AMI | 每個區域允許的公有和私有 AMI 的最大數量。其中包括可用、待定和已停用的 AMI，以及資源回收筒中的 AMI。 | 50,000 | 
| 公有 AMI | 每個區域允許的公有 AMI 數目上限，包括資源回收筒中的公有 AMI。 | 5 | 
| AMI 共用 | 可在區域中與 AMI 共用的實體 (組織、組織單位 (OU) 和帳戶) 的最大數目。請注意，如果您與組織或 OU 共用 AMI，則組織或 OU 中的帳戶數目不會計入配額中。 | 1,000 | 

如果超出配額且想要建立或共用更多 AMI，則您可以執行以下操作：
+ 如果超過總 AMI 配額或公有 AMI 配額，則請考慮取消註冊未使用的映像。
+ 如果超過公有 AMI 配額，則請考慮將一個或多個公有 AMI 設為私有。
+ 如果超過 AMI 共用配額，則請考慮與組織或 OU 共用您的 AMI，而不是與個別帳戶共用。
+ 請求增加 AMI 的配額。

## 請求增加 AMI 的配額
<a name="request-ami-quota-increase"></a>

如果您需要超過 AMI 的預設配額，則可以請求增加配額。

**若要請求增加 AMI 的配額**

1. 開啟 Service Quotas 主控台，網址為 [https://console.aws.amazon.com/servicequotas/](https://console.aws.amazon.com/servicequotas/)。

1. 在導覽窗格中，選擇 **AWS services** (AWS 服務)。

1. 從清單中選擇 **Amazon Elastic Compute Cloud (Amazon EC2)**，或在搜尋方塊中輸入服務名稱。

1. 選擇 AMI 配額以請求增加。您可以選取的 AMI 配額為：
   + AMI
   + 公有 AMI
   + AMI 共用

1. 選擇 **Request quota increase (請求增加配額)**。

1. 對於 **Change quota value** (變更配額值)，輸入新的配額值，然後選擇 **Request** (請求)。

若要檢視任何擱置或最近解決的請求，請從瀏覽窗格中選擇 **Dashboard (儀表板)**。對於擱置的請求，請選擇請求狀態以開啟請求回條。請求的初始狀態為 **Pending** (待定)。狀態變更為 **Quota requested** (已請求配額) 後，您會在 **Support Center case number** (支援中心案例編號) 中看到案例編號。選擇案例編號，為請求開啟票證。

解決請求之後，配額的 **Applied quota value (套用的配額值)** 會設定為新值。

如需詳細資訊，請參閱[「Service Quotas 使用者指南」](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。