

# 지정된 AMI를 참조하는 리소스 식별
<a name="ec2-ami-references"></a>

AMI가 퍼블릭 또는 프라이빗인지, 누가 소유하는지 관계없이 지정된 Amazon Machine Image(AMI)를 참조하는 AWS 리소스를 식별할 수 있습니다. 이러한 가시성은 리소스가 최신 규정 준수 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 정책**  
다음 예제 정책은 EC2 인스턴스, 시작 템플릿, Systems Manager 파라미터, Image Builder 이미지 레시피 및 Image Builder 컨테이너 레시피를 설명할 수 있는 권한을 포함하는 DescribeImageReferences API 사용 권한을 부여합니다.

------
#### [ 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. [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 참조를 확인하려면**  
[describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) 명령을 `--resource-types` 파라미터와 함께 사용합니다. 다음 예제에서는 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 참조를 확인하려면**  
[describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) 명령을 `--include-all-resource-types` 파라미터와 함께 사용합니다.

```
aws ec2 describe-image-references \
    --image-ids ami-0abcdef1234567890 ami-1234567890abcdef0 \
    --include-all-resource-types
```

**지원되는 모든 리소스 유형 및 특정 옵션에 대한 AMI 참조를 확인하려면**  
[describe-image-references](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-references.html) 명령을 `--include-all-resource-types` 및 `--resource-types` 파라미터와 함께 사용합니다. 이 예제에서는 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 참조를 확인하려면**  
[Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) cmdlet을 `-ResourceType` 파라미터와 함께 사용합니다. 다음 예제에서는 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 참조를 확인하려면**  
[Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) cmdlet을 `-IncludeAllResourceTypes` 파라미터와 함께 사용합니다.

```
Get-EC2ImageReference `
    -ImageId 'ami-0abcdef1234567890', 'ami-1234567890abcdef0' `
    -IncludeAllResourceTypes
```

**지원되는 모든 리소스 유형 및 특정 옵션에 대한 AMI 참조를 확인하려면**  
[Get-EC2ImageReference](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageReference.html) cmdlet을 `-IncludeAllResourceTypes` 및 `-ResourceType` 파라미터와 함께 사용합니다. 이 예제에서는 EC2 인스턴스의 응답 범위를 실행 중 또는 보류 중 인스턴스로 조정하면서 모든 리소스 유형을 확인합니다.

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

------