

# 指定した AMI を参照しているリソースを識別します。
<a name="ec2-ami-references"></a>

指定した Amazon マシンイメージ (AMI) を参照する AWS リソースは、AMI がパブリックかプライベートか、または誰が所有しているかに関係なく識別できます。この可視性により、リソースが最新の準拠 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` オプション値がデフォルトよりも優先されます。

デフォルト値を以下に示します。


| リソースタイプ | 範囲オプション (`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>

次の手順を使用して、指定した AMI を参照している AWS リソースを特定します。

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

**指定した AMI を参照するリソースを識別するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**AMI**] を選択してください。

1. 参照をチェックする 1 つまたは複数の AMI を選択します。

1. **[アクション]**、**[AMI の使用状況]**、**[参照先リソースを表示]** の順に選択します。

1. **[選択した AMI を参照しているリソースを表示]** ページで次の操作を実行します。

   1. **[リソースタイプ]** で 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` パラメータで [Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) コマンドレットを使用します。次の例では、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` パラメータで [Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) コマンドレットを使用します。

```
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) コマンドレットを使用します。この例では、実行中または保留中のインスタンスに対する EC2 インスタンスの応答範囲を指定しながら、すべてのリソースタイプをチェックします。

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -IncludeAllResourceTypes `
    -ResourceType @(
        @{
            ResourceType = 'ec2:Instance'
            ResourceTypeOptions = @(
                @{
                    OptionName = 'state-name'
                    OptionValues = @('running', 'pending')
                }
            )
        }
    )
```

------