

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

# 確定參考指定 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')
                }
            )
        }
    )
```

------