

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

# 了解 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 憑證。因此請將這些憑證和其他登入資料放在不會加入綁定的位置 (例如執行個體儲存體)。