

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

Amazon Machine Image(AMI)는 Amazon EC2 인스턴스를 설정하고 부팅하는 데 필요한 소프트웨어를 제공하는 이미지입니다. 또한 각 AMI에는 시작하는 인스턴스에 연결할 블록 디바이스를 지정하는 블록 디바이스 매핑이 포함되어 있습니다. 인스턴스를 시작할 때 AMI를 지정해야 합니다. AMI는 인스턴스에 대해 선택한 인스턴스 유형과 호환되어야 합니다. AWS에서 제공하는 AMI, 퍼블릭 AMI, 다른 사람이 공유한 AMI 또는 AWS Marketplace에서 구매한 AMI를 사용할 수 있습니다.

AMI는 다음과 같은 경우에만 사용할 수 있습니다.
+ 리전
+ 운영 체제
+ 프로세서 아키텍처
+ 루트 볼륨 유형
+ 가상화 유형

동일한 구성의 인스턴스가 여러 개 필요할 때는 한 AMI에서 여러 인스턴스를 시작할 수 있습니다. 다음 다이어그램과 같이 서로 다른 구성의 인스턴스가 필요할 때는 다양한 AMI를 사용하여 인스턴스를 시작할 수 있습니다.

![\[AMI에서 여러 인스턴스를 시작합니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/launch-from-ami.png)


Amazon EC2 인스턴스에서 AMI를 생성한 다음 이를 사용하여 동일한 구성의 인스턴스를 시작할 수 있습니다. AMI를 다른 AWS 리전에 복사한 다음 이를 사용하여 해당 리전에서 인스턴스를 시작할 수 있습니다. 동일한 구성으로 인스턴스를 시작할 수 있게 생성한 AMI를 다른 계정과 공유할 수도 있습니다. AWS Marketplace를 사용하여 AMI를 판매할 수 있습니다.

**Topics**
+ [AMI 특성](ComponentsAMIs.md)
+ [AMI 찾기](finding-an-ami.md)
+ [AWS Marketplace의 유료 AMI](paid-amis.md)
+ [AMI 수명 주기](ami-lifecycle.md)
+ [부팅 모드](ami-boot.md)
+ [AMI 암호화](AMIEncryption.md)
+ [공유 AMI](sharing-amis.md)
+ [AMI 이벤트 모니터링](monitor-ami-events.md)
+ [AMI 결제 이해](ami-billing-info.md)
+ [AMI 할당량](ami-quotas.md)

# Amazon EC2의 AMI 유형 및 특성
<a name="ComponentsAMIs"></a>

인스턴스를 시작할 때 선택하는 AMI가 선택하는 인스턴스 유형과 호환되어야 합니다. 다음 유형을 기준으로 사용할 AMI를 선택할 수 있습니다.
+ [리전](using-regions-availability-zones.md)
+ 운영 체제
+ 프로세서 아키텍처
+ [시작 권한](#launch-permissions)
+ [루트 볼륨 유형](#storage-for-the-root-device)
+ [가상화 유형](#virtualization_types)

## 시작 권한
<a name="launch-permissions"></a>

시작 권한은 AMI를 사용하여 인스턴스를 시작할 수 있는 사용자를 결정합니다. 시작 권한을 [AMI 공유](sharing-amis.md)로 생각할 수 있습니다. 시작 권한을 부여하면 AMI를 다른 사용자와 공유할 수 있습니다. AMI 소유자만 시작 권한을 지정하여 가용성을 결정할 수 있습니다. 시작 권한은 다음 범주로 분류됩니다.


| 시작 권한 | 설명 | 
| --- | --- | 
| 퍼블릭 | 소유자는 모든 AWS 계정에 시작 권한을 부여합니다. | 
| 명시적 | 소유자는 특정 AWS 계정, 조직 또는 OU(조직 단위)에 시작 권한을 부여합니다. | 
| 암묵적 | 소유자는 AMI에 대한 암묵적인 시작 권한을 갖습니다. | 

Amazon 및 Amazon EC2 커뮤니티는 퍼블릭 AMI에 대한 다양한 선택권을 제공합니다. 자세한 내용은 [Amazon EC2의 공유 AMI 사용량 이해](sharing-amis.md) 섹션을 참조하세요. 개발자들은 자신의 AMI에 비용을 부과할 수 있습니다. 자세한 내용은 [Amazon EC2 인스턴스용 AWS Marketplace의 유료 AMI](paid-amis.md) 섹션을 참조하세요.

## 루트 볼륨 유형
<a name="storage-for-the-root-device"></a>

모든 AMI는 *Amazon EBS에 의해 지원되는 유형* 또는 *Amazon S3에 의해 지원되는 유형*으로 분류됩니다.
+ Amazon EBS 지원 AMI – AMI에서 시작된 인스턴스의 루트 볼륨은 Amazon EBS 스냅샷에서 생성된 Amazon Elastic Block Store(Amazon EBS) 볼륨입니다. Linux와 Windows AMI 모두 지원됩니다.
+ Amazon S3 지원 AMI – AMI에서 시작된 인스턴스의 루트 볼륨은 Amazon S3에 저장된 템플릿으로부터 생성된 인스턴스 저장소 볼륨입니다. Linux AMI에서만 지원됩니다. Windows AMI는 루트 볼륨에 대한 인스턴스 저장소를 지원하지 않습니다.

자세한 내용은 [Amazon EC2 인스턴스용 루트 볼륨](RootDeviceStorage.md) 섹션을 참조하세요.

**참고**  
Amazon S3 지원 AMI는 수명 종료로 간주되며 새 사용에 권장되지 않습니다. C1, C3, D2, I2, M1, M2, M3, R3, X1 같은 이전 인스턴스 유형에서만 지원됩니다.

다음 표에는 두 가지 유형의 AMI를 사용할 때 주요 차이점이 요약되어 있습니다.


| 특성 | Amazon EBS 지원 AMI | Amazon S3 지원 AMI | 
| --- | --- | --- | 
| 루트 볼륨 | EBS 볼륨 | 인스턴스 저장소 볼륨 | 
| 인스턴스의 부팅 시간 | 일반적으로 1분 이하 | 일반적으로 5분 이하 | 
| 데이터 지속성  |  기본적으로 인스턴스가 종료되면 루트 볼륨이 삭제됩니다.\$1 다른 EBS 볼륨의 데이터는 기본적으로 인스턴스 종료 후에도 유지됩니다.  |  모든 인스턴스 저장소의 데이터는 인스턴스 수명 주기 동안만 유지됩니다.  | 
| 중지 상태 |  중지 상태일 수 있습니다. 인스턴스가 중지되고 실행 중이지 않은 경우에도 루트 볼륨은 Amazon EBS에 유지됩니다.  |  중지 상태가 될 수 없습니다. 인스턴스가 실행 중이거나 종료되었습니다  | 
| 수정 |  인스턴스 유형, 커널 RAM 디스크 및 사용자 데이터는 인스턴스가 중지된 동안에 변경될 수 있습니다.  |  인스턴스 속성은 인스턴스 수명 주기 동안 고정됩니다.  | 
| 요금 |  인스턴스 사용량, EBS 볼륨 사용량 및 AMI를 EBS 스냅샷으로 저장하는 것에 대한 비용이 청구됩니다.  |  인스턴스 사용량 및 Amazon S3에 AMI를 저장하는 것에 대한 비용이 청구됩니다.  | 
| AMI 생성/번들링 | 단일 명령/호출을 사용합니다 | AMI 도구를 설치 및 사용해야 합니다 | 

\$1 기본적으로 EBS 루트 볼륨의 `DeleteOnTermination` 플래그는 `true`로 설정되어 있습니다. 이 플래그를 변경하여 종료 후에도 볼륨을 유지하는 방법에 대한 자세한 내용은 [Amazon EC2 인스턴스가 종료된 후에도 Amazon EBS 루트 볼륨 유지](configure-root-volume-delete-on-termination.md) 섹션을 참조하세요.

\$1\$1 `io2` EBS Block Express에서만 지원됩니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Provisioned IOPS SSD Block Express volumes](https://docs.aws.amazon.com/ebs/latest/userguide/provisioned-iops.html#io2-block-express)를 참조하세요.

# AMI에서 결정한 루트 볼륨 유형 식별
<a name="display-ami-root-device-type"></a>

루트 볼륨의 유형은 EC2 인스턴스를 시작하는 데 사용하는 AMI에 따라 결정됩니다. EC2 인스턴스의 루트 볼륨은 EBS 볼륨 또는 인스턴스 저장소 볼륨입니다.

[Nitro 기반 인스턴스](instance-types.md#instance-hypervisor-type)는 EBS 루트 볼륨만 지원합니다. 이전 세대 인스턴스 유형인 C1, C3, D2, I2, M1, M2, M3, R3, X1만 인스턴스 저장소 루트 볼륨이 지원되는 인스턴스 유형입니다.

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

**AMI에서 결정한 루트 볼륨 유형을 식별하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택하고 AMI를 선택합니다.

1. **세부 정보(Details)** 탭에서 **루트 디바이스 유형(Root device type)**의 값을 다음과 같이 확인합니다.
   + `ebs` -이 AMI에서 시작된 인스턴스는 EBS 루트 볼륨을 가져옵니다.
   + `instance store` -이 AMI에서 시작된 인스턴스는 인스턴스 저장소 루트 볼륨을 가져옵니다.

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

**AMI에서 결정한 루트 볼륨 유형을 식별하려면**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

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

다음은 예제 출력입니다.

```
ebs
```

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

**AMI에서 결정한 루트 볼륨 유형을 식별하려면**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

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

다음은 예제 출력입니다.

```
ebs
```

------

## 가상화 유형
<a name="virtualization_types"></a>

Amazon Machine Image는 PV(반가상화) 또는 HVM(하드웨어 가상 머신)의 두 가지 유형의 가상화를 사용합니다. PV AMI와 HVM AMI의 주요 차이점은 부팅 방법과 더 나은 성능을 위해 특수 하드웨어 확장(CPU, 네트워크, 스토리지)을 활용할 수 있는지 여부에 있습니다. Windows AMI는 HVM AMI입니다.

다음 표에서는 HVM과 PV AMI를 비교합니다.


| 기능 | HVM | PV | 
| --- | --- | --- | 
| 설명 | HVM AMI는 이미지 루트 블록 디바이스의 마스터 부트 레코드를 실행하여 완벽하게 가상화된 하드웨어 및 부트 세트를 함께 제공합니다. 이 가상화 유형은 운영 체제 미설치 하드웨어에서 실행될 때처럼 가상 머신에서 운영 체제를 수정하지 않고 실행할 수 있습니다. Amazon EC2 호스트 시스템은 게스트에게 제공되는 기본 하드웨어의 일부 또는 모두를 에뮬레이트합니다. | PV AMIs는 PV-GRUB라는 특수 부트 로더를 통해 부팅되며, 이 로더는 부팅 주기를 시작한 후 사용자 이미지의 menu.lst 파일에 지정된 커널을 체인 로드합니다. 반가상화 게스트는 가상화를 명시적으로 지원하지 않는 하드웨어에서 실행할 수 있습니다. PV-GRUB 및 Amazon EC2에서의 사용에 대한 자세한 내용은 [사용자 제공 커널](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)을 참조하세요. | 
| 지원되는 인스턴스 유형 | 모든 최신 인스턴스 유형은 HVM AMI를 지원합니다. | C1, C3, M1, M3, M2, T1 등과 같은 전 세대 인스턴스 유형은 PV AMI를 지원합니다. 최신 세대 인스턴스 유형은 PV AMI를 지원하지 않습니다. | 
| 하드웨어 확장 지원 | HVM 게스트는 하드웨어 확장을 활용하여 호스트 시스템의 기본 하드웨어에 빠르게 액세스할 수 있습니다. 향상된 네트워킹과 GPU 처리를 사용해야 합니다. 특수 네트워크 및 GPU 디바이스에 명령을 전달하려면 OS가 기본 하드웨어 플랫폼에 액세스할 수 있어야 하며, HVM 가상화가 이러한 액세스를 제공합니다. 자세한 내용은 [Amazon EC2 인스턴스의 향상된 네트워킹](enhanced-networking.md) 섹션을 참조하세요. | 아니요. 향상된 네트워킹 또는 GPU 처리와 같은 특수 하드웨어 확장을 활용할 수 없습니다. | 
| [찾는 방법](finding-an-ami.md) | 콘솔 또는 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용하여 AMI의 가상화 유형이 hvm로 설정되어 있는지 확인합니다. | 콘솔 또는 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용하여 AMI의 가상화 유형이 paravirtual로 설정되어 있는지 확인합니다. | 

**HVM 기반 PV**  
이전에는 반가상화 게스트는 I/O용 특수 드라이버를 활용하여 네트워크 및 디스크 하드웨어 에뮬레이트 오버헤드를 방지할 수 있지만, HVM 게스트는 이러한 명령을 에뮬레이트된 하드웨어로 변환해야 했기 때문에, 반가상화 게스트가 HVM 게스트보다 스토리지 및 네트워크 운영 성능이 더 뛰어났습니다. 현재는 HVM 게스트용 PV 드라이버가 제공되므로 반가상화된 환경에서 실행하도록 이식할 수 없는 운영 체제에서도 이러한 PV 드라이버를 통해 스토리지 및 네트워크 I/O 성능이 향상될 수 있습니다. HVM 게스트는 이러한 HVM 기반 PV 드라이버를 사용하여 반가상 게스트와 동일하거나 더 나은 성능을 제공할 수 있습니다.

# EC2 인스턴스의 요구 사항을 충족하는 AMI 찾기
<a name="finding-an-ami"></a>

AMI에는 인스턴스를 시작하는 데 필요한 운영 체제 및 루트 볼륨 유형과 같은 구성 요소와 애플리케이션이 포함됩니다. 인스턴스를 시작하려면 필요에 맞는 AMI를 찾아야 합니다.

AMI를 선택할 때는 시작하려는 인스턴스에 다음과 같은 요구 사항을 고려하세요.
+ AMI의 AWS 리전(AMI ID는 리전마다 고유함)
+ 운영 체제(예: Linux 또는 Windows)
+ 아키텍처(예: 32비트, 64비트 또는 64비트 ARM)
+ 루트 볼륨 유형(예: Amazon EBS 또는 인스턴스 저장소)
+ 제공업체(예: Amazon Web Services)
+ 추가 소프트웨어(예: SQL Server)

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

인스턴스 시작 마법사를 사용하는 경우 AMI 목록에서 선택하거나 **이미지** 페이지를 사용하여 사용 가능한 모든 AMI를 검색할 수 있습니다.

**인스턴스 시작 마법사를 사용하여 Quick Start AMI를 찾으려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 모음에서 인스턴스를 실행할 리전을 선택합니다. 현재 위치와 관계없이 사용자가 고를 수 있는 리전을 임의로 선택합니다. AMI ID는 각 AWS 리전에 고유합니다.

1. 콘솔 대시보드에서 **인스턴스 시작(Launch instance)**을 선택합니다.

1. **애플리케이션 및 OS 이미지(Amazon Machine Image)**에서 **빠른 시작**을 선택하고 인스턴스의 운영 체제(OS)를 선택한 다음 **Amazon Machine Image(AMI)**에서 목록에 자주 사용되는 AMI 중 하나를 선택합니다. 사용하려는 AMI가 표시되지 않으면 **더 많은 AMI 찾아보기(Browse more AMIs)**를 선택하여 전체 AMI 카탈로그를 찾아볼 수 있습니다. 자세한 내용은 [애플리케이션 및 OS 이미지(Amazon Machine Image)](ec2-instance-launch-parameters.md#liw-ami) 섹션을 참조하세요.

**AMI 페이지를 사용하여 AMI를 찾으려면 다음을 수행합니다.**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 모음에서 인스턴스를 실행할 리전을 선택합니다. 현재 위치와 관계없이 사용자가 고를 수 있는 리전을 임의로 선택합니다. AMI ID는 각 AWS 리전에 고유합니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. (선택 사항) 필터 및 검색 옵션을 사용하여 기준과 일치하는 AMI만 볼 수 있도록 표시되는 AMI 목록의 범위를 지정합니다.

   예를 들어 AWS에서 제공하는 모든 AMI를 나열하려면 **퍼블릭 이미지**를 선택합니다. 그런 다음 검색 옵션을 사용하여 표시되는 AMI 목록의 범위를 추가로 지정할 수 있습니다. **검색(Search)** 창을 선택하고 메뉴에서 **소유자 별칭(Owner alias)**, **=** 연산자, 값 **amazon**을 차례로 선택합니다. 특정 플랫폼(예: Linux 또는 Windows)과 일치하는 AMI를 찾으려면 **검색** 창을 다시 선택하여 **플랫폼**을 선택한 다음 **=** 연산자를 선택한 다음 제공된 목록에서 운영 체제를 선택합니다.

1. (선택 사항) **기본 설정** 아이콘을 선택하여 표시할 이미지 속성(예: 루트 볼륨 유형)을 선택합니다. 또는 목록에서 AMI를 선택하고 **세부 정보(Details)** 탭에서 속성을 조회할 수 있습니다.

1. AMI를 선택하기 전에 해당 AMI가 인스턴스 스토어 기반인지, Amazon EBS 기반인지 확인하고 이 차이점에 따른 영향을 잘 알고 있어야 합니다. 자세한 내용은 [루트 볼륨 유형](ComponentsAMIs.md#storage-for-the-root-device) 섹션을 참조하세요.

1. 이 AMI에서 인스턴스를 시작하려면 해당 인스턴스를 선택하고 **이미지로 인스턴스 시작**을 선택합니다. 콘솔을 사용하여 인스턴스를 시작하는 방법에 대한 자세한 정보는 [콘솔에서 인스턴스 시작 마법사를 사용하여 EC2 인스턴스 시작](ec2-launch-instance-wizard.md) 섹션을 참조하세요. 인스턴스를 시작할 준비가 되지 않은 경우, 나중을 위해 AMI ID를 기록해 둡니다.

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

[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용하여 요구 사항이 충족되는 AMI를 찾습니다. 기본적으로 이 명령에서는 퍼블릭이고, 본인이 소유하고, 본인과 공유된 모든 AMI가 반환됩니다.

**Amazon에서 소유하는 AMI를 찾는 방법**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 `--owners` 옵션과 함께 사용합니다.

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

**Windows AMI를 찾는 방법**  
다음 필터를 추가하여 Windows AMI만 표시합니다.

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

**EBS 지원 AMI를 찾는 방법**  
다음 필터를 추가하여 Amazon EBS 기반 AMI만 표시합니다.

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

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

[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용하여 요구 사항이 충족되는 AMI를 찾습니다. 기본적으로 이 cmdlet에서는 퍼블릭이며, 본인이 소유하거나 본인과 공유된 모든 AMI가 반환됩니다.

**Amazon에서 소유하는 AMI를 찾는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 명령을 `-Owner` 파라미터와 함께 사용합니다.

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

**Windows AMI를 찾는 방법**  
다음 필터를 추가하여 Windows AMI만 표시합니다.

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

추가 예제는 **AWS Tools for PowerShell 사용 설명서의 [Windows PowerShell을 사용하여 Amazon 머신 이미지 찾기](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-ec2-get-amis.html)를 참조하세요.

------

**관련 리소스**

특정 운영 체제용 AMI에 대한 자세한 내용은 다음을 참조하세요.
+ Amazon Linux 2023 – *Amazon Linux 2023 사용 설명서*의 [Amazon EC2 AL2023](https://docs.aws.amazon.com/linux/al2023/ug/ec2.html)
+ Ubuntu – *Canonical Ubuntu 웹 사이트*의 [Amazon EC2 AMI Locator](https://cloud-images.ubuntu.com/locator/ec2/)
+ RHEL – Red Hat 웹 사이트의 [Red Hat Enterprise Linux Images (AMI) Available on Amazon Web Services (AWS)](https://access.redhat.com/solutions/15356)
+ Windows Server – [AWS Windows AMI 참조](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/windows-amis.html)

AWS Marketplace에서 구독할 수 있는 AMI에 대한 자세한 내용은 [Amazon EC2 인스턴스용 AWS Marketplace의 유료 AMI](paid-amis.md) 섹션을 참조하세요.

사용자가 인스턴스를 시작할 때 사용해야 하는 최신 AMI를 찾는 데 도움이 되는 Systems Manager 사용에 대한 자세한 내용은 다음을 참조하세요.
+ [Systems Manager 파라미터를 사용하여 AMI 참조](using-systems-manager-parameter-to-find-AMI.md)
+ [Systems Manager 퍼블릭 파라미터를 사용하여 최신 AMI 참조](finding-an-ami-parameter-store.md)

# Systems Manager 파라미터를 사용하여 AMI 참조
<a name="using-systems-manager-parameter-to-find-AMI"></a>

Amazon EC2 콘솔에서 EC2 인스턴스 시작 마법사를 사용하여 인스턴스를 시작할 때 목록에서 AMI를 선택하거나 AMI ID(이 섹션에서 설명)를 가리키는 AWS Systems Manager 파라미터를 선택할 수 있습니다. 자동화 코드를 사용하여 인스턴스를 시작하는 경우 AMI ID 대신 Systems Manager 파라미터를 지정할 수 있습니다.

Systems Manager 파라미터는 Systems Manager 파라미터 스토어에서 생성할 수 있는 고객 정의 키-값 페어입니다. 파라미터 스토어는 애플리케이션 구성 값을 외부화할 수 있는 중앙 스토어를 제공합니다. 자세한 내용은 *AWS Systems Manager 사용 설명서*에서 [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)를 참조하세요.

AMI ID를 가리키는 파라미터를 생성할 때는 데이터 유형을 `aws:ec2:image`로 지정해야 합니다. 이 데이터 유형을 지정하면 파라미터가 생성되거나 수정될 때 파라미터 값이 AMI ID로 확인됩니다. 자세한 내용은 AWS Systems Manager 사용 설명서**에서 [Amazon Machine Image ID에 대한 기본 파라미터 지원](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)을 참조하세요.

**Topics**
+ [사용 사례](#systems-manager-parameter-use-case)
+ [권한](#systems-manager-permissions)
+ [제한 사항](#AMI-systems-manager-parameter-limitations)
+ [Systems Manager 파라미터를 사용하여 인스턴스 시작](#systems-manager-parameter-launch-instance)

## 사용 사례
<a name="systems-manager-parameter-use-case"></a>

Systems Manager 파라미터를 사용하여 AMI ID를 가리키면 사용자가 인스턴스를 시작할 때 올바른 AMI를 더 쉽게 선택할 수 있습니다. Systems Manager 파라미터를 통해 자동화 코드의 유지 관리가 간소화될 수도 있습니다

**사용자의 사용 편의성 향상**

특정 AMI를 사용하여 인스턴스를 시작해야 하고 AMI가 정기적으로 업데이트되는 경우 사용자가 Systems Manager 파라미터를 선택하여 AMI를 찾도록 하는 것이 좋습니다. 사용자에게 Systems Manager 파라미터를 선택하도록 하면 인스턴스를 시작하는 데 최신 AMI가 사용될 수 있습니다.

예를 들어 조직에서 매달 최신 운영 체제 및 애플리케이션 패치가 포함된 새 버전의 AMI를 생성하며 사용자가 최신 버전의 AMI를 사용하여 인스턴스를 시작하도록 하려는 경우, 사용자가 최신 버전을 사용하도록 올바른 AMI ID를 가리키는 Systems Manager 파라미터(예: `golden-ami`)를 생성할 수 있습니다. 새 버전의 AMI가 생성될 때마다 이 파라미터의 AMI ID 값을 업데이트하여 항상 최신 AMI를 가리키도록 합니다. 사용자는 매번 동일한 Systems Manager 파라미터를 계속 선택하므로 AMI에 대한 정기 업데이트에 대해 알 필요가 없습니다. AMI에 대한 Systems Manager 파라미터를 사용하면 사용자가 인스턴스 시작에 대한 올바른 AMI를 더 쉽게 선택할 수 있습니다.

**자동화 코드 유지 관리 간소화**

자동화 코드를 사용하여 인스턴스를 시작하는 경우 AMI ID 대신 Systems Manager 파라미터를 지정할 수 있습니다. 새 버전의 AMI가 생성되면 최신 AMI를 가리키도록 이 파라미터의 AMI ID 값을 변경할 수 있습니다. 파라미터를 참조하는 자동화 코드는 새 버전의 AMI가 생성될 때마다 수정할 필요가 없습니다. 이를 통해 자동화 유지 관리가 간소화되며 배포 비용을 절감할 수 있습니다.

**참고**  
Systems Manager 파라미터가 가리키는 AMI ID를 변경해도 실행 중인 인스턴스는 영향을 받지 않습니다.

## 권한
<a name="systems-manager-permissions"></a>

인스턴스 시작 마법사에서 AMI ID를 가리키는 Systems Manager 파라미터를 사용하는 경우 IAM 정책에 다음 권한을 추가해야 합니다.
+ `ssm:DescribeParameters` – Systems Manager 파라미터를 보고 선택할 수 있는 권한을 부여합니다.
+ `ssm:GetParameters` – Systems Manager 파라미터 값을 검색할 수 있는 권한을 부여합니다.

특정 Systems Manager 파라미터에 대한 액세스를 제한할 수도 있습니다. 자세한 내용과 IAM 정책 예는 [예: EC2 인스턴스 시작 마법사 사용](iam-policies-ec2-console.md#ex-launch-wizard) 섹션을 참조하세요.

## 제한 사항
<a name="AMI-systems-manager-parameter-limitations"></a>

AMI 및 Systems Manager 파라미터는 리전별로 다릅니다. 여러 리전에서 동일한 Systems Manager 파라미터 이름을 사용하려면 동일한 이름(예: `golden-ami`)을 가진 Systems Manager 파라미터를 각 리전에 생성합니다. 각 리전에서 Systems Manager 파라미터가 해당 리전의 AMI를 가리키도록 지정합니다.

파라미터 이름은 대/소문자를 구분합니다. 파라미터 이름의 백슬래시는 파라미터가 계층 구조의 일부인 경우에만 필요합니다(예: `/amis/production/golden-ami`). 파라미터가 계층의 일부가 아닌 경우 백슬래시를 생략할 수 있습니다.

## Systems Manager 파라미터를 사용하여 인스턴스 시작
<a name="systems-manager-parameter-launch-instance"></a>

인스턴스를 시작할 때 AMI ID를 지정하는 대신 AMI ID를 가리키는 Systems Manager 파라미터를 지정할 수 있습니다.

프로그래밍 방식으로 파라미터를 지정하려면 다음 구문을 사용합니다. 여기서 `resolve:ssm`은 표준 접두사이고 `parameter-name`은 고유한 파라미터 이름입니다.

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

Systems Manager 파라미터는 버전을 지원합니다. 파라미터의 각 이터레이션에는 고유한 버전 번호가 지정됩니다. 다음과 같이 파라미터의 버전을 참조할 수 있습니다. 여기서 `version`은 고유한 버전 번호입니다. 버전이 지정되지 않은 경우 기본적으로 최신 버전의 파라미터가 사용됩니다.

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

AWS에서 제공하는 퍼블릭 파라미터를 사용하여 인스턴스를 시작하려면 [Systems Manager 퍼블릭 파라미터를 사용하여 최신 AMI 참조](finding-an-ami-parameter-store.md)를 참조하세요.

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

**Systems Manager 파라미터를 사용하여 AMI 찾으려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 모음에서 인스턴스를 실행할 리전을 선택합니다. 현재 위치와 관계없이 사용자가 고를 수 있는 리전을 임의로 선택합니다.

1. 콘솔 대시보드에서 **인스턴스 시작(Launch instance)**을 선택합니다.

1. **Application and OS Images (Amazon Machine Image)**(애플리케이션 및 OS 이미지(Amazon Machine Image))에서 **Browse more AMIs**(더 많은 AMI 찾아보기)를 선택하세요.

1. 검색 창 오른쪽에 있는 화살표 버튼을 선택한 다음 **Search by Systems Manager parameter**(Systems Manager 파라미터로 검색)를 선택하세요.

1. [**Systems Manager 파라미터(Systems Manager parameter)**]에서 파라미터를 선택합니다. 해당 AMI ID가 **Currently resolves to**(현재 확인된 값) 아래 나타납니다.

1. **검색**을 선택합니다. AMI ID와 일치하는 AMI가 목록에 나타납니다.

1. 목록에서 해당 AMI를 선택하고 **선택**을 선택합니다.

인스턴스 시작 마법사를 사용하여 인스턴스를 시작하는 방법에 대한 자세한 내용은 [콘솔에서 인스턴스 시작 마법사를 사용하여 EC2 인스턴스 시작](ec2-launch-instance-wizard.md) 섹션을 참조하세요.

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

**Systems Manager 파라미터를 사용하여 인스턴스를 시작하려면**  
[run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 명령을 `--image-id` 옵션과 함께 사용합니다. 이 예제에서는 AMI ID를 지정하는 **golden-ami**이라는 Systems Manager 파라미터를 사용합니다.

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

Systems Manager 파라미터의 버전을 생성할 수 있습니다. 다음 예시에서는 **golden-ami** 파라미터의 버전 2를 지정합니다.

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

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

**Systems Manager 파라미터를 사용하여 인스턴스를 시작하려면**  
`-ImageId` 파라미터와 함께 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet을 사용합니다. 이 예제에서는 AMI ID를 지정하는 **golden-ami**이라는 Systems Manager 파라미터를 사용합니다.

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

Systems Manager 파라미터의 버전을 생성할 수 있습니다. 다음 예시에서는 **golden-ami** 파라미터의 버전 2를 지정합니다.

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

------

# Systems Manager 퍼블릭 파라미터를 사용하여 최신 AMI 참조
<a name="finding-an-ami-parameter-store"></a>

AWS Systems Manager는 AWS에서 유지 관리하는 퍼블릭 AMI에 대한 퍼블릭 파라미터를 제공합니다. 인스턴스를 시작할 때 퍼블릭 파라미터를 사용하여 최신 AMI를 사용하고 있는지 확인할 수 있습니다. 예를 들어 퍼블릭 파라미터(`/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-arm64`)는 모든 리전에서 사용할 수 있으며 항상 특정 리전에서 arm64 아키텍처용 Amazon Linux 2023 AMI의 최신 버전을 가리킵니다.

퍼블릭 파라미터는 다음 경로에서 사용할 수 있습니다.
+ **Linux** – `/aws/service/ami-amazon-linux-latest`
+ **Windows** – `/aws/service/ami-windows-latest`

자세한 내용은 *AWS Systems Manager 사용자 가이드*의 [퍼블릭 파라미터 작업](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html)을 참조하세요.

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

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

**현재 AWS 리전에 있는 Linux AMI를 나열하려면**  
다음 [get-parameters-by-path](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html) 명령을 사용합니다. `--path` 파라미터 값은 Linux AMI에만 해당됩니다.

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

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

**현재 AWS 리전에 있는 Linux AMI를 나열하려면**  
[Get-SSMParametersByPath](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMParametersByPath.html) cmdlet을 사용합니다.

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

------

## Windows AMI 나열
<a name="list-ami-windows-latest"></a>

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

**현재 AWS 리전에 있는 Windows AMI를 나열하려면**  
다음 [get-parameters-by-path](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters-by-path.html) 명령을 사용합니다. `--path` 파라미터 값은 Windows AMI에만 해당됩니다.

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

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

**현재 AWS 리전에 있는 Windows AMI를 나열하려면**  
[Get-SSMParametersByPath](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-SSMParametersByPath.html) cmdlet을 사용합니다.

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

------

## 퍼블릭 파라미터를 사용하여 인스턴스 시작
<a name="launch-instance-public-parameter"></a>

인스턴스를 시작할 때 퍼블릭 파라미터를 지정하려면 다음 `resolve:ssm:public-parameter` 구문을 사용합니다. 여기서 `resolve:ssm`은 표준 접두사이고 `public-parameter`는 퍼블릭 파라미터의 경로와 이름입니다.

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

**퍼블릭 파라미터를 사용하여 인스턴스를 시작하려면**  
[run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 명령을 `--image-id` 옵션과 함께 사용합니다. 이 예에서는 최신 Amazon Linux 2023 AMI를 사용하여 인스턴스를 시작하기 위해 이미지 ID에 대한 Systems Manager 퍼블릭 파라미터를 지정합니다

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

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

**퍼블릭 파라미터를 사용하여 인스턴스를 시작하려면**  
`-ImageId` 파라미터와 함께 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet을 사용합니다. 이 예에서는 Windows Server 2022를 위한 최신 AMI를 사용하여 인스턴스를 시작하기 위해 이미지 ID에 대한 Systems Manager 퍼블릭 파라미터를 지정합니다.

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

------

Systems Manager 파라미터를 사용하는 추가 예는 [Query for the latest Amazon Linux AMI IDs Using AWS Systems Manager Parameter Store](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/) 및 [Query for the Latest Windows AMI Using AWS Systems Manager Parameter Store](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)를 참조하세요.

# Amazon EC2 인스턴스용 AWS Marketplace의 유료 AMI
<a name="paid-amis"></a>

**유료 AMI는 AWS Marketplace에 판매용으로 등록된 AMI입니다. AWS Marketplace은(는) EC2 인스턴스를 시작하는 데 사용할 수 있는 AMI를 비롯하여 AWS에서 실행되는 소프트웨어를 구입할 수 있는 온라인 상점입니다. 요구 사항에 맞는 제품을 찾을 수 있도록 AWS Marketplace AMI는 범주(예: Developer Tools)별로 구성됩니다. AWS Marketplace에 대한 자세한 내용은 [AWS Marketplace](https://aws.amazon.com/marketplace) 웹사이트를 참조하세요.

Red Hat과 같은 조직의 서비스 계약에 따라 제공되는 AMI를 포함하여 타사의 AWS Marketplace에서 AMI를 구매할 수 있습니다. AMI를 생성하여 AWS Marketplace에서 다른 Amazon EC2 사용자에게 판매할 수도 있습니다. 간단한 몇 단계만 수행하면 간단한 프로세스를 통해 안전하고 사용이 가능하며 보안이 제공되는 퍼블릭 AMI를 구축할 수 있습니다. AMI 사용 및 공유 방법에 대한 자세한 내용은 [Amazon EC2의 공유 AMI 사용량 이해](sharing-amis.md) 섹션을 참조하세요.

유료 AMI에서 인스턴스를 시작하는 것은 다른 AMI에서 인스턴스를 시작하는 것과 같습니다. 추가 파라미터가 필요하지 않습니다. AMI 소유자가 설정한 요금과 관련 웹 서비스에 대한 스탠다드 사용 요금(예: Amazon EC2에서 m5.small 인스턴스 유형 실행에 대한 시간당 요금)에 따라 인스턴스 요금이 부과됩니다. 추가 세금이 적용될 수 있습니다. 유료 AMI의 소유자는 특정 인스턴스가 해당 유료 AMI를 사용하여 시작되었는지 여부를 확인할 수 있습니다.

**중요**  
Amazon DevPay는 더 이상 새로운 판매자 또는 제품을 수락하지 않습니다. 이제 AWS Marketplace가 AWS를 통해 소프트웨어와 서비스를 판매하는 단일 통합 전자 상거래 플랫폼입니다. AWS Marketplace에서 소프트웨어를 배포하고 판매하는 방법에 대한 자세한 내용은 [AWS Marketplace에서의 판매](https://aws.amazon.com/marketplace/partners/management-tour)를 참조하세요. AWS Marketplace는 Amazon EBS 지원 AMI를 지원합니다.

**Topics**
+ [AWS Marketplace에서 AMI 판매](#selling-your-ami)
+ [유료 AMI 찾기](using-paid-amis-finding-paid-ami.md)
+ [AWS Marketplace에서 유료 AMI 구입](using-paid-amis-purchasing-paid-ami.md)
+ [인스턴스에서 AWS Marketplace 제품 코드 검색](get-product-code.md)
+ [지원되는 AWS Marketplace 제품에 대한 유료 지원 사용](using-paid-amis-support.md)
+ [유료 및 지원 AMI에 대한 청구서](#using-paid-amis-bills)
+ [AWS Marketplace 구독 관리](marketplace-manage-subscriptions.md)

## AWS Marketplace에서 AMI 판매
<a name="selling-your-ami"></a>

AWS Marketplace을(를) 사용하여 AMI를 판매할 수 있습니다. AWS Marketplace은(는) 조직적인 쇼핑 환경을 제공합니다. 또한 AWS Marketplace에서는 Amazon EBS 지원 AMI, 예약 인스턴스 및 스팟 인스턴스와 같은 AWS 기능도 지원합니다.

AWS Marketplace에서 AMI를 판매하는 방법에 대한 자세한 내용은 [AWS Marketplace에서의 판매](https://aws.amazon.com/marketplace/partners/management-tour)를 참조하세요.

# 유료 AMI 찾기
<a name="using-paid-amis-finding-paid-ami"></a>

유료 AMI는 구매할 수 있는 Amazon Machine Image(AMI)입니다. 유료 AMI에는 제품 코드도 있습니다. AWS Marketplace에서 구매할 수 있는 AMI를 찾을 수 있습니다.

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

**유료 AMI를 찾는 방법**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. **퍼블릭 이미지**를 첫 필터로 선택합니다.

1. 다음 중 하나를 수행하세요.
   + 제품 코드를 알고 있는 경우, **제품 코드(Product code)**를 선택한 다음, **=**를 선택하고, 제품 코드를 입력합니다.
   + 제품 코드를 모르면 검색 창에서 **Owner alias=aws-marketplace** 필터를 지정합니다. 필요에 따라 추가 필터를 지정합니다.

1. AMI의 ID를 저장합니다.

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

**유료 AMI를 찾는 방법**  
다음 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

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

출력에는 많은 수의 이미지가 포함됩니다. 필요한 AMI를 결정하는 데 도움이 되도록 필터를 지정할 수 있습니다. AMI를 찾은 후 다음 명령에서 해당 ID를 지정하여 제품 코드를 가져옵니다.

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

다음은 예제 출력입니다.

```
[
    "cdef1234abc567def8EXAMPLE"
]
```

제품 코드를 알고 있는 경우 제품 코드별로 결과를 필터링할 수 있습니다. 이 예시는 지정된 제품 코드가 포함된 최신 AMI를 반환합니다.

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

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

**유료 AMI를 찾는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

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

출력에는 많은 수의 이미지가 포함됩니다. 필요한 AMI를 결정하는 데 도움이 되도록 필터를 지정할 수 있습니다. AMI를 찾은 후 다음 명령에서 해당 ID를 지정하여 제품 코드를 가져옵니다.

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

다음은 예제 출력입니다.

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

제품 코드를 알고 있는 경우 제품 코드별로 결과를 필터링할 수 있습니다. 이 예시는 지정된 제품 코드가 포함된 최신 AMI를 반환합니다.

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

------

# AWS Marketplace에서 유료 AMI 구입
<a name="using-paid-amis-purchasing-paid-ami"></a>

AMI를 사용하여 Amazon EC2 인스턴스를 시작하려면 유료 AMI에 가입(구매)해야 합니다.

대개 유료 AMI 소유자가 가격과 해당 AMI를 구입할 수 있는 링크를 비롯하여 AMI에 대한 정보를 제공합니다. 링크를 클릭하면 AWS에 로그인하라는 메시지가 표시되고 그런 다음 AMI를 구입할 수 있습니다.

## 콘솔을 사용하여 유료 AMI 구입
<a name="purchase-paid-ami-console"></a>

Amazon EC2 Launch Wizard를 사용하여 유료 AMI를 구입할 수 있습니다. 자세한 내용은 [AWS Marketplace AMI에서 Amazon EC2 인스턴스 시작](launch-marketplace-console.md) 섹션을 참조하세요.

## AWS Marketplace을(를) 사용하여 제품 구독
<a name="subscribe-to-paid-ami"></a>

AWS Marketplace를 사용하려면 AWS 계정이 있어야 합니다. AWS Marketplace 제품에서 인스턴스를 시작하려면 Amazon EC2 서비스 사용에 가입하고 인스턴스를 시작할 제품을 구독해야 합니다. 다음 방법 중 하나를 사용하여 AWS Marketplace에서 제품을 구독할 수 있습니다.
+ **AWS Marketplace 웹 사이트**: 1-Click 배포 기능을 사용하여 미리 구성된 소프트웨어를 빠르게 시작할 수 있습니다. 자세한 내용은 [AMI-based products in AWS Marketplace](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-server-products.html)를 참조하세요.
+ **Amazon EC2 Launch Wizard**: AMI를 검색하고 마법사에서 직접 인스턴스를 시작할 수 있습니다. 자세한 내용은 [AWS Marketplace AMI에서 Amazon EC2 인스턴스 시작](launch-marketplace-console.md) 섹션을 참조하세요.

# 인스턴스에서 AWS Marketplace 제품 코드 검색
<a name="get-product-code"></a>

인스턴스 메타데이터를 사용하여 인스턴스에 대한 AWS Marketplace 제품 코드를 검색할 수 있습니다. 인스턴스에 제품 코드가 있는 경우 Amazon EC2에서 해당 코드를 반환합니다. 메타데이터 검색에 대한 자세한 내용은 [EC2 인스턴스에 대한 인스턴스 메타데이터에 액세스](instancedata-data-retrieval.md) 단원을 참조하세요.

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

**Linux**  
Linux 인스턴스에서 다음 명령을 실행합니다.

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/product-codes
```

**Windows**  
Windows 인스턴스에서 다음과 같은 cmdlet을 실행합니다.

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

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

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

**Linux**  
Linux 인스턴스에서 다음 명령을 실행합니다.

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

**Windows**  
Windows 인스턴스에서 다음 명령을 실행합니다.

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

------

# 지원되는 AWS Marketplace 제품에 대한 유료 지원 사용
<a name="using-paid-amis-support"></a>

개발자가 Amazon EC2를 사용하여 소프트웨어 또는 파생 AMI를 지원할 수도 있습니다. 개발자는 사용자가 가입하여 사용할 수 있는 지원 제품을 생성할 수 있습니다. 지원 제품에 가입하는 동안 개발자가 제품 코드를 제공합니다. 이 제품 코드를 AMI와 연결해야 합니다. 개발자는 이 제품 코드를 사용하여 인스턴스가 지원 대상인지 확인할 수 있습니다. 또한 제품의 인스턴스를 실행할 때 개발자가 지정한 제품에 대한 조건에 따라 요금이 부과됩니다.

**제한 사항**
+ 제품 코드 속성을 설정하면 해당 속성을 변경하거나 제거할 수 없습니다.
+ 지원 제품을 예약 인스턴스와 함께 사용할 수 없습니다. 항상 지원 제품의 판매자가 지정한 가격을 지불합니다.

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

**제품 코드를 AMI와 연결하는 방법**  
[modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 명령을 사용합니다.

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

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

**제품 코드를 AMI와 연결하는 방법**  
[Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) cmdlet을 사용합니다.

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

------

## 유료 및 지원 AMI에 대한 청구서
<a name="using-paid-amis-bills"></a>

매월 말 그 달에 사용한 유료 또는 지원 AMI에 대해 신용 카드로 청구되는 금액을 이메일로 수신하게 됩니다. 이 청구서는 정기 Amazon EC2 청구서와는 별개입니다. 자세한 내용은 *AWS Marketplace 구매자 가이드*에서 [제품 요금 지불](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-paying-for-products.html)을 참조하세요.

# AWS Marketplace 구독 관리
<a name="marketplace-manage-subscriptions"></a>

AWS Marketplace 웹 사이트에서 구독 정보 확인, 공급업체의 사용 지침 보기, 구독 관리 등을 수행할 수 있습니다.

## 구독 세부 정보 확인
<a name="check-sub-details"></a>

**구독 정보를 확인하려면**

1.  에 로그인합니다..[AWS Marketplace](https://aws.amazon.com/marketplace)

1. **Marketplace 계정(Your Marketplace Account)**을 선택합니다.

1. **소프트웨어 구독 관리(Manage your software subscriptions)**를 선택합니다.

1. 현재 구독이 모두 나열됩니다. **사용량 제한**을 선택하여 제품 사용에 대한 특정 지침(예: 실행 중인 인스턴스에 연결하기 위한 사용자 이름)을 봅니다.

## 구독 취소
<a name="cancel-sub"></a>

**참고**  
구독을 취소해도 해당 AMI를 사용하여 시작된 인스턴스는 종료되지 않습니다. 인스턴스가 종료될 때까지 실행 중 인스턴스에 대한 요금이 계속 청구됩니다. 구독에 대한 결제를 중지하려면 해당 AMI를 사용하여 시작된 인스턴스를 모두 종료해야 합니다.
구독을 취소하면 해당 AMI에서 더 이상 인스턴스를 시작할 수 없습니다. AMI를 다시 사용하려면 AWS Marketplace 웹 사이트 또는 Amazon EC2 콘솔의 Launch Wizard를 통해 해당 AMI를 다시 구독해야 합니다.

**AWS Marketplace 구독을 취소하는 방법**

1. 구독에 대한 결제를 중지하려면 구독에서 실행 중인 모든 인스턴스를 종료해야 합니다.
**주의**  
**인스턴스 종료는 영구적이며 취소할 수 없습니다.**  
종료한 인스턴스는 더 이상 연결할 수 없으며 복구할 수 없습니다. 연결된 Amazon EBS 볼륨도 종료 시 삭제하도록 구성한 경우 영구적으로 삭제되며 복구할 수 없습니다. 인스턴스 저장소 볼륨에 저장된 데이터는 모두 영구적으로 손실됩니다. 자세한 내용은 [인스턴스 종료 작동 방식](how-ec2-instance-termination-works.md) 섹션을 참조하세요.  
인스턴스를 종료하기 전에 종료 후에도 보존해야 하는 모든 데이터를 영구 스토리지에 백업했는지 확인하세요.

   1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

   1. 탐색 창에서 **인스턴스**를 선택합니다.

   1. 인스턴스를 선택한 다음 **인스턴스 상태**, **인스턴스 종료(삭제)**를 선택합니다.

   1. 확인 메시지가 나타나면 **종료(삭제)**를 선택합니다.

1. [AWS Marketplace](https://aws.amazon.com/marketplace)에 로그인하고 **Marketplace 계정**을 선택한 후 **소프트웨어 구독 관리**를 선택합니다.

1. **구독 취소**를 선택합니다. 취소를 확인하라는 메시지가 나타납니다.

# Amazon EC2 AMI 수명 주기
<a name="ami-lifecycle"></a>

Amazon Machine Image(AMI)는 인스턴스를 설정하고 부팅하는 데 필요한 소프트웨어 구성이 들어 있는 이미지입니다. 인스턴스를 시작할 때 AMI를 지정해야 합니다. Amazon에서 제공하는 AMI를 사용하거나 자체 AMI를 생성할 수 있습니다. AMI는 인스턴스를 시작하려는 AWS 리전에 위치해야 합니다.

AMI의 수명 주기에는 AMI 생성, 복사, 사용 중단, 비활성화 및 삭제(등록 취소)가 포함됩니다.

**AMI를 생성합니다.** Amazon에서는 인스턴스를 시작하는 데 사용할 수 있는 AMI를 제공하지만, 필요에 맞게 사용자 지정 AMI를 생성할 수도 있습니다. 사용자 지정 AMI를 생성하려면 기존 AMI에서 인스턴스를 시작하고 인스턴스를 사용자 지정한 다음(예: 소프트웨어 설치 및 운영 체제 설정 구성) 인스턴스에서 AMI를 생성합니다. 모든 인스턴스 사용자 지정은 새 AMI에 저장되므로 새 AMI에서 시작하는 인스턴스에 이러한 사용자 지정이 포함됩니다.

**증명 가능한 AMI.** EC2 인스턴스 증명을 지원하는 AMI를 생성하려면 [증명 가능한 AMI](attestable-ami.md) 섹션을 참조하세요.

**AMI를 복사합니다.** AMI를 사용하여 AMI가 위치한 AWS 리전에서만 인스턴스를 시작할 수 있습니다. 여러 리전에서 동일한 구성으로 인스턴스를 시작해야 하는 경우 다른 리전에 AMI를 복사합니다.

**AMI를 사용 중단합니다.** AMI를 대체되거나 오래된 것으로 표시하려면 즉시 또는 향후 사용 중단 날짜를 설정할 수 있습니다. 사용되지 않는 AMI는 AMI 목록에서 숨겨지지만, 사용자와 서비스가 AMI ID를 알고 있는 경우 사용되지 않는 AMI를 계속 사용할 수 있습니다.

**AMI를 비활성화합니다.** AMI의 임시 사용을 방지하기 위해 AMI를 비활성화할 수 있습니다. 비활성화한 AMI는 새 인스턴스를 시작하는 데 사용할 수 없습니다. 그러나 AMI를 다시 활성화하면 인스턴스를 시작하는 데 다시 사용할 수 있습니다. AMI를 비활성화해도 AMI에서 이미 시작된 기존 인스턴스에는 영향을 주지 않습니다.

**AMI를 등록 취소(삭제)합니다.** AMI가 더 이상 필요하지 않으면 등록을 취소하여 새 인스턴스를 시작하는 데 사용되지 않도록 할 수 있습니다. AMI가 보존 규칙과 일치하면 해당 AMI는 휴지통으로 이동되고, 보존 기간이 만료되기 전에는 복원 가능하며, 기간이 만료된 후에는 영구적으로 삭제됩니다. 보존 규칙과 일치하지 않으면 즉시 영구적으로 삭제됩니다. AMI를 등록 취소해도 AMI에서 시작된 기존 인스턴스에는 영향이 없습니다.

**AMI 수명 주기를 자동화합니다.** Amazon Data Lifecycle Manager를 사용하여 Amazon EBS 지원 AMI와 해당하는 백업 스냅샷의 생성, 보존, 복사, 사용 중단 및 등록 취소를 자동화할 수 있습니다. EC2 Image Builder를 사용하여 사용자 지정 AMI의 생성, 관리, 배포를 자동화할 수도 있습니다. 자세한 내용은 *Amazon EBS 사용 설명서*와 [EC2 Image Builder 사용 설명서](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)의 [Amazon Data Lifecycle Manager를 사용하여 백업 자동화](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-lifecycle.html)를 참조하세요.

**Topics**
+ [AMI 생성](creating-an-ami-ebs.md)
+ [Amazon S3 지원 AMI 생성](creating-an-ami-instance-store.md)
+ [Windows Sysprep을 사용하여 AMI 생성](ami-create-win-sysprep.md)
+ [AMI 복사](CopyingAMIs.md)
+ [AMI 저장 및 복원](ami-store-restore.md)
+ [AMI 계보](ami-ancestry.md)
+ [AMI 사용](ec2-ami-usage.md)
+ [AMI 사용 중지](ami-deprecate.md)
+ [AMI 비활성화](disable-an-ami.md)
+ [AMI 등록 취소](deregister-ami.md)

# Amazon EBS 지원 AMI 생성
<a name="creating-an-ami-ebs"></a>

Amazon EC2 인스턴스 또는 Amazon EC2 인스턴스의 루트 볼륨 스냅샷에서 고유 Amazon EBS 지원 AMI를 생성할 수 있습니다.

인스턴스에서 Amazon EBS 지원 AMI를 생성하려면 기존 Amazon EBS 지원 AMI를 사용하여 인스턴스를 시작합니다. 이 AMI는 [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html)를 사용하여 생성한 AWS Marketplace에서 받은 AMI 또는 액세스할 수 있는 기타 AMI일 수 있습니다. 특정 요구 사항에 맞게 인스턴스를 사용자 지정한 후 새 AMI를 생성하고 등록합니다. 그런 다음 새 AMI를 사용하여 사용자 지정이 있는 새 인스턴스를 시작할 수 있습니다.

**참고**  
EC2 인스턴스 증명을 지원하는 AMI를 생성하려면 [증명 가능한 AMI](attestable-ami.md) 섹션을 참조하세요.

아래에 설명된 절차는 암호화된 Amazon Elastic Block Store(Amazon EBS) 볼륨(루트 볼륨 포함) 및 암호화되지 않은 볼륨에서 지원되는 Amazon EC2 인스턴스에 작동합니다.

이 AMI의 생성 과정은 Amazon S3 지원 AMI와 다릅니다. 자세한 내용은 [Amazon S3 지원 AMI 생성](creating-an-ami-instance-store.md) 섹션을 참조하세요.

**Topics**
+ [인스턴스에서 AMI 생성 개요](#process-creating-an-ami-ebs)
+ [인스턴스에서 AMI 생성](#how-to-create-ebs-ami)
+ [스냅샷에서 AMI 생성](#creating-launching-ami-from-snapshot)

## 인스턴스에서 AMI 생성 개요
<a name="process-creating-an-ami-ebs"></a>

다음 다이어그램은 실행 중인 EC2 인스턴스에서 Amazon EBS 지원 AMI를 생성하는 프로세스를 요약합니다. 기존 AMI로 시작하고, 인스턴스를 시작하고, 사용자 지정하고, 새 AMI를 생성하고, 마지막으로 새 AMI의 인스턴스를 시작합니다. 다이어그램의 숫자는 다음 설명의 숫자와 일치합니다.

![\[인스턴스에서 AMI를 생성하기 위한 워크플로\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/running-instance.png)


**1 – AMI \$11: 기존 AMI로 시작**  
생성하려는 AMI와 유사한 기존 AMI를 찾습니다. 이는 AWS Marketplace에서 받은 AMI, [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html)를 사용하여 생성한 AMI 또는 액세스할 수 있는 기타 AMI일 수 있습니다. 필요에 맞게 이 AMI를 사용자 지정합니다.  
다이어그램에서 **EBS 루트 볼륨 스냅샷 \$11(EBS root volume snapshot \$11)**은 AMI가 Amazon EBS 지원 AMI이고 루트 볼륨에 대한 정보가 이 스냅샷에 저장됨을 나타냅니다.

**2 – 기존 AMI에서 인스턴스 시작**  
AMI를 구성하는 방법은 새 AMI의 기반이 될 AMI에서 인스턴스를 시작한 다음 인스턴스를 사용자 지정하는 것입니다(다이어그램에서 **3**에 표시됨). 그런 다음 사용자 지정을 포함하는 새 AMI를 생성합니다(다이어그램에서 **4**에 표시됨).

**3 - EC2 인스턴스 \$11: 인스턴스 사용자 지정**  
인스턴스에 연결하고 필요에 맞게 인스턴스를 사용자 지정합니다. 새 AMI에 이러한 사용자 지정이 포함됩니다.  
인스턴스에서 다음과 같은 작업을 수행하여 인스턴스를 사용자 지정할 수 있습니다.  
+ 소프트웨어 및 애플리케이션 설치
+ 데이터 복사
+ 임시 파일 삭제, 하드 드라이브 조각 모음을 통한 시작 속도 향상
+ 추가 EBS 볼륨 연결

**4 – 이미지 생성**  
인스턴스에서 AMI를 생성할 때 Amazon EC2는 인스턴스의 모든 기능을 중지하여 생성 프로세스 중 일관된 상태를 유지하기 위해 AMI를 생성하기 전에 인스턴스의 전원을 차단합니다. 인스턴스가 AMI 생성에 적합한 일관된 상태를 유지하는 경우 전원을 차단하지 않고 인스턴스를 재부팅하도록 Amazon EC2를 설정할 수 있습니다. 일부 파일 시스템(예: XFS)에서는 활동을 동결 및 동결 해제하여 인스턴스를 재부팅하지 않고 이미지를 안전하게 생성할 수 있습니다.  
AMI 생성 프로세스 중에 Amazon EC2는 인스턴스의 루트 볼륨과 인스턴스에 연결된 다른 EBS 볼륨의 스냅샷을 생성합니다. [AMI 등록을 해제](deregister-ami.md)하고 스냅샷을 삭제할 때까지는 스냅샷에 대한 요금이 부과됩니다. 인스턴스에 연결된 볼륨이 암호화된 경우 새 AMI는 Amazon EBS 암호화를 지원하는 인스턴스에서만 시작됩니다.  
볼륨의 크기에 따라 AMI 생성 프로세스를 완료하는 데 몇 분 정도 걸리지만 경우에 따라 24시간까지 걸릴 수도 있습니다. AMI를 생성하기 전에 볼륨의 스냅샷을 생성하는 것이 더 효율적일 수 있습니다. 이처럼 AMI를 생성할 때 작은 증분적 스냅샷만 만들어야 프로세스가 더 빠르게 완료됩니다. 스냅샷을 만드는 데 걸리는 전체 시간은 동일하게 유지됩니다.

**5 - AMI \$12: 새 AMI**  
프로세스가 완료되면 인스턴스의 루트 볼륨에서 새 AMI 및 스냅샷(**스냅샷 \$12(snapshot \$12)**)이 생성됩니다. 인스턴스 저장소 볼륨 또는 EBS 볼륨을 인스턴스에 추가한 경우 루트 볼륨 외에 새 AMI에 대한 블록 디바이스 매핑에 이러한 볼륨 관련 정보가 포함됩니다.  
Amazon EC2는 자동으로 AMI를 등록합니다.

**6 – 새 AMI에서 인스턴스 시작**  
새 AMI를 사용하여 인스턴스를 시작할 수 있습니다.

**7 - EC2 인스턴스 \$12: 새 인스턴스**  
새 AMI를 사용하여 인스턴스를 시작하면 Amazon EC2는 스냅샷을 사용하여 인스턴스의 루트 볼륨에 대한 새 EBS 볼륨을 생성합니다. 인스턴스를 사용자 지정할 때 인스턴스 저장소 볼륨 또는 EBS 볼륨을 추가한 경우 새 AMI에 대한 블록 디바이스 매핑에 이러한 볼륨 관련 정보가 포함되고, 새 AMI에서 시작하는 인스턴스에 대한 블록 디바이스 매핑에 이러한 볼륨 관련 정보가 자동으로 포함됩니다. 새 인스턴스에 대한 블록 디바이스 매핑에 지정된 인스턴스 스토어 볼륨은 새 볼륨이므로 AMI를 생성하는 데 사용된 인스턴스에 대한 인스턴스 스토어 볼륨의 데이터가 포함되어 있지 않습니다. EBS 볼륨의 데이터는 유지됩니다. 자세한 내용은 [Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑](block-device-mapping-concepts.md) 섹션을 참조하세요.  
EBS 지원 AMI에서 새 인스턴스를 만들 때는 루트 볼륨과 추가 EBS 저장소를 모두 프로덕션 환경에 배치하기 전에 초기화해야 합니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Initialize Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-initialize.html)를 참조하세요.

## 인스턴스에서 AMI 생성
<a name="how-to-create-ebs-ami"></a>

기존 인스턴스가 있는 경우 이 인스턴스에서 AMI를 생성할 수 있습니다.

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

**API 생성**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. AMI를 생성할 인스턴스를 선택하고 **Actions**(작업), **Image and templates**(이미지 및 템플릿), **Create image**(이미지 생성)를 차례로 선택합니다.
**작은 정보**  
이 옵션이 비활성화되어 있다면 Amazon EBS 지원 인스턴스가 아님을 의미합니다.

1. **Create image**(이미지 생성) 페이지에서 다음 정보를 지정합니다.

   1. **Image name**(이미지 이름)에 이미지의 고유 이름을 최대 127자로 입력합니다.

   1. **Image description**(이미지 설명)에 이미지에 대한 선택적 설명을 최대 255자로 입력합니다.

   1. **인스턴스 재부팅**의 경우 확인란을 선택된 상태로 두거나(기본값) 선택을 취소합니다.
      + **인스턴스 재부팅**을 선택하면 Amazon EC2가 새 AMI를 생성할 때 인스턴스가 재부팅되므로, 데이터가 사용되지 않는 동안 연결된 볼륨의 스냅샷을 생성하여 일관된 상태를 유지할 수 있습니다.
      + **인스턴스 재부팅** 선택을 취소하면 Amazon EC2가 새 AMI를 생성할 때 인스턴스가 종료되거나 재부팅되지 않습니다.
**주의**  
**인스턴스 재부팅** 선택을 취소하는 경우 생성된 이미지의 파일 시스템 무결성을 보장할 수 없습니다.

   1. **Instance volumes**(인스턴스 볼륨) - 다음과 같이 루트 볼륨을 수정하고, Amazon EBS 및 인스턴스 스토어 볼륨을 추가할 수 있습니다.

      1. 루트 볼륨은 첫 번째 행에 정의됩니다.
         + 루트 볼륨의 크기를 변경하려면 [**크기(Size)**] 에 필요한 값을 입력합니다.
         + [**종료 시 삭제 여부(Delete on termination)**]를 선택할 경우 이 AMI에서 생성된 인스턴스를 종료하면 EBS 볼륨이 삭제됩니다. [**종료 시 삭제 여부(Delete on termination)**]를 선택 취소할 경우 인스턴스를 종료하면 EBS 볼륨이 삭제되지 않습니다. 자세한 내용은 [인스턴스가 종료될 때 데이터 보존](preserving-volumes-on-termination.md) 섹션을 참조하세요.

      1. EBS 볼륨을 추가하려면 [**볼륨 추가(Add volume)**]를 선택합니다(새 행이 추가됨). **스토리지 유형**에서 **EBS**를 선택하고 행의 필드를 작성합니다. 새 AMI에서 인스턴스를 시작하면 추가 볼륨이 인스턴스에 자동으로 연결됩니다. 빈 볼륨은 반드시 포맷하고 탑재해야 합니다. 스냅샷 기반 볼륨을 반드시 마운트해야 합니다.

      1. 인스턴스 스토어 볼륨을 추가하려면 [Amazon EC2 AMI에 인스턴스 스토어 볼륨 추가](adding-instance-storage-ami.md)를 참조하세요. 새 AMI에서 인스턴스를 시작하면 추가 볼륨이 자동으로 시작되어 탑재됩니다. 이러한 볼륨에는 AMI를 기반으로 하는 실행 중인 인스턴스에 대한 인스턴스 스토어 볼륨의 데이터가 포함되어 있지 않습니다.

   1. **스냅샷 대상** - 인스턴스 볼륨이 EBS 로컬 스냅샷을 지원하는 로컬 영역에 있는 경우 AMI의 스냅샷을 생성할 위치를 선택합니다.
      + **AWS 리전**: 볼륨이 위치한 로컬 영역의 상위 리전에 스냅샷을 생성합니다.
      + **AWS 로컬 영역**: 볼륨과 동일한 로컬 영역에 스냅샷을 생성합니다.
**참고**  
이 옵션은 EBS 로컬 스냅샷을 지원하는 로컬 영역에만 나타나며 인스턴스가 로컬 영역에 생성된 경우에만 나타납니다. 볼륨이 리전에 있는 경우 이 옵션은 표시되지 않으며 스냅샷은 볼륨과 동일한 리전에 자동으로 생성됩니다. 자세한 내용은 *Amazon EBS 사용 설명서*에서 [로컬 영역의 로컬 스냅샷](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-localzones.html)을 참조하세요.
**중요**  
인스턴스 볼륨의 모든 스냅샷은 동일한 위치에 있어야 합니다. 기존 스냅샷의 위치를 확인합니다. 기존 스냅샷이 선택한 대상과 다른 위치에 있는 경우 AMI 생성이 실패합니다.

   1. **[태그(Tags)]** - 동일한 태그 또는 다른 태그를 사용하여 AMI와 스냅샷을 태깅할 수 있습니다.
      + AMI와 스냅샷에 *동일한* 태그를 지정하려면 [**이미지와 스냅샷을 함께 태깅(Tag image and snapshots together)**]을 선택합니다. 생성된 AMI와 모든 스냅샷에 동일한 태그가 적용됩니다.
      + AMI와 스냅샷에 *다른* 태그를 지정하려면 [**이미지 및 스냅샷을 개별적으로 태깅(Tag image and snapshots separately)**]을 선택합니다. 생성된 AMI와 스냅샷에 서로 다른 태그가 적용됩니다. 그러나 모든 스냅샷의 태그는 동일하며 각 스냅샷에 다른 태그를 지정할 수는 없습니다.

      태그를 추가하려면 [**태그 추가(Add tag)**]를 선택하고 해당 태그에 대한 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

   1. AMI를 생성할 준비가 되면 **Create image**(이미지 생성)를 선택합니다.

1. 생성 중인 AMI의 상태를 보려면

   1. 탐색 창에서 **AMI**를 선택합니다.

   1. 필터를 **Owned by me**(내 소유)로 설정하고 목록에서 AMI를 찾습니다.

      처음에 상태는 `pending`이지만 몇 분 후에 `available`로 변경되어야 합니다.

1. (선택 사항) 새 AMI에 대해 생성된 스냅샷을 보려면

   1. 이전 단계에서 찾은 AMI의 ID를 기록해 둡니다.

   1. 탐색 창에서 **스냅샷**을 선택합니다.

   1. 필터를 **Owned by me**(내 소유)로 설정한 다음 **Description**(설명) 열에 새 AMI ID가 있는 스냅샷을 찾습니다.

      이 AMI에서 인스턴스를 시작할 때, Amazon EC2가 이 스냅샷을 사용하여 인스턴스의 루트 볼륨을 생성합니다.

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

**API 생성**  
[create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) 명령을 사용합니다.

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

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

**API 생성**  
[New-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Image.html) cmdlet을 사용합니다.

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

------

## 스냅샷에서 AMI 생성
<a name="creating-launching-ami-from-snapshot"></a>

인스턴스의 루트 볼륨에 대한 스냅샷이 있으면 이 스냅샷에서 AMI를 생성할 수 있습니다.

**참고**  
대부분의 경우 Windows, Red Hat, SUSE 및 SQL Server용 AMI를 사용하려면 AMI에 올바른 라이선스 정보가 있어야 합니다. 자세한 내용은 [AMI 결제 정보 이해](ami-billing-info.md) 섹션을 참조하세요. 스냅샷에서 AMI를 생성할 때 `RegisterImage` 작업은 스냅샷의 메타데이터에서 올바른 결제 정보를 가져오지만, 이를 위해서는 적절한 메타데이터가 있어야 합니다. 올바른 결제 정보가 적용되었는지 확인하려면 새 AMI의 **플랫폼 세부 정보** 필드를 확인합니다. 필드가 비어 있거나 예상 운영 체제 코드(예: Windows, Red Hat, SUSE 또는 SQL)와 일치하지 않는 경우 AMI 생성에 실패한 것이므로 AMI를 삭제하고 [인스턴스에서 AMI 생성](#how-to-create-ebs-ami)의 지침을 따라야 합니다.

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

**스냅샷에서 AMI 생성**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 [**스냅샷(Snapshots)**]을 선택합니다.

1. AMI를 생성할 스냅샷을 선택하고 **Actions**(작업), **Create image from snapshot**(스냅샷에서 이미지 생성)을 선택합니다.

1. **스냅샷에서 이미지 생성** 페이지에서 다음 정보를 지정합니다.

   1. **이미지 이름(Image name)**에 이미지를 설명하는 이름을 입력합니다.

   1. **설명(Description)**에 이미지에 대한 간략한 설명을 입력합니다.

   1. **아키텍처(Architecture)**에 대해 이미지 아키텍처를 선택합니다. 32비트의 경우 **i386**, 64비트의 경우 **x86\$164**, 64비트 ARM의 경우 **arm64**, 64비트 macOS의 경우 **x86\$164**를 선택하세요.

   1. **루트 디바이스 이름**에서 루트 볼륨에 사용할 디바이스 이름을 입력합니다. 자세한 내용은 [Amazon EC2 인스턴스의 볼륨 디바이스 이름](device_naming.md) 섹션을 참조하세요.

   1. **가상화 유형(Virtualization type)**에서 이 AMI에서 시작된 인스턴스에서 사용할 가상화 유형을 선택합니다. 자세한 내용은 [가상화 유형](ComponentsAMIs.md#virtualization_types) 섹션을 참조하세요.

   1. (반가상화 가상화에만 해당) **커널 ID(Kernel ID)**에서 이미지의 운영 체제 커널을 선택합니다. 인스턴스의 루트 볼륨 스냅샷을 사용하는 경우 원래 인스턴스와 동일한 커널 ID를 선택합니다. 확실하지 않다면 기본 커널을 사용하십시오.

   1. (반가상화 가상화에만 해당) **RAM 디스크 ID(RAM disk ID)**에서 이미지의 RAM 디스크를 선택합니다. 특정 커널을 선택할 경우 해당 커널을 지원하는 드라이버가 설치된 특정 RAM 디스크를 선택해야 합니다.

   1. **부트 모드**에서 이미지의 부트 모드를 선택하거나, 이 AMI로 인스턴스가 시작될 때 인스턴스 유형에서 지원하는 부트 모드로 부팅되도록 **기본값 사용**을 선택합니다. 자세한 내용은 [Amazon EC2 AMI의 부팅 모드 설정](set-ami-boot-mode.md) 섹션을 참조하세요.

   1. (선택 사항) **블록 디바이스 매핑**에서 루트 볼륨을 사용자 지정하고 데이터 볼륨을 더 추가합니다.

      각 볼륨에 대해 크기, 유형, 성능 특성, 종료 시 삭제 동작 및 암호화 상태를 지정할 수 있습니다. 루트 볼륨의 경우 크기는 스냅샷의 크기보다 작을 수 없습니다. 볼륨 유형의 경우 범용 SSD `gp3`이 기본 선택 사항입니다.

   1. (선택 사항) **태그**에서 새 AMI에 하나 이상의 태그를 추가할 수 있습니다. 태그를 추가하려면 [**태그 추가(Add tag)**]를 선택하고 해당 태그에 대한 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

   1. AMI를 생성할 준비가 되면 **Create image**(이미지 생성)를 선택합니다.

1. (Windows, Red Hat, SUSE, SQL Server 전용) 올바른 결제 정보가 적용되었는지 확인하려면 새 AMI의 **플랫폼 세부 정보** 필드를 확인합니다. 필드가 비어 있거나 예상 운영 체제 코드(예: **Windows** 또는 **Red Hat**)와 일치하지 않는 경우 AMI 생성에 실패한 것이므로 AMI를 삭제하고 [인스턴스에서 AMI 생성](#how-to-create-ebs-ami)의 지침을 따라야 합니다.

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

**AWS CLI를 사용하여 스냅샷에서 AMI를 생성하려면 다음을 수행하세요.**  
[register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 명령을 사용합니다.

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

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

**PowerShell을 사용하여 스냅샷에서 AMI를 생성하려면 다음을 수행하세요.**  
[Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet을 사용합니다.

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

------

# Amazon S3 지원 AMI 생성
<a name="creating-an-ami-instance-store"></a>

루트 볼륨 유형은 인스턴스를 시작할 때 지정한 AMI에 따라 결정됩니다.

Amazon S3 지원 Linux AMI를 생성하려면 기존 Amazon S3 지원 Linux AMI에서 시작한 인스턴스에서 시작합니다. 필요에 맞게 인스턴스를 사용자 지정한 후에는 볼륨을 번들링하고 이러한 사용자 지정을 적용하여 새 인스턴스를 시작하는 데 사용할 수 있는 새 AMI를 등록합니다.

Windows AMI는 루트 볼륨에 대한 인스턴스 저장소를 지원하지 않으므로 Amazon S3 지원 Windows AMI를 생성할 수 없습니다.

**중요**  
C1, C3, D2, I2, M1, M2, M3, R3, X1 인스턴스 유형만 인스턴스 저장소 볼륨을 루트 볼륨으로 지원하며, Amazon S3 지원 AMI가 필요합니다.

이 AMI의 생성 과정은 Amazon EBS 지원 AMI와 다릅니다. 자세한 내용은 [Amazon EBS 지원 AMI 생성](creating-an-ami-ebs.md) 섹션을 참조하세요.

**Topics**
+ [AMI 생성 개요](#process-creating-an-ami-instance-store)
+ [사전 조건](#bundle-ami-prerequisites)
+ [Amazon Linux 인스턴스에서 AMI 생성](#amazon_linux_instructions)
+ [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md)
+ [Amazon EC2 AMI 도구 참조](ami-tools-commands.md)
+ [Amazon S3 지원 AMI를 EBS 지원 AMI로 변환](Using_ConvertingS3toEBS.md)

## AMI 생성 개요
<a name="process-creating-an-ami-instance-store"></a>

다음 다이어그램은 인스턴스 저장소 루트 볼륨이 있는 인스턴스에서 AMI를 만드는 프로세스를 요약한 것입니다.

![\[Amazon S3 지원 AMI를 생성합니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami_create_instance_store.png)


우선 만들려는 AMI와 비슷한 AMI에서 인스턴스를 시작합니다. 인스턴스에 연결하여 인스턴스를 사용자 지정할 수 있습니다. 인스턴스가 원하는 대로 설정되었으면 이 인스턴스를 번들링할 수 있습니다. 번들링 프로세스가 완료되는 데 몇 분 정도 걸립니다. 프로세스가 완료된 후에는 이미지 매니페스트(`image.manifest.xml`)와 루트 볼륨 템플릿을 포함하는 파일(`image.part.`*xx*)로 구성된 번들이 만들어집니다. 그 다음에는 이 번들을 Amazon S3 버킷으로 업로드하고 AMI를 등록합니다.

**참고**  
Amazon S3 지원 Linux AMI의 S3 버킷에 객체를 업로드하려면 버킷에 대해 ACL을 사용하도록 설정해야 합니다. 그렇지 않으면 Amazon EC2는 업로드할 객체에 ACL을 설정할 수 없습니다. 대상 버킷에서 S3 객체 소유권에 대해 버킷 소유자 강제 설정을 사용하는 경우 ACL이 비활성화되어 있으므로 이 설정은 작동하지 않습니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)를 참조하십시오.

새 AMI를 사용하여 인스턴스를 시작하는 경우 Amazon S3으로 업로드한 번들을 사용하여 인스턴스용 루트 볼륨이 생성됩니다. Amazon S3의 번들에 사용된 스토리지 공간에 대해 사용자가 삭제할 때까지 사용자 계정에 요금이 발생합니다. 자세한 내용은 [Amazon EC2 AMI 등록 취소](deregister-ami.md) 섹션을 참조하세요.

루트 볼륨 외에도 인스턴스에 인스턴스 저장소 볼륨을 추가하는 경우, 새 AMI에 대한 블록 디바이스 매핑과 새 AMI에서 시작하는 인스턴스에 대한 블록 디바이스 매핑에 이러한 볼륨에 대한 정보가 포함됩니다. 자세한 내용은 [Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑](block-device-mapping-concepts.md) 섹션을 참조하세요.

## 사전 조건
<a name="bundle-ami-prerequisites"></a>

AMI를 만들려면 먼저 다음 작업을 완료해야 합니다.
+ AMI 도구를 설치합니다. 자세한 내용은 [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md) 섹션을 참조하세요.
+ AWS CLI를 설치합니다. 자세한 내용은 [AWS CLI 시작하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)를 참조하세요.
+ 번들용 S3 버킷이 있고 버킷에 ACL이 활성화되어 있는지 확인합니다. ACL 구성에 대한 자세한 내용은 [ACL 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)을 참조하세요.
  + AWS Management Console을 사용하여 S3 버킷에 폴더를 생성하려면 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 열고 **버킷 생성**을 선택합니다.
  + AWS CLI을 사용하여 S3 버킷을 생성하려면 [mb](https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html) 명령을 사용할 수 있습니다. 설치된 AMI 도구 버전이 1.5.18 이상일 경우 `ec2-upload-bundle` 명령을 사용하여 S3 버킷을 생성할 수도 있습니다. 자세한 내용은 [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) 섹션을 참조하세요.
+ 번들의 파일이 S3 버킷에서 암호화되지 않았는지 확인합니다. AMI에 암호화가 필요한 경우 EBS 지원 AMI를 대신 사용할 수 있습니다. 자세한 내용은 [EBS-backed AMI에서 암호화 사용](AMIEncryption.md) 섹션을 참조하세요.
+ AWS 계정 ID가 있어야 합니다. 자세한 내용은 **AWS Account Management 참조 안내서의 [View AWS 계정 identifiers](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)를 참조하세요.
+ AWS CLI를 사용하기 위한 자격 증명이 있는지 확인합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI 인증 및 액세스 제어](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)를 참조하세요.
+ X.509 인증서와 그에 따른 프라이빗 키가 있어야 합니다.
  + X.509 인증서를 만들어야 할 경우 [서명 인증서 관리](set-up-ami-tools.md#ami-tools-managing-certs) 단원을 참조하세요. X.509 인증서 및 프라이빗 키는 AMI를 암호화하고 해독하는 데 사용됩니다.
  + [중국(베이징)] `$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-cn-north-1.pem` 인증서를 사용합니다.
  + [AWS GovCloud(미국 서부)] `$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2-gov.pem` 인증서를 사용합니다.
+ 인스턴스에 연결하여 인스턴스를 사용자 지정합니다. 예를 들어, 소프트웨어 및 애플리케이션을 설치하고, 데이터를 복사하고, 임시 파일을 삭제하고, Linux 구성을 수정할 수 있습니다.

## Amazon Linux 인스턴스에서 AMI 생성
<a name="amazon_linux_instructions"></a>

다음 절차에서는 Amazon Linux 1을 실행하는 인스턴스 저장소 루트 볼륨이 있는 인스턴스에서 AMI를 생성하는 방법을 설명합니다. 다른 Linux 배포를 실행하는 인스턴스에서는 작동하지 않을 수 있습니다.

**AMI 도구 사용을 준비하려면(HVM 인스턴스에만 해당)**

1. AMI 도구를 올바르게 부팅하려면 GRUB Legacy가 필요합니다. 다음 명령을 사용하여 GRUB을 설치합니다.

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

1. 다음 명령을 사용하여 파티션 관리 패키지를 설치합니다.

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

**인스턴스 저장소 루트 볼륨이 있는 Amazon Linux 인스턴스에서 AMI를 생성하려면**

이 절차에서는 [사전 조건](#bundle-ami-prerequisites)의 사전 조건을 충족한다고 가정합니다.

다음 명령에서는 자신의 정보로 각각의 *사용자 입력 자리 표시자*를 바꿉니다.

1. 인스턴스에 자격 증명을 업로드합니다. 이러한 자격 증명은 사용자와 Amazon EC2만 사용자의 AMI에 액세스할 수 있음을 보장하는 데 사용됩니다.

   1. 다음과 같이 인스턴스에서 자격 증명에 대한 임시 디렉터리를 생성합니다.

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

      이렇게 하면 생성된 이미지에서 자격 증명을 제외할 수 있습니다.

   1. [scp](linux-file-transfer-scp.md) 등의 보안 복사 도구를 사용하여 컴퓨터의 X.509 인증서와 해당 프라이빗 키를 인스턴스의 `/tmp/cert` 디렉터리로 복사합니다. 다음 `-i my-private-key.pem` 명령의 **scp** 옵션은 X.509 프라이빗 키가 아니라 SSH를 사용하여 인스턴스에 연결하는 데 사용되는 프라이빗 키입니다. 예:

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

   또는 이들은 일반 텍스트 파일이므로 텍스트 편집기에서 인증서와 키를 열고 내용을 `/tmp/cert`의 새 파일로 복사할 수 있습니다.

1. <a name="step_with_bundle_path_amazon_linux"></a>인스턴스 내에서 [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) 명령을 실행하여 Amazon S3로 업로드할 번들을 준비합니다. `-e` 옵션을 지정하여 자격 증명이 저장되어 있는 디렉터리를 제외해야 합니다. 기본적으로 번들 프로세스에는 중요 정보를 포함할 수 있는 파일이 제외됩니다. 값에는 `*.sw`, `*.swo`, `*.swp`, `*.pem`, `*.priv`, `*id_rsa*`, `*id_dsa*` `*.gpg`, `*.jks`, `*/.ssh/authorized_keys` 및 `*/.bash_history`가 포함됩니다. 이러한 파일을 모든 포함하려면 `--no-filter` 옵션을 사용합니다. 이러한 파일 중 일부만 포함하려면 `--include` 옵션을 사용합니다.
**중요**  
기본적으로 AMI 번들링 프로세스에서는 루트 볼륨을 나타내는 `/tmp` 디렉터리에 압축 및 암호화된 파일 모음이 생성됩니다. `/tmp`에 사용 가능한 디스크 공간이 충분하지 않아서 번들을 저장할 수 없으면 `-d /path/to/bundle/storage` 옵션을 사용하여 번들을 저장할 다른 위치를 지정합니다. 인스턴스 중에는 `/mnt` 또는 `/media/ephemeral0`에 사용자가 사용할 수 있는 휘발성 스토리지가 탑재된 인스턴스도 있으며, 새 Amazon EBS 볼륨을 생성, 연결 및 탑재하여 번들을 저장할 수도 있습니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Create an Amazon EBS volume](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html)을 참조하세요.

   1. **ec2-bundle-vol** 명령을 루트로 실행해야 합니다. 대부분의 명령에 대해 **sudo**를 사용하여 승격된 권한을 얻을 수 있지만 이 경우 환경 변수를 유지하려면 **sudo -E su**를 실행해야 합니다.

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

      이제 bash 프롬프트가 사용자를 루트 사용자로 식별하고 달러 기호가 해시 태그로 바뀌어 현재 위치가 루트 셸임을 표시합니다.

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

   1. AMI 번들을 실행하려면 다음과 같이 [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) 명령을 실행합니다.

      ```
      [root ec2-user]# ec2-bundle-vol -k /tmp/cert/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -c /tmp/cert/cert-HKZYKTAIG2ECMXYIBH3HXV4ZBEXAMPLE.pem -u 123456789012 -r x86_64 -e /tmp/cert --partition gpt
      ```
**참고**  
중국(베이징) 및 AWS GovCloud(미국 서부) 리전의 경우 `--ec2cert` 파라미터를 사용하고 [사전 조건](#bundle-ami-prerequisites)에 따라 인증서를 지정합니다.

      이미지가 생성되는 데 몇 분 정도 걸릴 수 있습니다. 이 명령이 완료되면 `/tmp`(또는 기본값이 아닌) 디렉터리에 번들(`image.manifest.xml`과 여러 `image.part.`*xx* 파일)이 포함됩니다.

   1. 루트 셸을 종료합니다.

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

1. (선택 사항) 인스턴스 스토어 볼륨을 더 추가하려면 AMI의 `image.manifest.xml` 파일에서 블록 디바이스 매핑을 편집합니다. 자세한 내용은 [Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑](block-device-mapping-concepts.md) 섹션을 참조하세요.

   1. `image.manifest.xml` 파일의 백업을 만듭니다.

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

   1. 읽고 편집하기 쉽도록 `image.manifest.xml` 파일의 서식을 다시 설정합니다.

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

   1. 텍스트 편집기로 `image.manifest.xml`에서 블록 디바이스 매핑을 편집합니다. 아래 예는 `ephemeral1` 인스턴스 스토어 볼륨의 새 항목을 보여 줍니다.
**참고**  
제외 파일 목록은 [ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) 단원을 참조하세요.

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

   1. `image.manifest.xml` 파일을 저장하고 텍스트 편집기를 종료합니다.

1. Amazon S3에 번들을 업로드하려면 다음과 같이 [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) 명령을 실행합니다.

   ```
   [ec2-user ~]$ ec2-upload-bundle -b amzn-s3-demo-bucket/bundle_folder/bundle_name -m /tmp/image.manifest.xml -a your_access_key_id -s your_secret_access_key
   ```
**중요**  
US East (N. Virginia) 이외 리전에서 AMI를 등록하려면 `--region` 옵션이 있는 대상 리전과 대상 리전에 이미 존재하는 버킷 경로 또는 대상 리전에 생성할 수 있는 고유 버킷 경로를 모두 지정해야 합니다.

1. (선택 사항) 번들을 Amazon S3에 업로드한 후에는 다음 `/tmp` 명령을 사용하여 인스턴스의 **rm** 디렉터리에서 번들을 제거할 수 있습니다.

   ```
   [ec2-user ~]$ sudo rm /tmp/image.manifest.xml /tmp/image.part.* /tmp/image
   ```
**중요**  
`-d /path/to/bundle/storage`에서 [Step 2](#step_with_bundle_path_amazon_linux) 옵션과 함께 경로를 지정한 경우 `/tmp` 대신 해당 경로를 사용합니다.

1. AMI를 등록하려면 다음과 같이 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 명령을 사용합니다.

   ```
   [ec2-user ~]$ aws ec2 register-image --image-location amzn-s3-demo-bucket/bundle_folder/bundle_name/image.manifest.xml --name AMI_name --virtualization-type hvm
   ```
**중요**  
이전에 [ec2-upload-bundle](ami-tools-commands.md#ami-upload-bundle) 명령에 리전을 지정한 경우 이 명령에도 해당 리전을 다시 지정하세요.

# Amazon EC2 AMI 도구 설정
<a name="set-up-ami-tools"></a>

AMI 도구를 사용하여 Amazon S3 지원 Linux AMI를 생성하고 관리할 수 있습니다. 도구를 사용하려면 Linux 인스턴스에 이 도구를 설치해야 합니다. AMI 도구는 RPM으로도 설치 가능하고 RPM을 지원하지 않는 Linux 배포판의 경우 .zip 파일로도 설치 가능합니다.

**RPM을 사용하여 AMI 도구를 설치하려면**

1. yum과 같은 Linux 배포용 패키지 관리자를 사용하여 Ruby를 설치합니다. 예:

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

1. wget 또는 curl과 같은 도구를 사용하여 RPM 파일을 다운로드합니다. 예:

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

1. 다음 명령을 사용하여 RPM 파일의 서명이 활성화되었는지 확인합니다.

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

   위의 명령은 파일의 SHA1 및 MD5 해시가 `OK.`임을 나타냅니다. 명령에서 해시가 `NOT OK`임을 나타내면 다음 명령을 사용하여 파일의 헤더 SHA1 및 MD5 해시를 표시합니다.

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

   그런 다음 파일의 헤더 SHA1 및 MD5 해시를 다음 확인된 AMI 도구 해시와 비교하여 파일의 진위 여부를 확인합니다.
   + 헤더 SHA1: a1f662d6f25f69871104e6a62187fa4df508f880
   + MD5: 9faff05258064e2f7909b66142de6782

   파일의 헤더 SHA1 및 MD5 해시가 확인된 AMI 도구 해시와 일치하면 다음 단계를 계속 진행합니다.

1. 다음 명령을 사용하여 RPM을 설치합니다:

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

1. [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 명령을 사용하여 AMI 도구 설치를 확인합니다.

   ```
   [ec2-user ~]$ ec2-ami-tools-version
   ```
**참고**  
"cannot load such file -- ec2/amitools/version (LoadError)"과 같은 로드 오류가 발생하면 다음 단계를 수행하여 AMI 도구 설치 위치를 `RUBYLIB` 경로에 추가합니다.

1. (선택 사항) 이전 단계에서 오류가 발생하면 AMI 도구 설치 위치를 `RUBYLIB` 경로에 추가합니다.

   1. 다음 명령을 실행하여 추가할 경로를 확인합니다.

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

      위의 예시를 보면 이전 로드 오류에서 없다고 표시된 파일이 `/usr/lib/ruby/site_ruby` 및 `/usr/lib64/ruby/site_ruby`에 위치하고 있습니다.

   1. 이전 단계의 위치를 `RUBYLIB` 경로에 추가합니다.

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

   1. [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 명령을 사용하여 AMI 도구 설치를 확인합니다.

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

**.zip 파일을 사용하여 AMI 도구를 설치하려면**

1. **apt-get**과 같은 Linux 배포용 패키지 관리자를 사용하여 Ruby를 설치하고 압축을 풉니다. 예:

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

1. wget 또는 curl과 같은 도구를 사용하여 .zip 파일을 다운로드합니다. 예:

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

1. 파일의 압축을 적합한 설치 디렉터리(예: `/usr/local/ec2`)에 풉니다.

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

   .zip 파일에는 ec2-ami-tools-*x*.*x*.*x* 폴더가 있습니다. *x*.*x*.*x*는 도구의 버전 번호입니다(예: `ec2-ami-tools-1.5.7`).

1. `EC2_AMITOOL_HOME` 환경 변수를 도구의 설치 디렉터리로 설정합니다. 예:

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

1. 도구를 `PATH` 환경 변수에 추가합니다. 예:

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

1. [ec2-ami-tools-version](ami-tools-commands.md#ami-tools-version) 명령을 사용하여 AMI 도구 설치를 확인할 수 있습니다.

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

## 서명 인증서 관리
<a name="ami-tools-managing-certs"></a>

AMI 도구의 특정 명령에는 X.509 인증서라고도 하는 서명 인증서가 필요합니다. 인증서를 생성한 다음 AWS에 업로드해야 합니다. 예를 들어 OpenSSL과 같은 타사 도구를 사용하여 인증서를 생성할 수 있습니다.

**서명 인증서를 만들려면**

1. OpenSSL을 설치 및 구성합니다.

1. `openssl genrsa` 명령을 사용하여 프라이빗 키를 생성하고 `.pem` 파일에 출력을 저장합니다. 2048 또는 4096비트 RSA 키를 생성하는 것이 좋습니다.

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

1. `openssl req` 명령을 사용하여 인증서를 만듭니다.

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

AWS에 인증서를 업로드하려면 [upload-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/upload-signing-certificate.html) 명령을 사용합니다.

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

사용자에게 적용되는 인증서를 나열하려면 [list-signing-certificates](https://docs.aws.amazon.com/cli/latest/reference/iam/list-signing-certificates.html) 명령을 사용하십시오.

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

사용자의 서명 인증서를 비활성화하거나 다시 활성화하려면 [update-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/update-signing-certificate.html) 명령을 사용하십시오. 다음 명령으로 인증서를 비활성화할 수 있습니다.

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

인증서를 삭제하려면 [delete-signing-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-signing-certificate.html) 명령을 사용하십시오.

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

# Amazon EC2 AMI 도구 참조
<a name="ami-tools-commands"></a>

AMI 도구 명령을 사용하여 Amazon S3 지원 Linux AMI를 생성하고 관리할 수 있습니다. 도구를 설정하려면 [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md)을 참조하세요.

액세스 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자를 위한 액세스 키 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)를 참조하세요.

**Topics**
+ [ec2-ami-tools-version](#ami-tools-version)
+ [ec2-bundle-image](#ami-bundle-image)
+ [ec2-bundle-vol](#ami-bundle-vol)
+ [ec2-delete-bundle](#ami-delete-bundle)
+ [ec2-download-bundle](#ami-download-bundle)
+ [ec2-migrate-manifest](#ami-migrate-manifest)
+ [ec2-unbundle](#ami-unbundle)
+ [ec2-upload-bundle](#ami-upload-bundle)
+ [AMI 도구의 일반 옵션](#common-args-ami)

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

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

AMI 도구 버전을 설명합니다.

### 구문
<a name="ami-tools-version-request"></a>

**ec2-ami-tools-version**

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

버전 정보입니다.

### 예시
<a name="ami-tools-version-response"></a>

이 예시 명령은 사용 중인 AMI 도구의 버전 정보를 표시합니다.

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

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

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

루프백 파일에서 생성한 운영 체제 이미지로부터 Amazon S3 지원 Linux AMI를 생성합니다.

### 구문
<a name="bundle-image-request"></a>

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

### 옵션
<a name="bundle-image-parameters"></a>

`-c, --cert` *path*  
사용자의 PEM 인코딩된 RSA 퍼블릭 키 인증서 파일입니다.  
Required: Yes

`-k, --privatekey` *path*  
PEM 인코딩된 RSA 키 파일의 경로입니다. 이 번들이 번들링되지 않아 안전한 장소에 보관되도록 이 키를 지정해야 합니다. 키를 AWS 계정에 등록할 필요는 없습니다.  
Required: Yes

`-u, --user ` *계정*  
사용자의 AWS 계정 ID(대시 없이)입니다.  
Required: Yes

`-i, --image` *path*  
번들링할 이미지에 대한 경로입니다.  
Required: Yes

`-d, --destination` *path*  
번들을 생성할 디렉터리입니다.  
기본값: `/tmp`  
Required: No

`--ec2cert` *path*  
이미지 매니페스트를 암호화하는 데 사용되는 Amazon EC2 X.509 퍼블릭 키 인증서의 경로입니다.  
`us-gov-west-1` 및 `cn-north-1` 리전은 기본값이 아닌 퍼블릭 키 인증서를 사용하며, 해당 인증서의 경로는 이 옵션으로 지정해야 합니다. 인증서 경로는 AMI 도구의 설치 방법에 따라 다릅니다. Amazon Linux의 경우, 인증서가 `/opt/aws/amitools/ec2/etc/ec2/amitools/`에 있습니다. [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md)의 RPM 또는 ZIP 파일에서 AMI 도구를 설치한 경우 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`에 인증서가 있습니다.  
필수: `us-gov-west-1` 및 `cn-north-1` 리전에만 해당됩니다.

`-r, --arch` *아키텍처*  
이미지 아키텍처. 명령줄에 아키텍처를 제공하지 않으면 번들링 시작 시 해당 메시지가 표시됩니다.  
유효한 값: `i386` \$1 `x86_64`  
Required: No

`--productcodes` *code1,code2,...*  
등록 시 이미지에 연결할 제품 코드로, 쉼표로 구분됩니다.  
Required: No

`-B, --block-device-mapping` *매핑*  
이 AMI의 인스턴스에 블록 디바이스를 표시할 방법을 정의합니다(인스턴스 유형이 지정된 디바이스를 지원하는 경우).  
쉼표로 구분된 키-값 페어 목록을 지정합니다. 여기서 각 키는 가상 이름이며 각 값은 해당 디바이스 이름입니다. 가상 이름에는 다음이 포함됩니다.  
+ `ami` - 인스턴스별로 표시되는 루트 파일 시스템 디바이스
+ `root` - 커널별로 표시되는 루트 파일 시스템 디바이스
+ `swap` - 인스턴스별로 표시되는 교체 디바이스
+ `ephemeralN` - N번째 인스턴스 스토어 볼륨
Required: No

`-p, --prefix` *prefix*  
번들링된 AMI 파일의 파일 이름 접두사입니다.  
기본값: 이미지 파일의 이름입니다. 예를 들어, 이미지 경로가 `/var/spool/my-image/version-2/debian.img`이면, 기본 접두사는 `debian.img`입니다.  
Required: No

`--kernel` *kernel\$1id*  
사용되지 않음. [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html)를 사용하여 커널을 설정합니다.  
Required: No

`--ramdisk` *ramdisk\$1id*  
사용되지 않음. [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html)를 사용하여 RAM 디스크를 설정합니다(필요한 경우).  
필수 여부: 아니요

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

번들링 프로세스의 단계 및 상태를 설명하는 상태 메시지입니다.

### 예시
<a name="bundle-image-response"></a>

이 예시에서는 루프백 파일에서 생성한 운영 체제 이미지로부터 번들링된 AMI를 생성합니다.

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

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

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

인스턴스의 루트 볼륨 복사본을 압축, 암호화 및 서명하여 Amazon S3 지원 Linux AMI를 생성합니다.

인스턴스로부터 제품 코드, 커널 설정, RAM 디스크 설정 및 블록 디바이스 매핑을 상속하려는 Amazon EC2 시도입니다.

기본적으로 번들 프로세스에는 중요 정보를 포함할 수 있는 파일이 제외됩니다. 값에는 `*.sw`, `*.swo`, `*.swp`, `*.pem`, `*.priv`, `*id_rsa*`, `*id_dsa*` `*.gpg`, `*.jks`, `*/.ssh/authorized_keys` 및 `*/.bash_history`가 포함됩니다. 이러한 파일을 모든 포함하려면 `--no-filter` 옵션을 사용합니다. 이러한 파일 중 일부만 포함하려면 `--include` 옵션을 사용합니다.

자세한 내용은 [Amazon S3 지원 AMI 생성](creating-an-ami-instance-store.md) 섹션을 참조하세요.

### 구문
<a name="bundle-vol-request"></a>

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

### 옵션
<a name="bundle-vol-parameters"></a>

`-c, --cert` *path*  
사용자의 PEM 인코딩된 RSA 퍼블릭 키 인증서 파일입니다.  
Required: Yes

`-k, --privatekey ` *path*   
사용자의 PEM 인코딩된 RSA 키 파일의 경로입니다.  
Required: Yes

`-u, --user` *계정*  
사용자의 AWS 계정 ID(대시 없이)입니다.  
Required: Yes

`-d, --destination` *destination*  
번들을 생성할 디렉터리입니다.  
기본값: `/tmp`  
Required: No

`--ec2cert` *path*  
이미지 매니페스트를 암호화하는 데 사용되는 Amazon EC2 X.509 퍼블릭 키 인증서의 경로입니다.  
`us-gov-west-1` 및 `cn-north-1` 리전은 기본값이 아닌 퍼블릭 키 인증서를 사용하며, 해당 인증서의 경로는 이 옵션으로 지정해야 합니다. 인증서 경로는 AMI 도구의 설치 방법에 따라 다릅니다. Amazon Linux의 경우, 인증서가 `/opt/aws/amitools/ec2/etc/ec2/amitools/`에 있습니다. [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md)의 RPM 또는 ZIP 파일에서 AMI 도구를 설치한 경우 `$EC2_AMITOOL_HOME/etc/ec2/amitools/`에 인증서가 있습니다.  
필수: `us-gov-west-1` 및 `cn-north-1` 리전에만 해당됩니다.

`-r, --arch ` *아키텍처*  
이미지 아키텍처입니다. 명령줄에 이를 제공하지 않으면 번들링 시작 시 이를 제공하라는 메시지가 표시됩니다.  
유효한 값: `i386` \$1 `x86_64`  
Required: No

`--productcodes` *code1,code2,...*  
등록 시 이미지에 연결할 제품 코드로, 쉼표로 구분됩니다.  
Required: No

`-B, --block-device-mapping` *매핑*  
이 AMI의 인스턴스에 블록 디바이스를 표시할 방법을 정의합니다(인스턴스 유형이 지정된 디바이스를 지원하는 경우).  
쉼표로 구분된 키-값 페어 목록을 지정합니다. 여기서 각 키는 가상 이름이며 각 값은 해당 디바이스 이름입니다. 가상 이름에는 다음이 포함됩니다.  
+ `ami` - 인스턴스별로 표시되는 루트 파일 시스템 디바이스
+ `root` - 커널별로 표시되는 루트 파일 시스템 디바이스
+ `swap` - 인스턴스별로 표시되는 교체 디바이스
+ `ephemeralN` - N번째 인스턴스 스토어 볼륨
Required: No

`-a, --all`  
원격으로 마운트된 파일 시스템의 디렉터리를 포함하여 모든 디렉터리를 번들링합니다.  
Required: No

`-e, --exclude ` *directory1,directory2,...*  
번들 작업에서 제외할 절대 디렉터리 경로 및 파일 목록입니다. 이 파라미터는 `--all` 옵션보다 우선합니다. exclude가 지정되면 파라미터와 함께 나열된 디렉터리 및 하위 디렉터리는 볼륨에 번들링되지 않습니다.  
Required: No

`-i, --include ` *file1,file2,...*  
번들 작업에 포함할 파일 목록입니다. 지정된 파일은 중요한 정보를 포함할 수 있으므로 AMI에서 제외되지 않습니다.  
Required: No

`--no-filter`  
지정한 경우 지정한 파일이 중요한 정보를 포함할 수 있으므로 AMI에서 파일을 제외하지 않습니다.  
Required: No

`-p, --prefix ` *prefix*  
번들링된 AMI 파일의 파일 이름 접두사입니다.  
기본값: `image`  
Required: No

`-s, --size` *size*  
생성할 이미지 파일의 크기(MB, 1024 \$1 1024바이트)입니다. 최대 크기는 10240MB입니다.  
기본값: 10240  
Required: No

`--[no-]inherit`  
이미지가 인스턴스의 메타데이터를 상속해야 하는지 여부를 나타냅니다(기본값은 상속). `--inherit`를 활성화했지만 인스턴스 메타데이터에 액세스할 수 없으면 번들링이 실패합니다.  
Required: No

`-v, --volume ` *볼륨*  
번들을 생성해 올 마운트된 볼륨의 절대 경로입니다.  
기본값: 루트디렉터리입니다(/).  
Required: No

`-P, --partition` *type*  
디스크 이미지에서 파티션 테이블을 사용해야 하는지 여부를 나타냅니다. 파티션 테이블 유형을 지정하지 않으면, 볼륨의 상위 블록 디바이스에서 사용한 유형이 기본값이 됩니다. 이를 적용할 수 없으면 `gpt`가 기본값이 됩니다.  
유효한 값: `mbr` \$1 `gpt` \$1 `none`  
Required: No

`-S, --script` *스크립트*  
번들링 작업 직전에 실행할 사용자 정의 스크립트입니다. 스크립트에서 하나의 인수(볼륨의 마운트 지점)를 예상해야 합니다.  
Required: No

`--fstab` *path*  
이미지에 번들링할 fstab 경로입니다. 지정하지 않으면 Amazon EC2가 /etc/fstab을 번들링합니다.  
Required: No

`--generate-fstab`  
Amazon EC2-제공 fstab을 사용하여 볼륨을 번들링합니다.  
Required: No

`--grub-config`  
이미지에 번들링할 대체 grub 구성 파일 경로입니다. 기본적으로 `ec2-bundle-vol`은 복제된 이미지에 `/boot/grub/menu.lst` 또는 `/boot/grub/grub.conf`가 있을 것으로 예상합니다. 이 옵션을 사용하면 대체 grub 구성 파일에 대한 경로를 지정할 수 있습니다. 이 경로는 기본값(있는 경우)을 덮어씁니다.  
Required: No

`--kernel` *kernel\$1id*  
사용되지 않음. [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html)를 사용하여 커널을 설정합니다.  
Required: No

`--ramdisk`*ramdisk\$1id*  
사용되지 않음. [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html)를 사용하여 RAM 디스크를 설정합니다(필요한 경우).  
필수 여부: 아니요

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

번들링 단계 및 상태를 설명하는 상태 메시지입니다.

### 예시
<a name="bundle-vol-response"></a>

이 예시에서는 로컬 시스템의 루트 파일 시스템의 스냅샷을 압축, 암호화 및 서명하여 번들링된 AMI를 생성합니다.

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

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

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

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

Amazon S3 스토리지에서 지정된 번들을 삭제합니다. 번들을 삭제한 다음에는 해당 AMI에서 인스턴스를 시작할 수 있습니다.

### 구문
<a name="delete-bundle-request"></a>

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

### 옵션
<a name="delete-bundle-parameters"></a>

`-b, --bucket `*bucket*  
번들링된 AMI를 포함하는 Amazon S3 버킷 이름으로, '/'-delimited 경로 접두사가 붙기도 합니다(옵션).  
Required: Yes

`-a, --access-key` *access\$1key\$1id*  
AWS 액세스 키 ID입니다.  
Required: Yes

`-s, --secret-key` *secret\$1access\$1key*  
AWS 보안 액세스 키입니다.  
Required: Yes

`-t, --delegation-token` *token*  
AWS 요청에 함께 전달되는 위임 토큰입니다. 자세한 내용은 *IAM 사용 설명서*의 [임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)을 참조하세요.  
필수 항목 여부: 임시 보안 자격 증명을 사용하는 경우에만.  
기본값: `AWS_DELEGATION_TOKEN` 환경 변수 값(설정된 경우).

`--region`*region*  
요청 서명에서 사용하는 리전입니다.  
기본값: `us-east-1`  
필수: 서명 버전 4를 사용하는 경우 필수입니다.

`--sigv`*version*  
요청 서명 시 사용하는 서명 버전입니다.  
유효한 값: `2` \$1 `4`  
기본값: `4`  
Required: No

`-m, --manifest`*경로*  
매니페스트 파일 경로입니다.  
필수: `--prefix` 또는 `--manifest`를 지정해야 합니다.

`-p, --prefix` *prefix*  
번들링된 AMI 파일 이름 접두사입니다. 전체 접두사를 제공합니다. 예를 들어 접두사가 image.img인 경우, `-p image.img`를 사용해야 합니다(`-p image` 아님).  
필수: `--prefix` 또는 `--manifest`를 지정해야 합니다.

`--clear`  
지정된 번들을 삭제한 후 비어 있으면 Amazon S3 버킷을 삭제합니다.  
Required: No

`--retry`  
모든 Amazon S3 오류에서 작업당 최대 5회 자동으로 재시도합니다.  
Required: No

`-y, --yes`  
모든 질문 메시지에 대한 답은 자동적으로 예라고 가정합니다.  
필수 여부: 아니요

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

Amazon EC2에서 삭제 프로세스의 단계 및 상황을 나타내는 상태 메시지를 표시합니다.

### 예시
<a name="delete-bundle-response"></a>

이 예시에서는 Amazon S3에서 번들을 삭제합니다.

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

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

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

지정된 Amazon S3 지원 Linux AMI를 Amazon S3 스토리지에서 다운로드합니다.

### 구문
<a name="download-bundle-request"></a>

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

### 옵션
<a name="download-bundle-parameters"></a>

`-b, --bucket` *bucket*  
번들이 있는 Amazon S3 버킷 이름으로, '/'-delimited 경로 접두사가 붙기도 합니다(옵션).  
Required: Yes

`-a, --access-key` *access\$1key\$1id*  
AWS 액세스 키 ID입니다.  
Required: Yes

`-s, --secret-key` *secret\$1access\$1key*  
AWS 보안 액세스 키입니다.  
Required: Yes

`-k, --privatekey` *path*  
매니페스트를 해독하는 데 사용되는 프라이빗 키입니다.  
Required: Yes

`--url` *url*  
Amazon S3 서비스 URL입니다.  
기본값: `https://s3.amazonaws.com/`  
Required: No

`--region` *region*  
요청 서명에서 사용하는 리전입니다.  
기본값: `us-east-1`  
필수: 서명 버전 4를 사용하는 경우 필수입니다.

`--sigv` *version*  
요청 서명 시 사용하는 서명 버전입니다.  
유효한 값: `2` \$1 `4`  
기본값: `4`  
Required: No

`-m, --manifest` *file*  
매니페스트 파일 이름입니다(경로 제외). 매니페스트(`-m`) 또는 접두사(`-p`) 중 하나를 지정하는 것이 좋습니다.  
Required: No

`-p, --prefix ` *prefix*  
번들링된 AMI 파일의 파일 이름 접두사입니다.  
기본값: `image`  
Required: No

`-d, --directory ` *directory*  
다운로드된 번들이 저장되는 디렉터리입니다. 존재하는 디렉터리여야 합니다.  
기본값: 현재 작업 디렉터리입니다.  
Required: No

 `--retry`   
모든 Amazon S3 오류에서 작업당 최대 5회 자동으로 재시도합니다.  
필수 여부: 아니요

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

다운로드 프로세스의 다양한 단계를 나타내는 상태 메시지가 표시됩니다.

### 예시
<a name="download-bundle-response"></a>

이 예시는 `bundled` 디렉터리(Linux **mkdir** 명령 사용)를 생성하고 `amzn-s3-demo-bucket` Amazon S3 버킷에서 번들을 다운로드합니다.

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

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

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

Amazon S3 지원 Linux AMI(예: 해당 인증서, 커널, RAM 디스크)가 다른 리전을 지원하도록 수정합니다.

### 구문
<a name="migrate-manifest-request"></a>

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

### 옵션
<a name="migrate-manifest-parameters"></a>

`-c, --cert` *path*  
사용자의 PEM 인코딩된 RSA 퍼블릭 키 인증서 파일입니다.  
Required: Yes

`-k, --privatekey` *path*  
사용자의 PEM 인코딩된 RSA 키 파일의 경로입니다.  
Required: Yes

`--manifest` *path*  
매니페스트 파일 경로입니다.  
Required: Yes

`-a, --access-key` *access\$1key\$1id*  
AWS 액세스 키 ID입니다.  
필수: 자동 매핑 사용 시 필수입니다.

`-s, --secret-key ` *secret\$1access\$1key*  
AWS 보안 액세스 키입니다.  
필수: 자동 매핑 사용 시 필수입니다.

`--region` *region*  
매핑 파일에서 조회하는 리전입니다.  
필수: 자동 매핑 사용 시 필수입니다.

`--no-mapping`  
커널 및 RAM 디스크의 자동 매핑을 비활성화합니다.  
 마이그레이션 동안 Amazon EC2는 매니페스트 파일에 있는 커널 및 RAM 디스크를 대상 리전용으로 설계된 커널 및 RAM 디스크로 교체합니다. `--no-mapping` 파라미터를 지정하지 않으면, `ec2-migrate-bundle`에서 `DescribeRegions` 및 `DescribeImages` 작업을 사용하여 자동화된 매핑을 수행합니다.  
필수: 자동 매핑에 사용되는 `-a`, `-s` 및 `--region` 옵션을 제공하지 않는 경우 필수입니다.

`--ec2cert` *path*  
이미지 매니페스트를 암호화하는 데 사용되는 Amazon EC2 X.509 퍼블릭 키 인증서의 경로입니다.  
`us-gov-west-1` 및 `cn-north-1` 리전은 기본값이 아닌 퍼블릭 키 인증서를 사용하며, 해당 인증서의 경로는 이 옵션으로 지정해야 합니다. 인증서 경로는 AMI 도구의 설치 방법에 따라 다릅니다. Amazon Linux의 경우, 인증서가 `/opt/aws/amitools/ec2/etc/ec2/amitools/`에 있습니다. [Amazon EC2 AMI 도구 설정](set-up-ami-tools.md)의 ZIP 파일에서 AMI 도구를 설치한 경우, `$EC2_AMITOOL_HOME/etc/ec2/amitools/`에 인증서가 있습니다.  
필수: `us-gov-west-1` 및 `cn-north-1` 리전에만 해당됩니다.

`--kernel` *kernel\$1id*  
선택할 커널의 ID입니다.  
커널 및 RAM 디스크 대신 PV-GRUB를 사용하는 것이 좋습니다. 자세한 내용을 알아보려면 *Amazon EC2 사용 설명서*의 [사용자 제공 커널](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)을 참조하세요.
필수 여부: 아니요

`--ramdisk` *ramdisk\$1id*  
선택할 RAM 디스크의 ID입니다.  
커널 및 RAM 디스크 대신 PV-GRUB를 사용하는 것이 좋습니다. 자세한 내용을 알아보려면 *Amazon EC2 사용 설명서*의 [사용자 제공 커널](https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html)을 참조하세요.
필수 여부: 아니요

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

번들링 프로세스의 단계 및 상태를 설명하는 상태 메시지입니다.

### 예시
<a name="migrate-manifest-response"></a>

이 예시는 `my-ami.manifest.xml` 매니페스트에 지정된 AMI;를 복사합니다.

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

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

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

### 설명
<a name="unbundle-description"></a>

Amazon S3 지원 Linux AMI에서 번들을 다시 생성합니다.

### 구문
<a name="unbundle-request"></a>

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

### 옵션
<a name="unbundle-parameters"></a>

`-k, --privatekey` *path*  
PEM 인코딩된 RSA 키 파일의 경로입니다.  
Required: Yes

`-m, --manifest` *path*  
매니페스트 파일 경로입니다.  
Required: Yes

`-s, --source` *source\$1directory*  
번들이 포함된 디렉터리입니다.  
기본값: 현재 디렉터리입니다.  
Required: No

`-d, --destination` *destination\$1directory*  
AMI 번들을 해제해 넣을 디렉터리입니다. 대상 디렉터리가 있어야 합니다.  
기본값: 현재 디렉터리입니다.  
필수 여부: 아니요

### 예시
<a name="unbundle-response"></a>

이 Linux 및 UNIX 예시는 `image.manifest.xml` 파일에 지정된 AMI 번들을 해제합니다.

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

### 출력
<a name="unbundle-output"></a>

번들 해제 프로세스의 다양한 단계를 나타내는 상태 메시지가 표시됩니다.

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

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

Amazon S3 지원 Linux AMI 번들을 Amazon S3로 업로드하고 업로드된 객체에서 적절한 액세스 제어 목록(ACL)을 설정합니다. 자세한 내용은 [Amazon S3 지원 AMI 생성](creating-an-ami-instance-store.md) 섹션을 참조하세요.

**참고**  
Amazon S3 지원 Linux AMI의 S3 버킷에 객체를 업로드하려면 버킷에 대해 ACL을 사용하도록 설정해야 합니다. 그렇지 않으면 Amazon EC2는 업로드할 객체에 ACL을 설정할 수 없습니다. 대상 버킷에서 S3 객체 소유권에 대해 버킷 소유자 강제 설정을 사용하는 경우 ACL이 비활성화되어 있으므로 이 설정은 작동하지 않습니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)를 참조하십시오.

### 구문
<a name="upload-bundle-request"></a>

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

### 옵션
<a name="upload-bundle-parameters"></a>

`-b, --bucket` *bucket*  
번들 이름을 저장할 Amazon S3 버킷 이름으로, 선택 항목인 '/'-delimited 경로 접두사가 붙기도 합니다. 버킷이 없을 경우에는 생성됩니다(해당 버킷 이름을 사용할 수 있는 경우). 또한 버킷이 존재하지 않고 AMI 도구 버전이 1.5.18 이상인 경우 이 명령은 버킷에 대한 ACL을 설정합니다.  
필수 여부: 예

`-a, --access-key` *access\$1key\$1id*  
사용자의 AWS 액세스 키 ID입니다.  
Required: Yes

`-s, --secret-key` *secret\$1access\$1key*  
AWS 보안 액세스 키입니다.  
Required: Yes

`-t, --delegation-token` *token*  
AWS 요청에 함께 전달되는 위임 토큰입니다. 자세한 내용은 *IAM 사용 설명서*의 [임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)을 참조하세요.  
필수 항목 여부: 임시 보안 자격 증명을 사용하는 경우에만.  
기본값: `AWS_DELEGATION_TOKEN` 환경 변수 값(설정된 경우).

`-m, --manifest` *path*  
매니페스트 파일 경로입니다. 매니페스트 파일은 번들링 프로세스 중 생성되며 번들이 포함된 디렉터리에 있습니다.  
Required: Yes

`--url` *url*  
사용되지 않음. 버킷이 `--region` 위치(`EU` 제외)로 제한되어 있지 않은 경우 대신 `eu-west-1` 옵션을 사용합니다. `--location` 플래그는 이러한 특정 위치 제한을 적용하는 유일한 방법입니다.  
Amazon S3 엔드포인트 서비스 URL입니다.  
기본값: `https://s3.amazonaws.com/`  
Required: No

`--region` *region*  
대상 S3 버킷의 요청 서명에 사용할 리전입니다.  
+ 버킷이 없고 리전을 지정하지 않는 경우 이 도구는 (`us-east-1`에서) 위치 제한 없이 버킷을 만듭니다.
+ 버킷이 없고 리전을 지정하는 경우 이 도구는 지정된 리전에 버킷을 만듭니다.
+ 버킷이 있고 리전을 지정하지 않는 경우 이 도구는 버킷의 위치를 사용합니다.
+ 버킷이 있고 `us-east-1`을 리전으로 지정하는 경우 이 도구는 오류 메시지 없이 버킷의 실제 위치를 사용하며 일치하는 기존 파일을 덮어씁니다.
+ 버킷이 있고 버킷의 실제 위치와 일치하지 않는 리전(`us-east-1` 이외)을 지정하는 경우 도구가 종료되고 오류가 발생합니다.
버킷이 `EU` 위치(`eu-west-1` 제외)로 제한된 경우 대신 `--location` 플래그를 사용합니다. `--location` 플래그는 이러한 특정 위치 제한을 적용하는 유일한 방법입니다.  
기본값: `us-east-1`  
필수: 서명 버전 4를 사용하는 경우 필수입니다.

`--sigv` *version*  
요청 서명 시 사용하는 서명 버전입니다.  
유효한 값: `2` \$1 `4`  
기본값: `4`  
Required: No

`--acl` *acl*  
번들링된 이미지의 액세스 제어 목록 정책입니다.  
유효한 값: `public-read` \$1 `aws-exec-read`  
기본값: `aws-exec-read`  
Required: No

`-d, --directory` *directory*  
번들링된 AMI 파트가 포함된 디렉터리입니다.  
기본값: 매니페스트 파일이 포함된 디렉터리(`-m` 옵션 참조)입니다.  
Required: No

`--part` *part*  
지정된 파트와 모든 후속 파트의 업로드를 시작합니다. 예를 들어 `--part 04`입니다.  
Required: No

`--retry`  
모든 Amazon S3 오류에서 작업당 최대 5회 자동으로 재시도합니다.  
Required: No

`--skipmanifest`  
매니페스트를 업로드하지 않습니다.  
Required: No

`--location` *location*  
사용되지 않음. 버킷이 `--region` 위치(`EU` 제외)로 제한되어 있지 않은 경우 대신 `eu-west-1` 옵션을 사용합니다. `--location` 플래그는 이러한 특정 위치 제한을 적용하는 유일한 방법입니다.  
대상 Amazon S3 버킷의 위치 제한입니다. 버킷이 있고 버킷의 실제 위치와 일치하지 않는 위치를 지정하는 경우 도구가 종료되고 오류가 발생합니다. 버킷이 있고 위치를 지정하지 않는 경우 이 도구는 버킷의 위치를 사용합니다. 버킷이 없고 위치를 지정하는 경우 이 도구는 지정된 리전에 버킷을 만듭니다. 버킷이 없고 위치를 지정하지 않는 경우 이 도구는 (`us-east-1`에서) 위치 제한 없이 버킷을 만듭니다.  
기본값: `--region`이 지정된 경우 위치는 여기에 지정된 리전으로 설정됩니다. `--region`이 지정되지 않은 경우 위치는 기본적으로 `us-east-1`로 설정됩니다.  
필수 여부: 아니요

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

Amazon EC2에서 업로드 프로세스의 단계 및 상황을 나타내는 상태 메시지를 표시합니다.

### 예시
<a name="upload-bundle-response"></a>

이 예시에서는 `image.manifest.xml` 매니페스트에서 지정한 번들을 업로드합니다.

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

## AMI 도구의 일반 옵션
<a name="common-args-ami"></a>

AMI 도구의 대부분은 다음과 같은 선택적 파라미터를 허용합니다.

`--help, -h`  
도움말 메시지를 표시합니다.

`--version`  
버전 및 저작권 통지를 표시합니다.

`--manual`  
수동 입력 항목을 표시합니다.

`--batch`  
배치 모드에서 실행되며 대화형 메시지를 표시하지 않습니다.

`--debug`  
문제를 해결할 때 유용한 정보를 표시합니다.

# Amazon S3 지원 AMI를 EBS 지원 AMI로 변환
<a name="Using_ConvertingS3toEBS"></a>

사용자 소유의 Amazon S3 지원 Linux AMI를 Amazon EBS 지원 Linux AMI로 변환할 수 있습니다.

**중요**  
소유하지 않은 AMI는 변환할 수 없습니다.

**Amazon S3 지원 AMI를 Amazon EBS 지원 AMI로 변환하려면**

1. Amazon EBS 기반 AMI에서 Amazon Linux 인스턴스를 시작합니다. 자세한 내용은 [콘솔에서 인스턴스 시작 마법사를 사용하여 EC2 인스턴스 시작](ec2-launch-instance-wizard.md) 섹션을 참조하세요. Amazon Linux 인스턴스에는 AWS CLI 및 AMI 도구가 미리 설치되어 있습니다.

1. Amazon S3 지원 AMI를 번들링하는 데 사용한 X.509 프라이빗 키를 인스턴스로 업로드합니다. 이 키는 사용자와 Amazon EC2만 사용자의 AMI에 액세스할 수 있음을 보장하는 데 사용됩니다.

   1. 다음과 같이 인스턴스에서 X.509 프라이빗 키에 대한 임시 디렉터리를 생성합니다.

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

   1. [scp](linux-file-transfer-scp.md) 등의 보안 복사 도구를 사용하여 컴퓨터의 X.509 프라이빗 키를 인스턴스의 `/tmp/cert` 디렉터리로 복사합니다. 다음 명령의 *my-private-key* 파라미터는 SSH를 사용하여 인스턴스에 연결하는 데 사용되는 프라이빗 키입니다. 예제:

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

1. AWS CLI를 사용하도록 환경 변수를 구성합니다. 자세한 내용은 [환경 변수](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)를 참조하세요.

   1. (권장) AWS 액세스 키, 보안 키 및 세션 토큰에 대한 환경 변수를 설정합니다.

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

   1. AWS 액세스 키와 보안 키에 대한 환경 변수를 설정합니다.

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

1. 새 AMI용 Amazon Elastic Block Store(Amazon EBS) 볼륨을 준비합니다.

   1. [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html) 명령을 사용하여 인스턴스와 동일한 가용 영역에 빈 EBS 볼륨을 생성합니다. 명령 출력의 볼륨 ID를 메모해 둡니다.
**중요**  
 이 EBS 볼륨은 크기가 원본 인스턴스 스토어 루트 볼륨보다 크거나 같아야 합니다.

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

   1. [attach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html) 명령을 사용하여 이 볼륨을 Amazon EBS 기반 인스턴스에 연결합니다.

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

1. 번들용 폴더를 생성합니다.

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

1. `/tmp/bundle` using the [ec2-download-bundle](ami-tools-commands.md#ami-download-bundle) 명령을 사용하여 인스턴스 스토어 기반 AMI용 번들을 /tmp/bundle로 다운로드합니다.

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

1. [ec2-unbundle](ami-tools-commands.md#ami-unbundle) 명령을 사용하여 번들에서 이미지 파일을 다시 구성합니다.

   1. 디렉터리를 번들 폴더로 변경합니다.

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

   1. [ec2-unbundle](ami-tools-commands.md#ami-unbundle) 명령을 실행합니다.

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

1. 번들링되지 않은 이미지의 파일을 새 EBS 볼륨으로 복사합니다.

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

1. 번들링되지 않은 새 파티션용 볼륨을 검색합니다.

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

1. 블록 디바이스를 나열하여 마운트할 디바이스 이름을 찾습니다.

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

   이 예에서는 마운트할 파티션이 `/dev/sdb1`이지만, 디바이스 이름이 이와 다를 수 있습니다. 볼륨이 파티셔닝되지 않은 경우 마운트할 디바이스는 `/dev/sdb`(디바이스 파티션 끝 숫자가 없음)와 비슷할 것입니다.

1. 새 EBS 볼륨에 대한 탑재 지점을 생성하고 볼륨을 탑재합니다.

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

1. 주로 사용하는 텍스트 편집기(예: `/etc/fstab` 또는 **vim**)를 사용하여 EBS 볼륨의 **nano** 파일을 열고 인스턴스 스토어(휘발성) 볼륨에 대한 항목을 모두 제거합니다. EBS 볼륨은 `/mnt/ebs`에 탑재되므로 `fstab` 파일은 `/mnt/ebs/etc/fstab`에 있습니다.

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

   이 예에서는 마지막 줄을 제거해야 합니다.

1. 볼륨 마운트를 해제하고 인스턴스에서 볼륨을 분리합니다.

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

1. 다음과 같이 새 EBS 볼륨에서 AMI를 생성합니다.

   1. 새 EBS 볼륨의 스냅샷을 생성합니다.

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

   1. 스냅샷이 완전한지 확인합니다.

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

   1. describe-images`aki` 명령을 사용하여 원래의 AMI에 사용된 프로세스 아키텍처, 가상화 유형 및 커널 이미지(**describe-images**)를 식별합니다. 이 단계의 경우 원본 Amazon S3 지원 AMI의 AMI ID가 필요합니다.

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

      이 예에서는 아키텍처가 `x86_64`이고 커널 이미지 ID가 `aki-fc8f11cc`입니다. 다음 단계에서는 이들 값을 사용합니다. 위 명령의 출력에 `ari` ID도 나열되면 이 ID도 메모해 둡니다.

   1. 새 EBS 볼륨의 스냅샷 ID와 이전 단계의 값을 사용하여 새 AMI를 등록합니다. 이전 명령 출력에 `ari` ID가 나열된 경우, `--ramdisk-id ari_id`를 사용하여 이 ID를 다음 명령에 포함합니다.

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

1. (선택 사항) 새 AMI에서 인스턴스를 시작할 수 있음을 테스트한 후에는 이 절차용으로 생성한 EBS 볼륨을 삭제할 수 있습니다.

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

# Windows Sysprep을 사용하여 Amazon EC2 AMI 생성
<a name="ami-create-win-sysprep"></a>

Microsoft System Preparation(Windows Sysprep) 도구는 새 이미지를 캡처하기 전에 인스턴스별 시스템 구성이 제거된 상태로 일반 버전의 운영 체제를 생성합니다.

소프트웨어 및 설정으로 사전 설치 및 사전 구성된 안전한 맞추형 최신 “골드” 서버 이미지의 생성, 관리 및 배포를 자동화하려면 [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)를 사용하는 것이 좋습니다.

Windows Sysprep을 사용하면 Windows 시작 에이전트(EC2Launch v2, EC2Launch 및 EC2Config)를 통해 표준화된 AMI를 생성할 수도 있습니다.

**중요**  
Windows Sysprep을 사용하여 인스턴스 백업을 생성하지 마세요. Windows Sysprep은 시스템에 고유한 정보를 삭제하는데, 이는 인스턴스 백업에 의도하지 않은 결과를 낳을 수 있습니다.

Windows Sysprep의 문제를 해결하려면 [Amazon EC2 Windows 인스턴스 Sysprep 문제 해결](sysprep-troubleshoot.md)의 내용을 참조하세요.

**Topics**
+ [Windows Sysprep 단계](#sysprep-phases)
+ [시작하기 전 준비 사항](#sysprep-begin)
+ [EC2Launch v2와 함께 Windows Sysprep 사용](sysprep-using-ec2launchv2.md)
+ [EC2Launch와 함께 Windows Sysprep 사용](ec2launch-sysprep.md)
+ [EC2Config와 함께 Windows Sysprep 사용](sysprep-using.md)

## Windows Sysprep 단계
<a name="sysprep-phases"></a>

Windows Sysprep은 다음 단계를 거칩니다.
+ **일반화**: Sysprep 도구는 이미지 고유 정보 및 설정을 삭제합니다. 예를 들어 Windows Sysprep은 보안 식별자(SID), 컴퓨터 이름, 이벤트 로그, 특정 드라이버를 제거합니다. 이 단계가 완료되면 운영 체제(OS)는 AMI를 생성할 준비가 됩니다.
**참고**  
`PersistAllDeviceInstalls` 설정이 true로 기본 설정되어 있기 때문에 Windows Sysprep을 Windows 시작 에이전트와 함께 실행할 때 시스템은 드라이버가 제거되는 것을 방지합니다.
+ **특수화**: 플러그-앤-플레이가 컴퓨터를 스캔하여 검색된 장치에 대해 드라이버를 설치합니다. Sysprep 도구는 컴퓨터 이름과 SID와 같은 OS 요건을 생성합니다. 필요한 경우 이 단계에서 명령을 실행할 수 있습니다.
+ **Out-of-Box Experience(OOBE)**: 시스템은 Windows 설치 축약 버전을 실행하여 사용자에게 시스템 언어, 표준 시간대, 등록된 조직과 같은 정보를 입력하도록 요청합니다. Windows 시작 에이전트와 함께 Windows Sysprep을 실행할 때 응답 파일은 이 단계를 자동으로 실행합니다.

## 시작하기 전 준비 사항
<a name="sysprep-begin"></a>
+ Windows Sysprep을 수행하기 전에 Windows Sysprep을 실행할 단일 관리자 계정을 제외하고 로컬 사용자 계정 및 계정 프로파일을 모두 제거하는 것이 좋습니다. 추가 계정 및 프로파일로 Windows Sysprep를 수행하면 프로파일 데이터 손실 또는 Windows Sysprep 완료 실패 등 예기치 못한 동작이 발생할 수 있습니다.
+ [Sysprep 개요](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview)에 대해 자세히 알아보세요.
+ [서버 역할에 대한 Sysprep 지원](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep-support-for-server-roles)에 대해 알아보세요.

# EC2Launch v2와 함께 Windows Sysprep을 사용하여 AMI 생성
<a name="sysprep-using-ec2launchv2"></a>

EC2Launch v2 에이전트가 설치된 인스턴스에서 이미지를 생성하면 이미지가 준비될 때 EC2Launch v2가 특정 작업을 수행합니다. 여기에는 Windows Sysprep 작업이 포함됩니다. 자세한 내용은 [Windows Sysprep 단계](ami-create-win-sysprep.md#sysprep-phases) 섹션을 참조하세요.

**Topics**
+ [Windows Sysprep 작업](#sysprep-actions-ec2launchv2)
+ [Sysprep 이후](#sysprep-post-ec2launchv2)
+ [EC2Launch v2와 함께 Windows Sysprep 실행](#sysprep-gui-procedure-ec2launchv2)

## Windows Sysprep 작업
<a name="sysprep-actions-ec2launchv2"></a>

Windows Sysprep과 EC2Launch v2는 이미지를 준비할 때 다음 작업을 수행합니다.

1. **EC2Launch 설정(EC2Launch settings)** 대화 상자에서 **Sysprep을 이용해 종료(Shutdown with Sysprep)**를 선택하면 시스템은 `ec2launch sysprep` 명령을 실행합니다.

1. EC2Launch v2는 `unattend.xml`에서 레지스트리 값을 읽어 `HKEY_USERS\.DEFAULT\Control Panel\International\LocaleName` 파일의 내용을 편집합니다. 이 파일은 `C:\ProgramData\Amazon\EC2Launch\sysprep` 디렉터리에 있습니다.

1. 시스템이 `BeforeSysprep.cmd`를 실행합니다. 이 명령은 다음과 같은 레지스트리 키를 생성합니다.

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

   레지스트리 키는 RDP 연결이 다시 활성화될 때까지 RDP 연결을 비활성화합니다. RDP 연결을 비활성화하는 것은 필수적인 보안 조치입니다. 왜냐하면 Windows Sysprep이 실행된 이후 첫 번째 부팅 세션 동안 RDP가 연결을 허용하고 관리자 암호가 비어 있는 짧은 시간이 있기 때문입니다.

1. EC2Launch v2 서비스는 다음 명령을 실행하여 Windows Sysprep을 호출합니다.

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

### 일반화 단계
<a name="sysprep-generalize-ec2launchv2"></a>
+ EC2Launch v2는 컴퓨터 이름과 SID 같은 이미지 고유 정보 및 설정을 삭제합니다. 인스턴스가 도메인의 멤버인 경우에는 도메인에서 삭제됩니다. `unattend.xml` 응답 파일은 이 단계에 영향을 미치는 다음의 설정을 포함합니다.
  + **PersistAllDeviceInstalls**: 이 설정은 Windows 설치로 하여금 장치를 제거하고 재구성하지 못하도록 함으로써 이미지 준비 과정을 가속화하는데, 이는 Amazon AMI는 특정 드라이버가 실행되는 것을 요구하고 그 드라이버들을 재검색하는 데 시간이 걸리기 때문입니다.
  + **DoNotCleanUpNonPresentDevices**: 이 설정은 현재 존재하지 않는 장비들에 대한 플러그-앤-플레이 정보를 담고 있습니다.
+ Windows Sysprep은 AMI를 생성하기 위한 준비를 하는 과정에서 OS를 종료합니다. 시스템은 새 인스턴스를 시작하거나 원본 인스턴스를 시작합니다.

### 특수화 단계
<a name="sysprep-specialize-ec2launchv2"></a>

시스템은 컴퓨터 이름과 SID와 같은 OS 특정 요건을 생성합니다. 시스템은 또한 `unattend.xml` 응답 파일에 지정된 구성에 기반을 두어 다음 작업을 수행합니다.
+ **CopyProfile**: Windows Sysprep을 구성해 내장된 관리자 프로파일을 비롯한 모든 사용자 프로파일을 삭제할 수 있습니다. 이 설정은 내장된 관리자 계정을 보유하고 있어서 계정에 대한 어떤 사용자 지정도 새 이미지로 전달됩니다. 기본 값은 `True`입니다.

  **CopyProfile**은 기본 프로파일을 기존의 로컬 관리자 프로파일로 바꿉니다. Windows Sysprep를 실행한 후 로그인한 모든 계정은 첫 로그인 시 해당 프로파일 및 콘텐츠의 사본을 받게 됩니다.

  새 이미지로 전달하고자 하는 사용자 프로파일에 대한 특정한 사용자 지정이 없다면 이 설정을 `False`로 변경하세요. Windows Sysprep은 모든 사용자 프로파일을 삭제하며, 이를 통해 시간과 디스크 공간을 절약합니다.
+ **TimeZone**: 표준 시간대는 UTC(협정 세계시)로 기본 설정되어 있습니다.
+ **Synchronous command with order 1**: 시스템은 다음 명령을 실행하여 관리자 계정을 활성화하고 암호 요건을 지정합니다.

  ```
  net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES
  ```
+ **Synchronous command with order 2**: 시스템은 관리자 암호를 암호화합니다. 이 보안 조치는 `setAdminAccount` 작업을 구성하지 않으면 Windows Sysprep이 완료된 후 인스턴스에 액세스할 수 없도록 설계되어 있습니다.

  시스템은 로컬 시작 에이전트 디렉터리(`C:\Program Files\Amazon\EC2Launch\`)에서 다음 명령을 실행합니다.

  ```
  EC2Launch.exe internal randomize-password --username Administrator
  ```
+ 원격 데스크톱 연결을 활성화하기 위해 시스템은 터미널 서버 `fDenyTSConnections` 레지스트리 키를 false로 설정합니다.

### OOBE 단계
<a name="sysprep-oobe-ec2launchv2"></a>

1. EC2Launch v2 응답 파일을 사용하여 다음과 같은 구성을 지정합니다.
   + `<InputLocale>en-US</InputLocale>`
   + `<SystemLocale>en-US</SystemLocale>`
   + `<UILanguage>en-US</UILanguage>`
   + `<UserLocale>en-US</UserLocale>`
   + `<HideEULAPage>true</HideEULAPage>`
   + `<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>`
   + `<ProtectYourPC>3</ProtectYourPC>`
   + `<BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>`
   + `<TimeZone>UTC</TimeZone>`
   + `<RegisteredOrganization>Amazon.com</RegisteredOrganization>`
   + `<RegisteredOwner>EC2</RegisteredOwner>`
**참고**  
일반화 및 특수화 단계에서 EC2Launch v2는 OS의 상태를 모니터링합니다. EC2Launch v2는 OS가 Sysprep 단계에 있다는 것을 탐지하면 시스템 로그에 다음 메시지를 출력합니다.  
Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. 시스템이 EC2Launch v2를 실행합니다.

## Sysprep 이후
<a name="sysprep-post-ec2launchv2"></a>

Windows Sysprep이 완료된 후 EC2Launch v2는 콘솔에 다음 메시지를 출력합니다.

```
Windows sysprep configuration complete.
```

그 다음에 EC2Launch v2는 다음 작업을 수행합니다.

1. `agent-config.yml` 파일의 내용을 읽고 구성된 작업을 실행합니다.

1. `preReady` 스테이지의 모든 작업을 실행합니다.

1. 실행이 완료된 후에는 `Windows is ready`라는 메시지를 인스턴스 시스템 로그에 전송합니다.

1. `PostReady` 스테이지의 모든 작업을 실행합니다.

EC2Launch v2에 대한 자세한 내용은 [EC2Launch v2 에이전트를 사용하여 EC2 Windows 인스턴스 시작 중 태스크 수행](ec2launch-v2.md) 섹션을 참조하세요.

## EC2Launch v2와 함께 Windows Sysprep 실행
<a name="sysprep-gui-procedure-ec2launchv2"></a>

Windows Sysprep과 EC2Launch v2를 이용해 표준화된 AMI를 생성하려면 다음 절차를 수행하세요.

1. Amazon EC2 콘솔에서 복제하려는 AMI를 찾습니다.

1. 실행을 시작해서 Windows 인스턴스에 연결합니다.

1. 사용자 지정 설정

   1. Windows **시작** 메뉴에서 **Amazon EC2Launch 설정(Amazon EC2Launch settings)**을 검색하고 선택합니다. Amazon **EC2Launch 설정(EC2Launch settings)** 대화 상자의 옵션 및 설정에 대한 자세한 내용은 [Windows 인스턴스에 대한 EC2Launch v2 설정 구성](ec2launch-v2-settings.md) 단원을 참조하세요.

   1. 변경 사항이 있는 경우 종료하기 전에 **저장**을 선택합니다.

1. **Sysprep을 이용해 종료** 또는 **Sysprep을 이용하지 않고 종료**를 선택합니다.

Windows Sysprep 실행 및 인스턴스 종료 여부 확인 요청을 받을 때 **예**를 클릭합니다. EC2Launch v2는 Windows Sysprep을 실행합니다. 그런 다음 인스턴스에서 로그오프되고 인스턴스가 종료됩니다. Amazon EC2 콘솔에서 [**인스턴스(Instances)**] 페이지를 보면 인스턴스 상태가 [`Running`]에서 [`Stopping`]으로 바뀐 다음 다시 [`Stopped`]로 바뀌는 것을 확인할 수 있습니다. 이 지점에서는 안전하게 현재 인스턴스에서 AMI를 생성할 수 있습니다.

다음 명령을 사용해서 명령줄에서 Windows Sysprep 도구를 수동으로 호출할 수 있습니다.

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

# EC2Launch와 함께 Windows Sysprep을 사용하여 AMI 생성
<a name="ec2launch-sysprep"></a>

EC2Launch 에이전트가 설치된 인스턴스에서 이미지를 생성하면 이미지가 준비될 때 EC2Launch가 특정 작업을 수행합니다. 여기에는 Windows Sysprep 작업이 포함됩니다. 자세한 내용은 [Windows Sysprep 단계](ami-create-win-sysprep.md#sysprep-phases) 섹션을 참조하세요.

EC2Launch는 AMI에서 이미지 준비 프로세스를 자동화하고 보호하는 기본 응답 파일과 배치 파일을 Windows Sysrep에 제공합니다. 이 파일을 수정하는 것은 선택 사항입니다. 이 파일은 기본적으로 `C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep` 디렉터리에 있습니다.

**중요**  
Windows Sysprep을 사용하여 인스턴스 백업을 생성하지 마세요. Windows Sysprep은 시스템에 특정한 정보를 제거합니다. 이 정보를 제거하면 인스턴스 백업에서 의도하지 않은 결과가 발생할 수 있습니다.

**Topics**
+ [Windows Sysprep에 대한 EC2Launch 응답 및 배치 파일](#ec2launch-sysprep-answer-batch)
+ [EC2Launch와 함께 Windows Sysprep 실행](#ec2launch-sysprep-running)
+ [사용자 지정 AMI 시작 시 Server 2016 이후에 대한 메타데이터/KMS 경로 업데이트](#update-metadata-KMS)

## Windows Sysprep에 대한 EC2Launch 응답 및 배치 파일
<a name="ec2launch-sysprep-answer-batch"></a>

Windows Sysprep에 대한 EC2Launch 응답 파일과 배치 파일에는 다음 내용이 포함됩니다.

`Unattend.xml`  
이 파일은 기본 응답 파일입니다. `SysprepInstance.ps1`을 실행하거나 사용자 인터페이스에서 **ShutdownWithSysprep**을 선택하는 경우 시스템이 이 파일에서 설정을 읽습니다.

`BeforeSysprep.cmd`  
EC2Launch가 Windows Sysprep을 실행하기 전에 이 배치 파일이 명령을 실행하도록 사용자 지정합니다.

`SysprepSpecialize.cmd`  
Windows Sysprep 특수화 단계 중에 명령을 실행하려면 이 배치 파일을 사용자 지정합니다.

## EC2Launch와 함께 Windows Sysprep 실행
<a name="ec2launch-sysprep-running"></a>

데스크톱 환경에서 Windows Server 2016 이후를 전체 설치할 때 **EC2 Launch Settings** 애플리케이션을 사용하여 EC2Launch와 함께 Windows Sysprep을 수동으로 실행할 수 있습니다.

**EC2Launch Settings 애플리케이션을 사용하여 Windows Sysprep 실행**

1. Amazon EC2 콘솔에서 Windows Server 2016 이후 AMI를 찾거나 생성합니다.

1. AMI에서 Windows 인스턴스를 시작합니다.

1. Windows 인스턴스에 연결하고 인스턴스를 사용자 지정합니다.

1. **EC2LaunchSettings** 애플리케이션을 검색하여 실행합니다. 기본적으로 `C:\ProgramData\Amazon\EC2-Windows\Launch\Settings` 디렉터리에 위치합니다.  
![\[EC2 Launch Settings 애플리케이션\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ec2launch-sysprep.png)

1. 필요에 따라 옵션을 선택하거나 취소합니다. 이러한 설정은 `LaunchConfig.json` 파일에 저장되어 있습니다.

1. **Administrator 암호**에서 다음 중 하나를 수행합니다.
   + **임의(Random)**를 선택합니다. EC2Launch는 암호를 생성하고 사용자의 키를 사용하여 암호를 암호화합니다. 인스턴스가 재부팅 또는 중지되었다가 시작된 경우 이 암호가 그대로 유지되도록 시스템은 인스턴스가 시작된 후 이 설정을 비활성화합니다.
   + **지정(Specify)**을 선택하고 시스템 요구 사항을 충족하는 암호를 입력합니다. 암호는 `LaunchConfig.json`에 일반 텍스트로 저장되며 Windows Sysprep에서 관리자 암호를 설정한 후에 삭제됩니다. 지금 종료하면 암호는 지금 바로 설정됩니다. EC2Launch는 사용자의 키를 사용하여 암호를 암호화합니다.
   + **DoNothing**을 선택하고 `unattend.xml` 파일에 암호를 지정합니다. `unattend.xml`에 암호를 지정하지 않으면 관리자 계정이 비활성화됩니다.

1. **Sysprep을 이용해 종료(Shutdown with Sysprep)**를 선택합니다.

**EC2Launch를 사용하여 Windows Sysprep을 수동으로 실행**

1. Amazon EC2 콘솔에서 복제하려는 Windows Server 2016 이후 Datacenter 에디션 AMI를 찾거나 만듭니다.

1. 실행을 시작해서 Windows 인스턴스에 연결합니다.

1. 인스턴스를 사용자 지정합니다.

1. `LaunchConfig.json` 파일에서 설정을 지정합니다. 이 파일은 기본적으로 `C:\ProgramData\Amazon\EC2-Windows\Launch\Config` 디렉터리에 위치합니다.

   `adminPasswordType`에 대해 다음 값 중 하나를 지정할 수 있습니다.  
`Random`  
EC2Launch는 암호를 생성하고 사용자의 키를 사용하여 암호를 암호화합니다. 인스턴스가 재부팅 또는 중지되었다가 시작된 경우 이 암호가 그대로 유지되도록 시스템은 인스턴스가 시작된 후 이 설정을 비활성화합니다.  
`Specify`  
`adminPassword`에 지정한 암호가 EC2Launch에 사용됩니다. 암호가 시스템 요구 사항에 맞지 않으면 EC2Launch에서 임의의 암호를 대신 생성합니다. 암호는 `LaunchConfig.json`에 일반 텍스트로 저장되며 Windows Sysprep에서 관리자 암호를 설정한 후에 삭제됩니다. EC2Launch는 사용자의 키를 사용하여 암호를 암호화합니다.  
`DoNothing`  
`unattend.xml` 파일에 지정한 암호가 EC2Launch에 사용됩니다. `unattend.xml`에 암호를 지정하지 않으면 관리자 계정이 비활성화됩니다.

1. (선택 사항) `unattend.xml` 및 기타 구성 파일에서 설정을 지정합니다. 설치에 참가하려는 경우 이 파일을 변경할 필요가 없습니다. 파일은 기본적으로 `C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep` 디렉터리에 위치합니다.

1. Windows PowerShell에서 `./InitializeInstance.ps1 -Schedule`을 실행합니다. 스크립트는 기본적으로 `C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts` 디렉터리에 위치합니다. 이 스크립트는 다음 부팅 중에 초기화하도록 인스턴스를 예약합니다. 다음 단계에서 `SysprepInstance.ps1` 스크립트를 실행하기 전에 이 스크립트를 실행해야 합니다.

1. Windows PowerShell에서 `./SysprepInstance.ps1`을 실행합니다. 스크립트는 기본적으로 `C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts` 디렉터리에 위치합니다.

인스턴스에서 로그오프되고 인스턴스가 종료됩니다. Amazon EC2 콘솔에서 [**인스턴스(Instances)**] 페이지를 보면 인스턴스 상태가 [`Running`]에서 [`Stopping`]으로 바뀐 다음 [`Stopped`]로 바뀌는 것을 확인할 수 있습니다. 이 시점에서는 이 인스턴스에서 안전하게 AMI를 생성할 수 있습니다.

## 사용자 지정 AMI 시작 시 Server 2016 이후에 대한 메타데이터/KMS 경로 업데이트
<a name="update-metadata-KMS"></a>

사용자 지정 AMI를 시작할 때 Server 2016 이후에 대한 메타데이터/KMS 경로를 업데이트하려면 다음과 같이 하세요.
+ EC2LaunchSettings GUI(C:\$1ProgramData\$1Amazon\$1EC2-Windows\$1Launch\$1Settings\$1Ec2LaunchSettings.exe)를 실행하고 Windows Sysprep을 사용하여 종료하는 옵션을 선택합니다.
+ EC2LaunchSettings를 실행하고 Windows Sysprep 없이 종료한 다음 AMI를 생성합니다. 그러면 다음번 부팅할 때 EC2 시작 초기화 작업을 실행하도록 설정되며, 해당 인스턴스의 서브넷을 토대로 경로가 설정됩니다.
+ [PowerShell](ec2launch-config.md#ec2launch-inittasks)에서 AMI를 생성하기 전에 EC2 시작 초기화 작업을 수동으로 다시 예약합니다.
**중요**  
작업을 다시 예약하기 전에 기본 암호 재설정 동작을 적어 두세요.
+ Windows 정품 인증 또는 인스턴스 메타데이터 오류와의 통신이 발생하는 실행 중인 인스턴스에서 경로를 업데이트하려면 [“Windows를 정품 인증할 수 없음”](common-messages.md#activate-windows)을 참조하세요.

# EC2Config와 함께 Windows Sysprep을 사용하여 AMI 생성
<a name="sysprep-using"></a>

EC2Config 서비스가 설치된 인스턴스에서 이미지를 생성하면 이미지가 준비될 때 EC2Config가 특정 작업을 수행합니다. 여기에는 Windows Sysprep 작업이 포함됩니다. 자세한 내용은 [Windows Sysprep 단계](ami-create-win-sysprep.md#sysprep-phases) 섹션을 참조하세요.

**Topics**
+ [Windows Sysprep 작업](#sysprep-actions)
+ [Sysprep 이후](#sysprep-post)
+ [EC2Config 서비스와 함께 Windows Sysprep 실행하기](#sysprep-gui-procedure)

## Windows Sysprep 작업
<a name="sysprep-actions"></a>

Windows Sysprep과 EC2Config 서비스는 이미지를 준비할 때 다음 작업을 수행합니다.

1. **EC2 서비스 속성** 대화 상자에서 **Sysprep을 이용해 종료**를 선택하면, 시스템은 **ec2config.exe -sysprep** 명령을 실행합니다.

1. EC2Config 서비스는 `BundleConfig.xml` 파일의 내용을 읽습니다. 기본적으로 이 파일은 `C:\Program Files\Amazon\Ec2ConfigService\Settings` 디렉터리에 위치합니다.

    `BundleConfig.xml` 파일에는 다음 설정이 포함되어 있습니다. 이 설정은 변경할 수 있습니다.
   + **AutoSysprep**: Windows Sysprep을 자동적으로 사용할지 여부를 지정합니다. Windows Sysprep을 EC2 Service Properties 대화 상자로부터 실행하는 경우에는 이 값을 변경할 필요가 없습니다. 기본 값은 `No`입니다.
   + **SetRDPCertificate**: 원격 데스크톱 서버에 대한 자체 서명 인증서를 설정합니다. 이렇게 함으로써 원격 데스크톱 프로토콜(RDP)을 안정적으로 이용해 인스턴스에 연결할 수 있습니다. 새 인스턴스가 인증서를 사용해야 하는 경우 이 값을 `Yes`로 변경합니다. Windows Server 2012 인스턴스는 자신의 고유한 인증서를 생성할 수 있으므로 이 설정은 이 인스턴스에서는 사용되지 않습니다. 기본 값은 `No`입니다.
   + **SetPasswordAfterSysprep**: 새로 실행된 인스턴스에 무작위 암호를 설정하고 이를 사용자 실행 키로 암호화하고 암호화된 암호를 콘솔에 출력합니다. 새 인스턴스에 무작위의 암호화된 암호를 설정해서는 안 되는 경우에는 설정 값을 `No`로 변경합니다. 기본 값은 `Yes`입니다.
   +  **PreSysprepRunCmd**: 실행할 명령의 위치 명령은 기본적으로 `C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd` 디렉터리에 위치합니다.

1. 시스템이 `BeforeSysprep.cmd`를 실행합니다. 이 명령은 다음과 같은 레지스트리 키를 생성합니다.

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

   레지스트리 키는 RDP 연결이 다시 활성화될 때까지 RDP 연결을 비활성화합니다. RDP 연결을 비활성화하는 것은 필수적인 보안 조치입니다. 왜냐하면 Windows Sysprep이 실행된 이후 첫 번째 부팅 세션 동안 RDP가 연결을 허용하고 관리자 암호가 비어 있는 짧은 시간이 있기 때문입니다.

1. EC2Config 서비스는 다음 명령을 실행하여 Windows Sysprep을 호출합니다.

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

### 일반화 단계
<a name="sysprep-generalize"></a>
+ 이 도구는 컴퓨터 이름과 SID 같은 이미지 고유 정보 및 설정을 삭제합니다. 인스턴스가 도메인의 멤버인 경우에는 도메인에서 삭제됩니다. `sysprep2008.xml` 응답 파일은 이 단계에 영향을 미치는 다음의 설정을 포함합니다.
  + **PersistAllDeviceInstalls**: 이 설정은 Windows 설치로 하여금 장치를 제거하고 재구성하지 못하도록 함으로써 이미지 준비 과정을 가속화하는데, 이는 Amazon AMI는 특정 드라이버가 실행되는 것을 요구하고 그 드라이버들을 재검색하는 데 시간이 걸리기 때문입니다.
  + **DoNotCleanUpNonPresentDevices**: 이 설정은 현재 존재하지 않는 장비들에 대한 플러그-앤-플레이 정보를 담고 있습니다.
+ Windows Sysprep은 AMI를 생성하기 위한 준비를 하는 과정에서 OS를 종료합니다. 시스템은 새 인스턴스를 시작하거나 원본 인스턴스를 시작합니다.

### 특수화 단계
<a name="sysprep-specialize"></a>

시스템은 컴퓨터 이름과 SID와 같은 OS 특정 요건을 생성합니다. 시스템은 또한 sysprep2008.xml 응답 파일에 지정된 구성에 기반을 두어 다음 작업을 수행합니다.
+ **CopyProfile**: Windows Sysprep을 구성해 내장된 관리자 프로파일을 비롯한 모든 사용자 프로파일을 삭제할 수 있습니다. 이 설정은 내장된 관리자 계정을 보유하고 있어서 계정에 대한 어떤 사용자 지정도 새 이미지로 전달됩니다. 기본값은 True입니다.

  **CopyProfile**은 기본 프로파일을 기존의 로컬 관리자 프로파일로 바꿉니다. Windows Sysprep를 실행한 후 로그인한 모든 계정은 첫 로그인 시 해당 프로파일 및 콘텐츠의 사본을 받게 됩니다.

  새 이미지로 전달하고자 하는 사용자 프로파일에 대한 특정한 사용자 지정이 없다면 이 설정을 False로 변경하세요. Windows Sysprep은 모든 사용자 프로파일을 삭제하며, 이를 통해 시간과 디스크 공간을 절약합니다.
+ **TimeZone**: 표준 시간대는 UTC(협정 세계시)로 기본 설정되어 있습니다.
+ **Synchronous command with order 1**: 시스템은 다음 명령을 실행하여 관리자 계정을 활성화하고 암호 요건을 지정합니다.

  **net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES**
+ **Synchronous command with order 2**: 시스템은 관리자 암호를 암호화합니다. 이 보안 조치는 ec2setpassword 설정을 활성화하지 않으면 Windows Sysprep이 완료된 후 인스턴스에 액세스할 수 없도록 설계되어 있습니다.

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1ScramblePassword.exe" -u Administrator
+ **Synchronous command with order 3**: 시스템은 다음 명령을 실행합니다.

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

   이 명령은 다음과 같은 레지스트리 키를 추가하여 RDP를 재활성화합니다.

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

### OOBE 단계
<a name="sysprep-oobe"></a>

1. 시스템은 EC2Config 응답 파일을 이용해 다음과 같은 구성을 지정합니다.
   + <InputLocale>en-US</InputLocale>
   + <SystemLocale>en-US</SystemLocale>
   + <UILanguage>en-US</UILanguage>
   + <UserLocale>en-US</UserLocale>
   + <HideEULAPage>true</HideEULAPage>
   + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
   + <NetworkLocation>Other</NetworkLocation>
   + <ProtectYourPC>3</ProtectYourPC>
   + <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
   + <TimeZone>UTC</TimeZone>
   + <RegisteredOrganization>Amazon.com</RegisteredOrganization>
   + <RegisteredOwner>Amazon</RegisteredOwner>
**참고**  
일반화 및 특수화 단계에서 EC2Config 서비스는 OS의 상태를 모니터링합니다. EC2Config는 OS가 Sysprep 단계에 있다는 것을 탐지하면 시스템 로그에 다음 메시지를 출력합니다.  
EC2ConfigMonitorState: Windows 0개가 구성 중입니다. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. OOBE 단계가 완료되면 `SetupComplete.cmd`에 있는 `C:\Windows\Setup\Scripts\SetupComplete.cmd`가 실행됩니다. 2015년 4월 이전의 Amazon 퍼블릭 AMI에서는 이 파일이 비어 있었고 이미지 상에서 아무 것도 실행하지 않았습니다. 2015년 4월 이후 발표된 퍼블릭 AMI의 경우 파일에 **call "C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1PostSysprep.cmd"** 값이 포함됩니다.

1. `PostSysprep.cmd`가 실행되고 다음 작업이 수행됩니다.
   + 로컬 관리자 암호가 만료되지 않도록 설정합니다. 로컬 관리자 암호가 만료되면, 관리자가 로그인할 수 없을 수도 있습니다.
   + MSSQLServer 머신 이름(설치된 경우)를 설정하여 그 이름이 AMI와 동기화되도록 합니다.

## Sysprep 이후
<a name="sysprep-post"></a>

Windows Sysprep이 완료된 후 EC2Config 서비스는 콘솔에 다음 메시지를 출력합니다.

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

그 다음에 EC2Config는 다음 작업을 수행합니다.

1. config.xml 파일의 내용을 읽고 활성화된 모든 플러그인을 나열합니다.

1. 모든 “Before Windows is ready” 플러그인을 동시에 실행합니다.
   + Ec2SetPassword
   + Ec2SetComputerName
   + Ec2InitializeDrives
   + Ec2EventLog
   + Ec2ConfigureRDP
   + Ec2OutputRDPCert
   + Ec2SetDriveLetter
   + Ec2WindowsActivate
   + Ec2DynamicBootVolumeSize

1. 실행이 완료된 후에는 “Windows is ready”라는 메시지를 인스턴스 시스템 로그에 전송합니다.

1. 모든 “After Windows is ready” 플러그인을 동시에 실행합니다.
   + Amazon CloudWatch Logs 
   + UserData
   + AWS Systems Manager(Systems Manager) 

Windows 플러그인에 대한 자세한 내용은 [EC2Config 서비스를 사용하여 EC2 레거시 Windows 운영 체제 인스턴스를 시작하는 동안 태스크를 수행합니다.](ec2config-service.md) 단원을 참조하세요.

## EC2Config 서비스와 함께 Windows Sysprep 실행하기
<a name="sysprep-gui-procedure"></a>

Windows Sysprep과 EC2Config 서비스를 이용해 표준화된 AMI를 생성하려면 다음 절차를 수행하세요.

1. Amazon EC2 콘솔에서 복사하고자 하는 AMI의 위치를 지정하거나 [생성](creating-an-ami-ebs.md)합니다.

1. 실행을 시작해서 Windows 인스턴스에 연결합니다.

1. 그 AMI를 사용자 지정합니다.

1. EC2Config 서비스 응답 파일에서 구성 설정을 다음과 같이 지정합니다.

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

1. Windows **시작** 메뉴에서 **모든 프로그램**을 선택한 후 **EC2ConfigService 설정**을 클릭합니다.

1. **Ec2 서비스 속성** 대화 상자에서 **이미지** 탭을 선택합니다. Ec2 서비스 속성 대화 상자의 옵션 및 설정에 대한 자세한 내용은 [Ec2 서비스 속성](ec2config-service.md)을 참조하세요.

1. 관리자 암호에 대한 옵션을 선택하고 **Shutdown with Sysprep(Sysprep을 이용해 종료)** 또는 **Shutdown without Sysprep(Sysprep을 사용하지 않고 종료)**을 선택합니다. EC2Config는 선택한 암호 옵션에 기반하는 설정 파일을 편집합니다.
   + **Random(무작위)**: EC2Config는 암호를 생성하고 이를 사용자의 키로 암호화한 다음, 암호화된 암호를 콘솔에 표시합니다. 첫 실행 후 이 설정을 비활성화하여 인스턴스가 재부팅되거나 중단되고 시작된 경우에도 해당 암호가 계속 유지되도록 합니다.
   + **지정**: 암호를 암호화되지 않은 형태(클리어 텍스트)로 Windows Sysprep 응답 파일에 저장합니다. Windows Sysprep은 다음에 실행될 때 관리자 암호를 설정합니다. 지금 종료하면 암호는 지금 바로 설정됩니다. 서비스가 다시 시작할 때 관리자 암호는 제거됩니다. 이 암호는 나중에 다시 확인할 수 없기 때문에 이를 꼭 기억해두세요.
   + **기존 유지**: Windows Sysprep이 실행 중일 때 또는 EC2Config가 재시작할 때, 관리자 계정에 대한 기존 암호를 변경하지 않습니다. 이 암호는 나중에 다시 확인할 수 없기 때문에 이를 꼭 기억해두세요.

1. **확인**을 선택합니다.

Windows Sysprep 실행 및 인스턴스 종료 여부 확인 요청을 받을 때 **예**를 클릭합니다. EC2Config가 Windows Sysprep을 실행하는 것을 확인할 수 있습니다. 그 다음 인스턴스에서 로그아웃되고 인스턴스는 종료됩니다. Amazon EC2 콘솔의 [**인스턴스(Instances)**] 페이지를 보면 인스턴스 상태가 [`Running`]에서 [`Stopping`]로 바뀐 다음 마지막으로 [`Stopped`]로 바뀌는 것을 확인할 수 있습니다. 이 지점에서는 안전하게 현재 인스턴스에서 AMI를 생성할 수 있습니다.

다음 명령을 사용해서 명령줄에서 Windows Sysprep 도구를 수동으로 호출할 수 있습니다.

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

**참고**  
CMD 셸이 이미 C:\$1Program Files\$1Amazon\$1EC2ConfigService\$1 디렉터리에 있는 경우에는 명령에 큰 따옴표가 필요 없습니다.

그러나 `Ec2ConfigService\Settings` 폴더에 지정된 XML 파일 옵션이 올바른지 주의 깊게 확인할 필요가 있습니다. 이것이 올바르게 지정되지 않은 경우는 인스턴스에 연결하지 못할 수 있습니다. 설정 파일에 대한 자세한 내용은 [EC2Config 설정 파일](ec2config-service.md#UsingConfigXML_WinAMI) 단원을 참조하세요. 명령줄에서 Windows Sysprep을 구성한 후 실행하는 예제는 `Ec2ConfigService\Scripts\InstallUpdates.ps1`의 내용을 참조하세요.

# Amazon EC2 AMI 복사
<a name="CopyingAMIs"></a>

여러 리전에 일관된 Amazon EC2 인스턴스 구성이 필요한 경우 단일 Amazon Machine Image(AMI)를 템플릿으로 사용하여 모든 인스턴스를 시작할 수 있습니다. 그러나 AMI는 리전별 리소스입니다. 특정 AWS 리전에서 인스턴스를 시작하려면 AMI가 해당 리전에 있어야 합니다. 따라서 여러 리전에서 동일한 AMI를 사용하려면 소스 리전에서 각 대상 리전으로 복사해야 합니다.

AMI 복사에 사용하는 방법은 *동일한 [파티션](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#partition) 내* 리전 전체 또는 *상이한 파티션 전체*에 복사하는지에 따라 달라집니다.
+ **리전 간 복사** - *동일한 파티션 내* 리전 전체에 AMI를 복사합니다(예: 상용 파티션 내 리전 전체). 이 복사 방법은 이 주제에 설명되어 있습니다.
+ **파티션 간 복사** - *하나의 파티션에서 다른 파티션으로* AMI를 복사합니다(예: 상용 파티션에서 AWS GovCloud (US) 파티션으로). 이 복사 방법에 대한 내용은 [AMI 저장 및 복원허용된 AMI](ami-store-restore.md) 섹션을 참조하세요.
+ **계정 간 복사** - 다른 AWS 계정에서 [본인의 AWS 계정과 공유한](sharingamis-explicit.md) AMI의 사본을 생성합니다. 이 복사 방법은 이 주제에 설명되어 있습니다.

리전 간 및 계정 간 AMI 복사의 복사 작업은 가능한 한 신속하게 처리됩니다. 완료 시간을 제어해야 하는 경우 AMI가 필요한 기간 내에 복사되도록 15분\$148시간 범위로 완료 기간을 지정할 수 있습니다. 시간 기반 AMI 복사 작업에 대해서는 추가 요금이 부과됩니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Time-based copies](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)를 참조하세요.

**Topics**
+ [고려 사항](#copy-ami-considerations)
+ [비용](#copy-ami-costs)
+ [Amazon EC2 AMI를 복사할 수 있는 권한 부여](copy-ami-permissions.md)
+ [AMI 복사](#ami-copy-steps)
+ [대기 중인 AMI 복사 작업 중지](#ami-copy-stop)
+ [Amazon EC2 AMI 복사 작동 방식](how-ami-copy-works.md)

## 고려 사항
<a name="copy-ami-considerations"></a>
+ **AMI를 복사할 권한** - IAM 정책을 사용하여 사용자에게 AMI 복사 권한을 부여하거나 거부할 수 있습니다. 2024년 10월 28일부터 소스 AMI에 대한 `CopyImage` 작업을 위한 리소스 수준 권한을 지정할 수 있습니다. 새 AMI에 대한 리소스 수준 권한은 이전처럼 사용할 수 있습니다.
+ **시작 권한 및 Amazon S3 버킷 권한** - AWS에서는 소스 AMI의 시작 권한 또는 Amazon S3 버킷 권한을 새 AMI로 복사하지 않습니다. 복사 작업이 완료된 후 시작 권한 및 Amazon S3 버킷 권한을 새 AMI에 적용할 수 있습니다.
+ **태그** - 소스 AMI에 연결한 사용자 정의 AMI 태그만 복사할 수 있습니다. 다른 AWS 계정이 첨부한 시스템 태그(접두사 `aws:` 포함) 및 사용자 정의 태그는 복사되지 않습니다. AMI를 복사할 때 새 AMI 및 해당 지원 스냅샷에 새 태그를 연결할 수 있습니다.
+ **시간 기반 AMI 복사 할당량** - *누적 스냅샷 복사 처리량 할당량*에 도달하면 후속 시간 기반 AMI 복사 요청이 실패합니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Quotas for time-based copies](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html#time-based-copies-quota)를 참조하세요.
+ **지원되는 소스 대상 복사본** - 소스 AMI의 위치에 따라 복사 가능 여부와 새 AMI에 허용되는 대상이 결정됩니다.
  + 소스 AMI가 리전에 있는 경우 해당 리전 내, 다른 리전 또는 해당 리전과 연결된 Outpost 또는 해당 리전의 로컬 영역으로 복사할 수 있습니다.
  + 소스 AMI가 로컬 영역에 있는 경우 해당 로컬 영역 내, 해당 로컬 영역의 상위 리전 또는 상위 리전이 동일한 다른 로컬 영역에 복사할 수 있습니다.
  + 소스 AMI가 Outpost에 있는 경우 복사할 수 없습니다.
+ **소스 및 대상에 대한 CLI 파라미터** - CLI를 사용하는 경우 복사할 AMI의 소스 위치와 새 AMI의 대상을 지정하는 데 다음 파라미터가 지원됩니다. 복사 작업은 대상 리전에서 시작해야 합니다. `--region` 파라미터를 생략하면 대상은 AWS CLI 설정에 구성된 기본 리전을 따릅니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/CopyingAMIs.html)

## 비용
<a name="copy-ami-costs"></a>

완료 시간이 지정되지 않은 경우 AMI 복사 요금이 부과되지 않습니다. 그러나 시간 기반 AMI 복사 작업에는 추가 요금이 적용됩니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Time-based copies](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html#time-based-copies-pricing)를 참조하세요.

표준 스토리지 및 데이터 전송 요금이 적용됩니다. EBS 지원 AMI를 복사하면 추가 EBS 스냅샷의 스토리지에 대한 요금이 발생합니다.

# Amazon EC2 AMI를 복사할 수 있는 권한 부여
<a name="copy-ami-permissions"></a>

EBS 지원 AMI 또는 Amazon S3 지원 AMI를 복사하려면 다음 IAM 권한이 필요합니다.
+ `ec2:CopyImage` - AMI를 복사합니다. EBS 지원 AMI의 경우 AMI의 지원 스냅샷을 복사할 권한도 부여합니다.
+ `ec2:CreateTags` - 대상 AMI에 태그를 지정합니다. EBS 지원 AMI의 경우 대상 AMI의 지원 스냅샷에 태그를 지정할 권한도 부여합니다.

인스턴스 저장소 지원 AMI를 복사하는 경우 다음과 같은 *추가* IAM 권한이 필요합니다.
+ `s3:CreateBucket` - 새 AMI의 대상 리전에 S3 버킷 생성
+ `s3:PutBucketOwnershipControls` - `aws-exec-read`[미리 준비된 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl)로 객체를 쓸 수 있도록 새로 생성된 S3 버킷에 대해 ACL 활성화
+ `s3:GetBucketAcl` - 소스 버킷의 ACL 읽기
+ `s3:ListAllMyBuckets` - 대상 리전에서 AMI용 기존 S3 버킷 찾기
+ `s3:GetObject` - 소스 버킷에서 객체 읽기
+ `s3:PutObject` - 대상 버킷에 객체 쓰기
+ `s3:PutObjectAcl` - 대상 버킷에서 새 객체에 대한 권한 쓰기

**참고**  
2024년 10월 28일부터 소스 AMI에 대한 `CopyImage` 작업을 위한 리소스 수준 권한을 지정할 수 있습니다. 대상 AMI에 대한 리소스 수준 권한은 이전처럼 사용할 수 있습니다. 자세한 내용은 *서비스 승인 참조*의 [Amazon EC2에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions) 아래 테이블의 **CopyImage**를 참조하세요.

## EBS 지원 AMI를 복사하고 대상 AMI 및 스냅샷에 태그를 지정하기 위한 IAM 정책 예제
<a name="permissions-to-copy-ebs-backed-ami"></a>

다음 정책 예제에서는 EBS 지원 AMI를 복사하고 대상 AMI 및 지원 스냅샷에 태그를 지정할 수 있는 권한을 부여합니다.

**참고**  
2024년 10월 28일부터 `Resource` 요소에 스냅샷을 지정할 수 있습니다. 자세한 내용은 *서비스 승인 참조*의 [Amazon EC2에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions) 아래 테이블의 **CopyImage**를 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "PermissionToCopyAllImages",
        "Effect": "Allow",
        "Action": [
            "ec2:CopyImage",
            "ec2:CreateTags"
        ],
        "Resource": [
            "arn:aws:ec2:*::image/*",
            "arn:aws:ec2:*::snapshot/*"
        ]
    }]
}
```

------

## EBS 지원 AMI를 복사하지만 새 스냅샷에 태그 지정을 거부하는 IAM 정책 예제
<a name="permissions-to-copy-ebs-backed-ami-but-deny-tagging-new-snapshots"></a>

`ec2:CopySnapshot` 권한은 `ec2:CopyImage` 권한을 받을 때 자동으로 부여됩니다. 새 백업 스냅샷에 태그를 지정할 수 있는 권한을 명시적으로 거부하여 `ec2:CreateTags` 작업의 `Allow` 효과를 재정의할 수 있습니다.

다음 정책 예제에서는 EBS 지원 AMI를 복사할 수 있는 권한은 부여하지만 대상 AMI의 새 지원 스냅샷에 태그 지정을 거부합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "ec2:CopyImage",
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:::snapshot/*"
        }
    ]
}
```

------

## Amazon S3 지원 AMI를 복사하고 대상 AMI에 태그를 지정하는 IAM 정책 예제
<a name="permissions-to-copy-instance-store-backed-ami"></a>

다음 정책 예제에서는 지정된 소스 버킷의 모든 Amazon S3 지원 AMI를 지정된 리전에 복사하고 대상 AMI에 태그를 지정할 수 있는 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "PermissionToCopyAllImages",
            "Effect": "Allow",
            "Action": [
                "ec2:CopyImage",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*::image/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:GetBucketAcl",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amis-for-111122223333-in-us-east-2-hash"
            ]
        }
    ]
}
```

------

AMI 소스 버킷의 Amazon 리소스 이름(ARN)을 찾으려면 Amazon EC2 콘솔([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/))을 열고 탐색 창에서 [**AMI(AMIs)**]를 선택한 다음 [**소스(Source)**] 열에서 버킷 이름을 찾습니다.

**참고**  
`s3:CreateBucket` 권한은 Amazon S3 지원 AMI를 개별 리전에 처음 복사할 때만 필요합니다. 이후 리전에 이미 생성된 Amazon S3 버킷은 향후 해당 리전에 복사하는 모든 AMI를 저장하는 데 사용됩니다.

## AMI 복사
<a name="ami-copy-steps"></a>

본인이 소유하는 AMI 또는 다른 계정에서 본인과 공유한 AMI를 복사할 수 있습니다. 지원되는 소스 및 대상 조합은 [고려 사항](#copy-ami-considerations) 섹션을 참조하세요.

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

**AMI 복사**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 콘솔 탐색 모음에서 AMI가 들어 있는 리전을 선택합니다.

1. 탐색 창에서 **AMI**를 선택하여 리전에서 사용할 수 있는 AMI 목록을 표시합니다.

1. 복사하려는 AMI가 없으면 다른 필터를 선택합니다. **내 소유** AMI, **프라이빗 이미지**, **퍼블릭 이미지**, **비활성화된 이미지**로 필터링할 수 있습니다.

1. 복사할 AMI를 선택하고 **작업**, **AMI 복사**를 선택합니다.

1. **Amazon Machine Image(AMI) 복사** 페이지에서 다음 정보를 지정합니다.

   1. **AMI 복사 이름**: 새 AMI의 이름. Amazon EC2는 AMI에 대한 세부 정보를 표시할 때 운영 체제 정보를 제공하지 않으므로 이름에 이 정보를 포함할 수 있습니다.

   1. **AMI 복사 설명**: 원본과 사본을 구분할 수 있도록 설명에는 기본적으로 원본 AMI에 대한 정보가 포함됩니다. 필요에 따라 이 설명을 수정할 수 있습니다.

   1. **대상 리전**: AMI를 복사할 리전. 자세한 내용은 [리전 간 복사](how-ami-copy-works.md#copy-amis-across-regions) 및 [교차 계정 복사](how-ami-copy-works.md#copy-ami-across-accounts)(을)를 참조하세요.

   1. **태그 복사**: AMI를 복사할 때 사용자 정의 AMI 태그를 포함하려면 이 확인란을 선택합니다. 다른 AWS 계정이 첨부한 시스템 태그(접두사 `aws:` 포함) 및 사용자 정의 태그는 복사되지 않습니다.

   1. **시간 기반 복사**: 다음과 같이 복사 작업을 특정 기간 내에 완료할지, 가능한 한 신속하게 완료할지 지정할 수 있습니다.
      + 특정 기간 내에 복사를 완료하는 방법:
        + **시간 기반 복사 활성화**를 선택합니다.
        + 복사 작업에 허용되는 시간(15분씩 증분)을 **완료 기간**에 입력합니다. 완료 기간은 AMI에 연결된 모든 스냅샷에 적용됩니다.

          자세한 내용은 *Amazon EBS 사용 설명서*의 [Time-based copies](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)를 참조하세요.
      + 가능한 한 신속하게 복사를 완료하는 방법:
        + **시간 기반 복사 활성화**를 선택되지 않은 상태로 놓아둡니다.

   1. (EBS 지원 AMI만 해당) **AMI 사본의 EBS 스냅샷 암호화**: 대상 스냅샷을 암호화하거나 다른 키를 사용하여 다시 암호화하려면 이 확인란을 선택합니다. 암호화가 기본적으로 활성화되면 **AMI 사본의 EBS 스냅샷 암호화** 확인란이 선택되고 선택을 취소할 수 없습니다. 자세한 내용은 [암호화 및 복사](how-ami-copy-works.md#ami-copy-encryption) 섹션을 참조하세요.

   1. (EBS 지원 AMI만 해당) **KMS 키**: 대상 스냅샷을 암호화하는 데 사용하는 KMS 키입니다.

   1. **태그**: 새 AMI 및 새 스냅샷에 동일한 태그를 지정하거나 다른 태그를 지정할 수 있습니다.
      + 새 AMI 및 새 스냅샷에 *동일한* 태그를 지정하려면 **이미지와 스냅샷을 함께 태그 지정**을 선택합니다. 새 AMI 및 생성된 모든 스냅샷에 동일한 태그가 적용됩니다.
      + 새 AMI 및 새 스냅샷에 *다른* 태그를 지정하려면 **이미지와 스냅샷을 별도로 태그 지정**을 선택합니다. 새 AMI 및 생성된 스냅샷에 서로 다른 태그가 적용됩니다. 그러나 생성된 모든 스냅샷의 태그는 동일하며 각 스냅샷에 다른 태그를 지정할 수 없습니다.

      태그를 추가하려면 [**태그 추가(Add tag)**]를 선택하고 해당 태그에 대한 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

   1. AMI를 복사할 준비가 되면 **AMI 복사**를 선택합니다.

      새 AMI의 초기 상태는 `Pending`입니다. 상태가 `Available`인 경우 AMI 복사 작업이 완료된 것입니다.

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

**한 리전에서 다른 리전으로 AMI를 복사하려면**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 명령을 사용합니다. 원본 리전과 대상 리전을 모두 지정해야 합니다. `--source-region` 파라미터를 사용하여 원본 리전을 지정합니다. `--region` 파라미터를 사용하여 대상 리전을 지정할 수 있습니다(또는 이 파라미터를 생략하여 AWS CLI 설정에 구성된 기본 리전을 수임).

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region us-west-2 \
    --name my-ami \
    --region us-east-1
```

AMI 복사 중에 대상 스냅샷을 암호화하는 경우, `--encrypted` 및 `--kms-key-id` 파라미터를 추가로 지정해야 합니다.

**리전에서 로컬 영역으로 AMI를 복사하려면**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 명령을 사용합니다. 소스와 대상을 모두 지정해야 합니다. `--source-region` 파라미터를 사용하여 원본 리전을 지정합니다. `--destination-availability-zone` 파라미터를 사용하여 대상 로컬 영역을 지정합니다(`--destination-availability-zone-id`를 대신 사용할 수 있음). AMI는 동일한 리전에 있는 로컬 영역으로만 복사할 수 있습니다.

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --destination-availability-zone cn-north-1-pkx-1a \
    --name my-ami \
    --region cn-north-1
```

**로컬 영역에서 리전으로 AMI를 복사하려면**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 명령을 사용합니다. 소스와 대상을 모두 지정해야 합니다. `--source-region` 파라미터를 사용하여 원본 리전을 지정합니다. `--region` 파라미터를 사용하여 대상 리전을 지정합니다(또는 이 파라미터를 생략하여 AWS CLI 설정에 구성된 기본 리전을 수임). 소스 로컬 영역은 지정된 소스 AMI ID의 위치에서 수임됩니다. AMI를 로컬 영역에서 상위 리전으로만 복사할 수 있습니다.

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --name my-ami \
    --region cn-north-1
```

**한 로컬 영역에서 다른 로컬 영역으로 AMI를 복사하려면**  
[copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html) 명령을 사용합니다. 소스와 대상을 모두 지정해야 합니다. `--source-region` 파라미터를 사용하여 로컬 영역의 소스 리전을 지정합니다. `--destination-availability-zone` 파라미터를 사용하여 대상 로컬 영역을 지정합니다(`--destination-availability-zone-id`를 대신 사용할 수 있음). 소스 로컬 영역은 지정된 소스 AMI ID의 위치에서 수임됩니다. `--region` 파라미터를 사용하여 대상 로컬 영역의 상위 리전을 지정합니다(또는 이 파라미터를 생략하여 AWS CLI 설정에 구성된 기본 리전을 수임).

```
aws ec2 copy-image \
    --source-image-id ami-0abcdef1234567890 \
    --source-region cn-north-1 \
    --destination-availability-zone cn-north-1-pkx-1a \
    --name my-ami \
    --region cn-north-1
```

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

**한 리전에서 다른 리전으로 AMI를 복사하려면**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet을 사용합니다. 원본 리전과 대상 리전을 모두 지정해야 합니다. `-SourceRegion` 파라미터를 사용하여 원본 리전을 지정합니다. `-Region` 파라미터 또는 [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) cmdlet을 사용하여 대상 리전을 지정할 수 있습니다.

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion us-west-2 `
    -Name my-ami `
    -Region us-east-1
```

AMI 복사 중에 대상 스냅샷을 암호화하는 경우, `-Encrypted` 및 `-KmsKeyId` 파라미터를 추가로 지정해야 합니다.

**리전에서 로컬 영역으로 AMI를 복사하려면**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet을 사용합니다. 소스와 대상을 모두 지정해야 합니다. `-SourceRegion` 파라미터를 사용하여 원본 리전을 지정합니다. `-DestinationAvailabilityZone` 파라미터를 사용하여 대상 로컬 영역을 지정합니다(`-DestinationAvailabilityZoneId`를 대신 사용할 수 있음). AMI는 동일한 리전에 있는 로컬 영역으로만 복사할 수 있습니다.

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -DestinationAvailabilityZone cn-north-1-pkx-1a `
    -Name my-ami `
    -Region cn-north-1
```

**로컬 영역에서 리전으로 AMI를 복사하려면**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet을 사용합니다. 소스와 대상을 모두 지정해야 합니다. `-SourceRegion` 파라미터를 사용하여 원본 리전을 지정합니다. `-Region` 파라미터 또는 [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) cmdlet을 사용하여 대상 리전을 지정합니다. 소스 로컬 영역은 지정된 소스 AMI ID의 위치에서 수임됩니다. AMI를 로컬 영역에서 상위 리전으로만 복사할 수 있습니다.

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -Name my-ami `
    -Region cn-north-1
```

**한 로컬 영역에서 다른 로컬 영역으로 AMI를 복사하려면**  
[Copy-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-EC2Image.html) cmdlet을 사용합니다. 소스와 대상을 모두 지정해야 합니다. `-SourceRegion` 파라미터를 사용하여 로컬 영역의 소스 리전을 지정합니다. `-DestinationAvailabilityZone` 파라미터를 사용하여 대상 로컬 영역을 지정합니다(`-DestinationAvailabilityZoneId`를 대신 사용할 수 있음). 소스 로컬 영역은 지정된 소스 AMI ID의 위치에서 수임됩니다. `-Region` 파라미터 또는 [Set-AWSDefaultRegion](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-installing-specifying-region.html) cmdlet을 사용하여 대상 로컬 영역의 상위 리전을 지정합니다.

```
Copy-EC2Image `
    -SourceImageId ami-0abcdef1234567890 `
    -SourceRegion cn-north-1 `
    -DestinationAvailabilityZone cn-north-1-pkx-1a `
    -Name my-ami `
    -Region cn-north-1
```

------

## 대기 중인 AMI 복사 작업 중지
<a name="ami-copy-stop"></a>

다음 절차에 따라 보류 중인 AMI 복사를 중지할 수 있습니다.

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

**AMI 복사 작업을 중지하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 모음의 리전 선택기에서 대상 리전을 선택합니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. 복사를 중지할 AMI를 선택하고 **작업**, **AMI 등록 해제**를 차례로 선택합니다.

1. 확인을 요청하면 **AMI 등록 취소(Deregister AMI)**를 선택합니다.

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

**AMI 복사 작업을 중지하려면**  
[deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) 명령을 사용합니다.

```
aws ec2 deregister-image --image-id ami-0abcdef1234567890
```

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

**AMI 복사 작업을 중지하려면**  
[Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) cmdlet을 사용합니다.

```
Unregister-EC2Image -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI 복사 작동 방식
<a name="how-ami-copy-works"></a>

소스 AMI를 복사하면 *대상* AMI라고 하는 동일하지만 별개의 새 AMI가 생성됩니다. 대상 AMI에는 고유한 AMI ID가 있습니다. 대상 AMI에 영향을 미치지 않고 원본 AMI를 변경하거나 다시 등록할 수 있습니다. 반대의 경우도 마찬가지입니다.

EBS 지원 AMI의 경우 각 지원 스냅샷이 동일하지만 별개의 대상 스냅샷으로 복사됩니다. AMI를 새 리전으로 복사하는 경우 스냅샷은 증분이 아닌 전체 복사본이 됩니다. 암호화되지 않은 백업 스냅샷을 암호화하거나 새 KMS 키로 암호화하는 경우 스냅샷은 전체(비증분) 복사본입니다. 이후에 AMI 복사 작업을 수행하면 백업 스냅샷의 증분 복사본이 생성됩니다.

**Topics**
+ [리전 간 복사](#copy-amis-across-regions)
+ [교차 계정 복사](#copy-ami-across-accounts)
+ [시간 기반 AMI 복사 작업](#ami-time-based)
+ [암호화 및 복사](#ami-copy-encryption)

## 리전 간 복사
<a name="copy-amis-across-regions"></a>

지리적으로 다른 리전 간에 AMI를 복사하면 다음과 같은 이점이 제공됩니다.
+ 일관적인 글로벌 배포: 한 리전에서 다른 리전으로 AMI를 복사하면 동일한 AMI를 기반으로 하는 일관적인 인스턴스를 여러 리전에서 시작할 수 있습니다.
+ 확장성: 사용자의 리전에 관계없이 요구 사항에 대응하는 글로벌 애플리케이션을 보다 손쉽게 설계하고 구축할 수 있습니다.
+ 성능: 애플리케이션을 분산하여 성능을 높이고 애플리케이션의 핵심 구성 요소를 사용자에게 보다 가까이 둘 수 있습니다. 또한 인스턴스 유형이나 여타 AWS 서비스와 같은 리전별 기능을 활용할 수 있습니다.
+ 고가용성: 여러 AWS 리전을 포괄하는 애플리케이션을 설계하고 배포하여 가용성을 높일 수 있습니다.

다음 다이어그램은 소스 AMI 및 다른 리전에 복사된 2개의 AMI 간 관계와 각각에서 시작된 EC2 인스턴스를 보여줍니다. AMI에서 인스턴스를 시작하는 경우 인스턴스는 AMI가 상주하는 동일한 리전에 상주합니다. 원본 AMI를 변경한 후 대상 리전의 AMI에 변경 내용을 반영하려면 원본 AMI를 대상 리전으로 다시 복사해야 합니다.

![\[서로 다른 리전에 복사된 AMI\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami_copy.png)


Amazon S3 지원 AMI를 리전에 처음 복사하면 해당 리전에 복사된 AMI에 대한 Amazon S3 버킷이 생성됩니다. 해당 리전에 복사하는 Amazon S3 지원 AMI는 모두 이 버킷에 저장됩니다. 버킷 이름 형식은 amis-for-*account*-in-*region*-*hash*를 따릅니다. 예를 들면 `amis-for-123456789012-in-us-east-2-yhjmxvp6`입니다.

**사전 조건**  
AMI를 복사하기 전에 원본 AMI의 내용이 다른 리전에서 실행이 가능하도록 업데이트되었는지 확인해야 합니다. 예를 들어 데이터베이스 연결 문자열 등의 애플리케이션 구성 데이터가 적절한 리소스를 가리키도록 업데이트해야 합니다. 그렇게 하지 않으면 대상 리전의 새 AMI에서 시작된 인스턴스가 여전히 소스 리전의 리소스를 사용하여 성능과 비용에 영향을 줄 수 있습니다.

**제한 사항**
+ 대상 리전은 300개의 동시 AMI 복사 작업으로 제한됩니다. 이는 시간 기반 AMI 복사 작업에도 적용됩니다.
+ 반가상화(PV) AMI를 지원하지 않는 리전으로 PV AMI를 복사할 수 없습니다. 자세한 내용은 [가상화 유형](ComponentsAMIs.md#virtualization_types) 섹션을 참조하세요.

## 교차 계정 복사
<a name="copy-ami-across-accounts"></a>

다른 AWS 계정의 AMI이 [자신의 AWS 계정과 공유](sharingamis-explicit.md)되는 경우 해당 공유 AMI를 복사할 수 있습니다. 이것을 교차 계정 액세스라고 합니다. 공유되는 AMI가 소스 AMI입니다. 소스 AMI를 복사할 때 새 AMI를 생성합니다. 새 AMI를 종종 대상 AMI라고 합니다.

**AMI 비용**
+ 공유 AMI의 경우 공유 AMI의 계정에 리전의 스토리지 비용이 청구됩니다.
+ 자신의 계정과 공유된 AMI를 복사하는 경우 계정에 생성된 대상 AMI의 소유자가 됩니다.
  + 소스 AMI의 소유자에게는 표준 Amazon EBS 또는 Amazon S3 전송 요금이 청구됩니다.
  + 대상 리전의 대상 AMI에 대한 스토리지 요금이 청구됩니다.

**리소스 권한**  
다른 계정에서 공유된 AMI를 복사하려면 AMI 자체가 아니라 AMI를 지원하는 스토리지에 대한 읽기 권한을 소스 AMI 소유자가 부여해야 합니다. 스토리지는 연결된 EBS 스냅샷(Amazon EBS 지원 AMI의 경우) 또는 연결된 S3 버킷(Amazon S3 지원 AMI) 중 하나입니다. 공유 AMI에 암호화된 스냅샷이 있는 경우, 소유자는 해당 키를 사용자와 공유해야 합니다. 리소스 권한 부여에 대한 자세한 내용은 EBS 스냅샷의 경우 *Amazon EBS 사용 설명서*의 [Amazon EBS 스냅샷을 다른 AWS 계정와 공유](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html), S3 버킷의 경우 *Amazon S3 사용 설명서*의 [Amazon S3의 Identity and Access Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html)를 참조하세요.

**참고**  
소스 AMI에 연결된 태그는 계정 간에 대상 AMI로 복사되지 않습니다.

## 시간 기반 AMI 복사 작업
<a name="ami-time-based"></a>

연결된 단일 스냅샷이 있는 EBS 지원 AMI에 대해 시간 기반 AMI 복사 작업을 시작하는 경우 **개별 시간 기반 스냅샷 복사 작업**과 동일한 방식으로 작동하며 동일한 처리량 제한이 적용됩니다.

연결된 여러 스냅샷이 있는 EBS 지원 AMI에 대해 시간 기반 AMI 복사 작업을 시작하는 경우 **동시 시간 기반 스냅샷 복사 작업**과 동일한 방식으로 작동하며 동일한 처리량 제한이 적용됩니다. 연결된 각 스냅샷은 별도의 스냅샷 복사 요청을 생성하며, 각 요청은 누적 스냅샷 복사 처리량 할당량에 포함됩니다. 사용자가 지정한 완료 기간은 연결된 각 스냅샷에 적용됩니다.

자세한 내용은 *Amazon EBS 사용 설명서*의 [Time-based copies](https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html)를 참조하세요.

## 암호화 및 복사
<a name="ami-copy-encryption"></a>

다음 표는 다양한 AMI 복사 시나리오에 대한 암호화 지원을 보여 줍니다. 암호화되지 않은 스냅샷을 복사하여 암호화된 스냅샷을 생성할 수 있지만, 암호화된 스냅샷을 복사하여 암호화되지 않은 스냅샷을 생성할 수는 없습니다.


| 시나리오 | 설명 | 지원 | 
| --- | --- | --- | 
| 1 | 암호화되지 않음-암호화되지 않음 | 예 | 
| 2 | 암호화됨-암호화됨 | 예 | 
| 3 | 암호화되지 않음-암호화됨 | 예 | 
| 4 | 암호화됨-암호화되지 않음 | 아니요 | 

**참고**  
`CopyImage` 작업 중 암호화는 Amazon EBS 지원 AMI에만 적용됩니다. Amazon S3 지원 AMI는 스냅샷을 사용하지 않기 때문에 복사를 사용하여 암호화 상태를 변경할 수 없습니다.

암호화 파라미터를 지정하지 않고 AMI를 복사하면 지원 스냅샷은 기본적으로 원래 암호화 상태로 복사됩니다. 따라서 소스 AMI가 암호화되지 않은 스냅샷으로 지원되는 경우 결과 대상 스냅샷도 암호화되지 않습니다. 마찬가지로 소스 AMI의 스냅샷이 암호화된 경우 결과 대상 스냅샷도 동일한 AWS KMS 키로 암호화됩니다. 여러 스냅샷이 지원하는 AMI의 경우, 각 대상 스냅샷에서 해당 소스 스냅샷의 암호화 상태가 유지됩니다.

AMI 복사 중에 대상 지원 스냅샷의 암호화 상태를 변경하려면 암호화 파라미터를 지정할 수 있습니다. 다음 예제는 대상 AMI의 암호화 상태를 변경하기 위해 `CopyImage` 작업으로 암호화 파라미터가 지정되는 기본이 아닌 사례를 보여줍니다.

**암호화되지 않은 원본 AMI을(를) 암호화된 대상 AMI(으)로 복사**

이 시나리오에서는 암호화되지 않은 루트 스냅샷으로 지원되는 AMI가 암호화된 루트 스냅샷이 있는 AMI로 복사됩니다. `CopyImage` 작업은 고객 관리형 키를 포함하여 2개의 암호화 파라미터를 사용하여 호출됩니다. 따라서 루트 스냅샷의 암호화 상태가 변경되므로 대상 AMI는 소스 스냅샷과 동일한 데이터를 포함하는 루트 스냅샷에 의해 지원되지만 지정된 키를 사용하여 암호화됩니다. 두 AMI 모두의 스냅샷에 대한 스토리지 비용과 각 AMI에서 시작되는 인스턴스에 대한 비용이 발생합니다.

**참고**  
기본적으로 암호화를 활성화하는 경우 AMI의 모든 스냅샷에서 `Encrypted` 파라미터를 `true`로 설정하는 것과 효과가 동일합니다.

![\[AMI 복사 후 즉시 스냅샷 암호화\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami-to-ami-convert.png)


`Encrypted` 파라미터를 설정하면 이 인스턴스에 대한 단일 스냅샷이 암호화됩니다. `KmsKeyId` 파라미터를 지정하지 않으면 스냅샷 복사본을 암호화하는 데 기본 고객 관리형 키가 사용됩니다.

암호화된 스냅샷을 포함하는 AMI 복사에 대한 자세한 내용은 [EBS-backed AMI에서 암호화 사용](AMIEncryption.md) 섹션을 참조하세요.

# S3를 사용하여 AMI 저장 및 복원
<a name="ami-store-restore"></a>

Amazon Machine Image(AMI)를 Amazon S3 버킷에 저장하고 AMI를 다른 S3 버킷으로 복사한 다음 S3 버킷에서 복원할 수 있습니다. S3 버킷을 사용하여 AMI를 저장하고 복원하면 한 AWS 파티션의 AMI를 다른 파티션으로, 예를 들어 기본 상용 파티션에서 AWS GovCloud (US) 파티션으로 복사할 수 있습니다. 또한 AMI를 S3 버킷에 저장하면 AMI의 아카이브 복사본을 만들 수도 있습니다.

S3를 사용하여 AMI를 저장하고 복원할 때 지원되는 API는 `CreateStoreImageTask`, `DescribeStoreImageTasks` 및 `CreateRestoreImageTask`입니다.

`CopyImage`는 AWS 파티션 내에서 AMI를 복사할 때 권장되는* *API입니다. 그러나 `CopyImage`를 사용하여 AMI를 *다른* 파티션으로 복사할 수는 없습니다.

AWS 파티션에 대한 자세한 내용은 *IAM 사용 설명서*의 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 페이지에서 *partition*을 참조하세요.

**주의**  
AWS 파티션 또는 AWS 리전 간에 데이터를 이동할 때는 해당하는 정부 규제 및 데이터 레지던시 요구 사항을 포함한 모든 관련 법률 및 비즈니스 요구 사항을 준수해야 합니다.

**Topics**
+ [사용 사례](#use-cases)
+ [제한 사항](#ami-store-restore-limitations)
+ [비용](#store-restore-costs)
+ [AMI 저장 및 복원 작동 방식](store-restore-how-it-works.md)
+ [이미지 저장 태스크 생성](work-with-ami-store-restore.md)

## 사용 사례
<a name="use-cases"></a>

**Topics**
+ [AWS 파티션 간 AMI 복사](#copy-to-partition)
+ [AMI의 아카이브 복사본 만들기](#archival-copies)

### AWS 파티션 간 AMI 복사
<a name="copy-to-partition"></a>

S3 버킷을 사용하여 AMI를 저장하고 복원하면 한 파티션에서 다른 AWS 파티션으로 또는 한 리전에서 다른 AWS 리전으로 AMI를 복사할 수 있습니다. 다음 예에서는 기본 상용 파티션의 AMI를 AWS GovCloud (US) 파티션으로, 특히 `us-east-2` 리전에서 `us-gov-east-1` 리전으로 복사합니다.

한 파티션에서 다른 파티션으로 AMI를 복사하려면 다음 단계를 수행합니다.
+ `CreateStoreImageTask`를 사용하여 현재 리전의 S3 버킷에 AMI를 저장합니다. 이 예에서 S3 버킷은 `us-east-2`에 있습니다.
+ `DescribeStoreImageTasks`를 사용하여 저장 태스크의 진행률을 모니터링합니다. 태스크가 완료되면 객체가 S3 버킷에 표시됩니다.
+ 선택한 절차를 사용하여 저장된 AMI 객체를 대상 파티션의 S3 버킷에 복사합니다. 이 예에서 S3 버킷은 `us-gov-east-1`에 있습니다.
**참고**  
각 파티션마다 다른 AWS 자격 증명이 필요하기 때문에 S3 객체를 한 파티션에서 다른 파티션으로 직접 복사할 수 없습니다. 파티션에서 S3 객체를 복사하는 프로세스는 이 설명서에서 다루지 않습니다. AWS에서는 다음 복사 프로세스를 예로 제공하지만 사용자는 보안 요구 사항을 충족하는 복사 프로세스를 사용해야 합니다.  
파티션에서 하나의 AMI를 복사하기 위한 복사 프로세스는 다음과 같이 간단할 수 있습니다. 즉, 원본 버킷에서 중간 호스트(예: EC2 인스턴스 또는 랩톱)로 [객체를 다운로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)한 후 중간 호스트에서 대상 버킷으로 [객체를 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)합니다. 프로세스의 각 단계에 대해 파티션에 대한 AWS 자격 증명을 사용합니다.
지속적인 사용을 위해서는 S3 [멀티파트 다운로드 및 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)를 사용하여 복사본을 관리하는 애플리케이션을 개발하는 것이 좋습니다.
+ `CreateRestoreImageTask`를 사용하여 대상 파티션의 S3 버킷에서 AMI를 복원합니다. 이 예에서 S3 버킷은 `us-gov-east-1`에 있습니다.
+ AMI를 설명하여 복원 태스크의 진행률을 모니터링하면 사용 가능한 상태가 될 때를 확인할 수 있습니다. 스냅샷을 설명하여 복원된 AMI를 구성하는 스냅샷의 진행 비율을 모니터링할 수도 있습니다.

### AMI의 아카이브 복사본 만들기
<a name="archival-copies"></a>

S3 버킷에 AMI를 저장하여 아카이브 복사본을 만들 수 있습니다. AMI는 S3의 단일 객체로 압축되며 모든 AMI 메타데이터(공유 정보 제외)는 저장된 AMI의 일부로 보존됩니다. AMI 데이터는 스토리지 프로세스의 일부로 압축됩니다. 쉽게 압축할 수 있는 데이터가 포함된 AMI의 경우 S3의 객체 크기가 작아집니다. 비용을 절감하려면 저렴한 S3 스토리지 계층을 사용할 수 있습니다. 자세한 내용은 [Amazon S3 스토리지 클래스](https://aws.amazon.com/s3/storage-classes/) 및 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.

## 제한 사항
<a name="ami-store-restore-limitations"></a>
+ AMI를 저장하려면 AWS 계정이(가) AMI와 해당 스냅샷을 소유하거나 AMI와 해당 스냅샷을 [계정과 직접 공유](sharingamis-explicit.md)해야 합니다. [공개 공유](sharingamis-intro.md) 전용인 AMI는 저장할 수 없습니다.
+ 이러한 API는 EBS-backed AMI를 저장할 때만 사용할 수 있습니다.
+ 반가상화(PV) AMI는 지원되지 않습니다.
+ 저장할 수 있는 AMI의 크기(압축 전)는 5,000GB로 제한됩니다.
+ 이미지 저장 요청의 할당량: 진행 중인 저장 작업(스냅샷 데이터) 1,200GB.
+ 이미지 복원 요청의 할당량: 진행 중인 복원 작업(스냅샷 데이터) 600GB.
+ 저장 태스크 중에는 스냅샷이 삭제되지 않아야 하며 저장을 수행하는 IAM 보안 주체가 스냅샷에 액세스할 수 있어야 합니다. 그렇지 않으면 저장 프로세스가 실패합니다.
+ 동일한 S3 버킷에 AMI의 여러 복사본을 생성할 수 없습니다.
+ S3 버킷에 저장된 AMI를 원래 AMI ID로 복원할 수 없습니다. [AMI 별칭 지정](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-ec2-aliases.html)을 사용하여 이 문제를 완화할 수 있습니다.
+ 현재, 저장 및 복원 API는 AWS Command Line Interface, AWS SDK 및 Amazon EC2 API를 사용하는 경우에만 지원됩니다. Amazon EC2 콘솔을 사용하여 AMI를 저장하고 복원할 수는 없습니다.

## 비용
<a name="store-restore-costs"></a>

S3를 사용하여 AMI를 저장 및 복원하는 경우 저장 및 복원 API에 사용되는 서비스와 데이터 전송 요금이 부과됩니다. 이 API는 S3 및 EBS Direct API(API 내부에서 스냅샷 데이터에 액세스하는 데 사용됨)를 사용합니다. 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/) 및 [Amazon EBS 요금](https://aws.amazon.com/ebs/pricing/)을 참조하세요.

# AMI 저장 및 복원 작동 방식
<a name="store-restore-how-it-works"></a>

S3를 사용하여 AMI를 저장하고 복원하려면 다음 API를 사용합니다.
+ `CreateStoreImageTask` – S3 버킷에 AMI 저장
+ `DescribeStoreImageTasks` – AMI 저장 태스크의 진행률 제공
+ `CreateRestoreImageTask` – S3 버킷에서 AMI 복원

**Topics**
+ [CreateStoreImageTask](#CreateStoreImageTask)
+ [DescribeStoreImageTasks](#DescribeStoreImageTasks)
+ [CreateRestoreImageTask](#CreateRestoreImageTask)
+ [파일 경로](#file-paths-in-s3)

## CreateStoreImageTask
<a name="CreateStoreImageTask"></a>

`CreateStoreImageTask` API는 AMI를 S3 버킷에 단일 객체로 저장합니다.

이 API는 AMI 및 해당 스냅샷의 모든 데이터를 읽은 다음 [S3 멀티파트 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)를 사용하여 데이터를 S3 객체에 저장하는 태스크를 생성합니다. 이 API는 리전에 특정되지 않은 AMI 메타데이터 대부분을 포함한 AMI의 모든 구성 요소와 AMI에 포함된 모든 EBS 스냅샷을 가져와서 S3의 단일 객체로 압축합니다. S3에 사용되는 공간의 양을 줄이기 위해 업로드 프로세스의 일부로 데이터가 압축되므로 S3의 객체는 AMI의 스냅샷 크기 합계보다 작을 수 있습니다.

이 API를 호출하는 계정에 AMI와 스냅샷의 태그가 표시되는 경우 해당 태그가 보존됩니다.

S3의 객체는 AMI와 동일한 ID를 가지지만 `.bin` 확장자가 사용됩니다. 또한 AMI 이름, AMI 설명, AMI 등록 날짜, AMI 소유자 계정 및 저장 작업의 타임스탬프와 같은 데이터는 S3 객체에 S3 메타데이터 태그로 저장됩니다.

태스크를 완료하는 데 걸리는 시간은 AMI의 크기에 따라 다릅니다. 또한 태스크가 대기열에 있기 때문에 진행 중인 다른 태스크의 수에 따라서도 달라집니다. `DescribeStoreImageTasks` API를 직접적으로 호출하여 태스크의 진행을 추적할 수 있습니다.

진행 중인 모든 AMI 크기의 합계는 계정당 1,200GB의 EBS 스냅샷 데이터로 제한됩니다. 진행 중인 태스크가 한도보다 작아질 때까지 추가 태스크 생성이 거부됩니다. 예를 들어 200GB의 스냅샷 데이터가 포함된 AMI와 400GB의 스냅샷 데이터가 포함된 또 다른 AMI가 현재 저장 중인 경우 진행 중인 합계가 한도보다 작은 600GB이므로 다른 요청이 수락됩니다. 그러나 1,200GB의 스냅샷 데이터가 포함된 단일 AMI가 현재 저장 중인 경우에는 태스크가 완료될 때까지 추가 태스크가 거부됩니다.

## DescribeStoreImageTasks
<a name="DescribeStoreImageTasks"></a>

`DescribeStoreImageTasks` API는 AMI 저장 태스크의 진행 상황을 설명합니다. 지정된 AMI에 대한 태스크를 설명할 수 있습니다. AMI를 지정하지 않으면 지난 31일 동안 처리된 모든 이미지 저장 태스크의 페이지 매김 목록이 표시됩니다.

각 AMI 태스크에 대한 응답에는 태스크가 `InProgress`, `Completed` 또는 `Failed`인지 표시됩니다. `InProgress` 태스크의 경우 응답에 예상 진행률이 백분율로 표시됩니다.

태스크는 역순으로 나열됩니다.

현재로서는 이전 월의 태스크만 볼 수 있습니다.

## CreateRestoreImageTask
<a name="CreateRestoreImageTask"></a>

`CreateRestoreImageTask` API는 `CreateStoreImageTask` 요청을 사용하여 이전에 생성된 S3 객체에서 AMI를 복원하는 태스크를 시작합니다.

복원 태스크는 저장 태스크가 수행된 동일한 리전 또는 다른 리전에서 수행될 수 있습니다.

AMI 객체를 복원할 S3 버킷은 복원 태스크가 요청된 동일한 리전에 있어야 합니다. AMI는 이 리전에 복원됩니다.

AMI는 저장된 AMI의 값에 해당하는 이름, 설명 및 블록 디바이스 매핑과 같은 메타데이터와 함께 복원됩니다. 이름은 이 계정의 리전 내 AMI에 대해 고유해야 합니다. 이름을 제공하지 않으면 새 AMI에 원래 AMI와 동일한 이름이 지정됩니다. 복원 프로세스 시 생성된 새 AMI ID가 AMI에 지정됩니다.

AMI 복원 태스크를 완료하는 데 걸리는 시간은 AMI의 크기에 따라 다릅니다. 또한 태스크가 대기열에 있기 때문에 진행 중인 다른 태스크의 수에 따라서도 달라집니다. AMI를 설명([describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html))하거나 EBS 스냅샷을 설명([describe-snapshots](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html))하여 태스크 진행률을 볼 수 있습니다. 태스크가 실패하면 AMI와 스냅샷이 실패 상태로 전환됩니다.

진행 중인 모든 AMI의 크기 합계는 계정당 600GB(복원 후 크기 기준)의 EBS 스냅샷 데이터로 제한됩니다. 진행 중인 태스크가 한도보다 작아질 때까지 추가 태스크 생성이 거부됩니다.

## 파일 경로
<a name="file-paths-in-s3"></a>

다음과 같은 방식으로 AMI를 저장 및 복원할 때 파일 경로를 사용할 수 있습니다.
+ S3에 AMI를 저장할 때 파일 경로를 버킷 이름에 추가할 수 있습니다. 내부적으로 시스템은 경로를 버킷 이름과 분리한 다음 AMI 저장을 위해 생성된 객체 키에 경로를 추가합니다. 전체 객체 경로가 API 호출의 응답에 표시됩니다.
+ AMI를 복원할 때 객체 키 파라미터가 제공되므로 경로를 객체 키 값의 시작 부분에 추가할 수 있습니다.

**예시: 파일 경로가 추가된 버킷 이름**  
AMI를 저장할 때 버킷 이름 뒤에 파일 경로를 지정합니다.

```
amzn-s3-demo-bucket/path1/path2
```

결과 객체 키는 다음과 같습니다.

```
path1/path2/ami-0abcdef1234567890.bin
```

AMI를 복원할 때 버킷 이름과 객체 키를 모두 지정할 수 있습니다. 예시는 [이미지 저장 태스크 생성](work-with-ami-store-restore.md#create-store-image-task) 섹션을 참조하세요.

# 이미지 저장 태스크 생성
<a name="work-with-ami-store-restore"></a>

S3 버킷에 AMI를 저장하면 이미지 저장 태스크가 생성됩니다. 이미지 저장 태스크를 사용하여 프로세스의 진행 상황과 결과를 모니터링할 수 있습니다.

**Topics**
+ [AMI 보안](#securing-amis)
+ [S3를 사용하여 AMI를 저장하고 복원하기 위한 권한](#ami-s3-permissions)
+ [이미지 저장 태스크 생성](#create-store-image-task)
+ [이미지 복원 태스크 생성](#create-restore-image-task)

## AMI 보안
<a name="securing-amis"></a>

S3 버킷에 AMI의 콘텐츠를 보호할 수 있는 충분한 보안으로 구성되어 있고 AMI 객체가 버킷에 남아 있는 동안 보안이 유지되도록 하는 것이 중요합니다. 불가능하다면 이러한 API를 사용하지 않는 것이 좋습니다. S3 버킷에 대한 퍼블릭 액세스가 허용되지 않는지 확인합니다. 필수는 아니지만, AMI가 저장되는 S3 버킷에 대해 [서버 측 암호화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 활성화하는 것이 좋습니다.

S3 버킷에 대한 적절한 보안 설정을 설정하는 방법에 대한 자세한 내용은 다음 보안 항목을 참조하세요.
+ [Amazon S3 스토리지에 대한 퍼블릭 액세스 차단](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
+ [Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)
+ [AWS Config 규칙 s3-bucket-ssl-requests-only 준수를 위해 어떤 S3 버킷 정책을 사용할 수 있습니까?](https://repost.aws/knowledge-center/s3-bucket-policy-for-config-rule)
+ [Amazon S3서버 액세스 로깅 활성화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)

AMI 스냅샷이 S3 객체에 복사되면 데이터는 TLS 연결을 통해 복사됩니다. AMI를 암호화된 스냅샷과 함께 저장할 수 있지만 스냅샷은 저장 프로세스의 일부로 복호화됩니다.

## S3를 사용하여 AMI를 저장하고 복원하기 위한 권한
<a name="ami-s3-permissions"></a>

IAM 보안 주체가 Amazon S3를 사용하여 AMI를 저장 또는 복원하는 경우 이 보안 주체에 필요한 권한을 부여해야 합니다.

다음 예시 정책에는 IAM 보안 주체가 저장 및 복원 태스크를 수행하도록 허용하는 데 필요한 모든 작업이 포함되어 있습니다.

또한 보안 주체에게 특정 리소스에만 액세스할 수 있는 권한을 부여하는 IAM 정책을 생성할 수도 있습니다. 더 많은 예시 정책은 *IAM 사용 설명서*의 [AWS 리소스에 대한 액세스 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)를 참조하세요.

**참고**  
AMI를 구성하는 스냅샷이 암호화된 경우 또는 계정이 기본적으로 암호화에 대해 활성화된 경우 IAM 보안 주체에 KMS 키를 사용할 권한이 있어야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:AbortMultipartUpload",
                "ebs:CompleteSnapshot",
                "ebs:GetSnapshotBlock",
                "ebs:ListChangedBlocks",
                "ebs:ListSnapshotBlocks",
                "ebs:PutSnapshotBlock",
                "ebs:StartSnapshot",
                "ec2:CreateStoreImageTask",
                "ec2:DescribeStoreImageTasks",
                "ec2:CreateRestoreImageTask",
                "ec2:GetEbsEncryptionByDefault",
                "ec2:DescribeTags",
                "ec2:CreateTags"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 이미지 저장 태스크 생성
<a name="create-store-image-task"></a>

S3 버킷에 AMI를 저장하려면 먼저 이미지 저장 태스크를 생성합니다. 태스크를 완료하는 데 걸리는 시간은 AMI의 크기에 따라 다릅니다. 성공하거나 실패할 때까지 태스크의 진행 상황을 추적할 수 있습니다.

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

**이미지 저장 태스크를 생성하려면 다음을 수행하세요.**  
[create-store-image-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-store-image-task.html) 명령을 사용합니다.

```
aws ec2 create-store-image-task \
    --image-id ami-0abcdef1234567890 \
    --bucket amzn-s3-demo-bucket
```

다음은 예제 출력입니다.

```
{
  "ObjectKey": "ami-0abcdef1234567890.bin"
}
```

**이미지 저장 태스크의 진행 상황을 설명하려면 다음을 수행하세요.**  
[describe-store-image-tasks](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-store-image-tasks.html) 명령을 사용합니다.

```
aws ec2 describe-store-image-tasks \
    --image-ids ami-0abcdef1234567890 \
    --query StoreImageTaskResults[].StoreTaskState \
    --output text
```

다음은 예제 출력입니다.

```
InProgress
```

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

**이미지 저장 태스크를 생성하려면 다음을 수행하세요.**  
[New-EC2StoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2StoreImageTask.html) cmdlet을 사용합니다.

```
New-EC2StoreImageTask `
    -ImageId ami-0abcdef1234567890 `
    -Bucket amzn-s3-demo-bucket
```

다음은 예제 출력입니다.

```
ObjectKey         : ami-0abcdef1234567890.bin
```

**이미지 저장 태스크의 진행 상황을 설명하려면 다음을 수행하세요.**  
[Get-EC2StoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2StoreImageTask.html) cmdlet을 사용합니다.

```
(Get-EC2StoreImageTask -ImageId ami-0abcdef1234567890).StoreTaskState
```

다음은 예제 출력입니다.

```
InProgress
```

------

## 이미지 복원 태스크 생성
<a name="create-restore-image-task"></a>

복원된 AMI의 이름을 지정해야 합니다. 이름은 이 계정의 리전 내 AMI에 대해 고유해야 합니다. 복원된 AMI에 새 AMI ID가 지정됩니다.

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

**이미지 복원 태스크를 생성하려면 다음을 수행하세요.**  
[create-restore-image-task](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-restore-image-task.html) 명령을 사용합니다.

```
aws ec2 create-restore-image-task \
    --object-key ami-0abcdef1234567890.bin \
    --bucket amzn-s3-demo-bucket \
    --name "my-restored-ami"
```

다음은 예제 출력입니다.

```
{
   "ImageId": "ami-1234567890abcdef0"
}
```

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

**이미지 복원 태스크를 생성하려면 다음을 수행하세요.**  
[New-EC2RestoreImageTask](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2RestoreImageTask.html) cmdlet을 사용합니다.

```
New-EC2RestoreImageTask `
    -ObjectKey ami-0abcdef1234567890.bin `
    -Bucket amzn-s3-demo-bucket `
    -Name "my-restored-ami"
```

출력의 예제는 다음과 같습니다.

```
ImageId         : ami-1234567890abcdef0
```

------

# AMI 계보를 사용하여 AMI의 기원 추적하기
<a name="ami-ancestry"></a>

AMI 계보는 모든 상위 AMI의 ID와 리전을 반환함으로써 AMI의 기원을 추적할 수 있도록 도와줍니다. AMI를 생성하거나 복사할 때, 새 AMI는 소스(상위) AMI의 ID와 리전 정보를 유지합니다. 이를 통해 루트 AMI까지 이어지는 AMI 체인을 추적할 수 있습니다.

**주요 이점**

AMI 계보를 사용하면 다음을 수행할 수 있습니다.
+ 내부 정책 준수를 확인하기 위해 AMI 파생본을 추적
+ 상위 AMI에서 보안 문제가 발견된 경우, 잠재적으로 취약한 AMI 식별
+ 여러 리전에 걸쳐 AMI 기원에 대한 가시성 유지

**Topics**
+ [AMI 계보 작동 방식](#how-ami-ancestry-works)
+ [고려 사항](#ami-ancestry-conditions)
+ [AMI 계보 보기](#view-ami-ancestry)
+ [소스 AMI 식별](#identify-source-ami-used-to-create-new-ami)

## AMI 계보 작동 방식
<a name="how-ami-ancestry-works"></a>

AMI 계보는 지정된 AMI를 생성하는 데 사용된 상위 AMI, 그 상위의 상위 AMI 등 루트 AMI에 도달할 때까지의 모든 상위 AMI를 식별합니다. 작동 방식은 다음과 같습니다.
+ 각 AMI에는 소스(상위) AMI의 ID와 리전 정보가 표시됩니다.
+ 선택한 AMI부터 시작하여, 계보 항목 목록에 각 부모 AMI가 순차적으로 표시됩니다.
+ 계보 항목 목록은 루트 AMI에 도달할 때까지 거슬러 올라갑니다. 루트 AMI는 다음 중 하나에 해당합니다.
  + [확인된 공급자](sharing-amis.md#verified-ami-provider)의 퍼블릭 AMI(소유자 별칭이 `amazon` 또는 `aws-marketplace`로 표시됨)
  + 기록된 상위 AMI가 없는 AMI. 예를 들어, 인스턴스에서 AMI를 생성하는 방식과 달리, [RegisterImage](creating-an-ami-ebs.md#creating-launching-ami-from-snapshot)를 사용하여 스냅샷 집합으로부터 직접 AMI를 생성한 경우에는 추적할 소스 AMI가 없습니다.
  + 소스 AMI가 다른 [파티션](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#partition)에 속한 AMI.
  + 목록의 50번째 AMI. 계보 목록에 포함될 수 있는 최대 AMI 수는 50개입니다.

## 고려 사항
<a name="ami-ancestry-conditions"></a>
+ 소스 AMI의 ID와 리전 정보는 [CreateImage](creating-an-ami-ebs.md#how-to-create-ebs-ami), [CopyImage](CopyingAMIs.md#ami-copy-steps) 또는 [CreateRestoreImageTask](store-restore-how-it-works.md#CreateRestoreImageTask)를 사용하여 생성된 AMI에서만 제공됩니다.
+ [CreateImage](creating-an-ami-ebs.md#how-to-create-ebs-ami)를 사용하여 생성된 AMI(인스턴스에서 AMI 생성)의 경우, 소스 AMI ID는 해당 인스턴스를 실행하는 데 사용된 AMI의 ID입니다.
+ 다음의 경우에는 소스 AMI 정보를 사용할 수 없습니다.
  + [RegisterImage](creating-an-ami-ebs.md#creating-launching-ami-from-snapshot)를 사용하여 생성된 AMI(스냅샷에서 생성되었기 때문)
  + 일부 오래된 AMI.
+ 다음과 같은 경우에도 소스 AMI 정보는 유지됩니다.
  + AMI를 리전 간에 복사한 경우.
  + 소스 AMI가 등록 해제(삭제)된 경우.
  + 소스 AMI에 대한 접근 권한이 없는 경우.
+ 각 AMI 계보 목록은 최대 50개의 AMI로 제한됩니다.

## AMI 계보 보기
<a name="view-ami-ancestry"></a>

다음 방법을 사용하여 AMI의 계보를 확인할 수 있습니다.

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

**AMI의 계보를 보려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택한 다음, **AMI 계보** 탭을 선택합니다.

1. **AMI 계보 항목** 테이블에는 계보 목록에 포함된 모든 AMI가 표시됩니다.
   + **AMI ID** - 계보 목록에 포함된 각 AMI의 식별자입니다. 테이블의 첫 번째 항목은 선택한 AMI이며, 이후 항목은 해당 AMI의 상위 AMI입니다.
   + **소스 AMI ID** - **AMI ID** 열에 표시된 AMI가 생성된 소스 AMI의 ID입니다. 대시(**-**)는 AMI 계보 목록의 끝을 의미합니다.
   + **소스 AMI 리전** - 소스 AMI가 위치한 AWS 리전입니다.
   + **계보 수준** - 계보 목록 내에서의 위치를 나타내며, 다음과 같은 의미를 가집니다.
     + **0(입력 AMI)**은 계보를 확인하려는 선택한 AMI를 의미합니다.
     + 숫자가 증가할수록 더 오래된 상위 AMI를 의미합니다.
     + ***n*(원본 AMI)**은 루트 AMI를 의미하며, 숫자는 계보가 얼마나 과거까지 거슬러 올라가는지를 나타냅니다.
   + **생성 날짜** - AMI가 생성된 날짜 및 시간으로, UTC 형식으로 표시됩니다.
   + **소유자 별칭** - AMI 소유자의 별칭(예: `amazon`)입니다. 대시(**-**)는 AMI에 소유자 별칭이 없음을 의미합니다.

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

**AMI의 계보를 보려면**  
[get-image-ancestry](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-image-ancestry.html) 명령을 사용하여 AMI ID를 지정합니다.

```
aws ec2 get-image-ancestry \
    --image-id ami-1111111111EXAMPLE \
    --region us-east-1
```

다음은 예제 출력입니다. 출력에는 계보 순서대로 AMI가 나열되며, 첫 번째 항목은 지정한(입력) AMI이고, 이후에는 상위 AMI, 상위의 상위 AMI 순으로 표시되며, 마지막은 루트 AMI입니다.

```
{
    "ImageAncestryEntries": [
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-1111111111EXAMPLE", // Input AMI
            "SourceImageId": "ami-2222222222EXAMPLE",
            "SourceImageRegion": "us-east-1"

        },
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-2222222222EXAMPLE", // Parent AMI
            "SourceImageId": "ami-3333333333EXAMPLE",
            "SourceImageRegion": "us-east-1"
        },
        ...
        {
            "CreationDate": "2025-01-17T18:37:50.000Z",
            "ImageId": "ami-8888888888EXAMPLE", // Root AMI
            "ImageOwnerAlias": "aws-marketplace",
            "SourceImageId": "ami-9999999999EXAMPLE",
            "SourceImageRegion": "us-east-2"
        }
    ]
}
```

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

**AMI의 계보를 보려면**  
[Get-EC2ImageAncestry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAncestry.html) cmdlet을 사용합니다.

```
Get-EC2ImageAncestry -ImageId ami-1111111111EXAMPLE
```

다음은 예제 출력입니다. 출력에는 계보 순서대로 AMI가 나열되며, 첫 번째 항목은 지정한(입력) AMI이고, 이후에는 상위 AMI, 상위의 상위 AMI 순으로 표시되며, 마지막은 루트 AMI입니다.

```
ImageAncestryEntries : {
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-1111111111EXAMPLE"    # Input AMI
        SourceImageId = "ami-2222222222EXAMPLE"
        SourceImageRegion = "us-east-1"
    },
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-2222222222EXAMPLE"    # Parent AMI
        SourceImageId = "ami-3333333333EXAMPLE"
        SourceImageRegion = "us-east-1"
    },
    ...
    @{
        CreationDate = "2025-01-17T18:37:50.000Z"
        ImageId = "ami-8888888888EXAMPLE"    # Root AMI
        ImageOwnerAlias = "aws-marketplace"
        SourceImageId = "ami-9999999999EXAMPLE"
        SourceImageRegion = "us-east-2"
    }
}
```

------

## 소스 AMI 식별
<a name="identify-source-ami-used-to-create-new-ami"></a>

AMI를 생성하는 데 사용된 직계 상위(소스) AMI만 식별하면 되는 경우, 다음 방법을 사용할 수 있습니다.

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

**선택한 AMI를 생성하는 데 사용된 소스 AMI를 식별하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. 세부 정보를 볼 AMI를 선택합니다.

   소스 AMI 정보는 **소스 AMI ID** 및 **소스 AMI 리전** 필드에 표시됩니다.

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

**지정된 AMI를 생성하는 데 사용된 소스 AMI를 식별하려면**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-ids ami-0abcdef1234567890 \
    --query "Images[].{ID:SourceImageId,Region:SourceImageRegion}"
```

다음은 예제 출력입니다.

```
[
    {
        "ID": "ami-0abcdef1234567890",
        "Region": "us-west-2"
    }
}
```

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

**지정된 AMI를 생성하는 데 사용된 소스 AMI를 식별하려면**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

```
Get-EC2Image -ImageId ami-0abcdef1234567890 | Select SourceImageId, SourceImageRegion
```

출력의 예제는 다음과 같습니다.

```
SourceImageId           SourceImageRegion
-------------           -----------------
ami-0abcdef1234567890 us-west-2
```

------

# AMI 사용 관리 및 모니터링
<a name="ec2-ami-usage"></a>

AWS는 AMI 사용을 효과적으로 관리하고 모니터링하는 데 도움이 되는 몇 가지 기능을 제공합니다. 공유 AMI를 사용하는 계정을 추적하고, AMI가 마지막으로 사용된 시기를 식별하고, AWS 계정에서 특정 AMI를 참조하는 리소스를 검색할 수 있습니다.

다음 표에서는 AMI 사용을 관리 및 모니터링하기 위한 기능에 대한 개요를 제공합니다.


| 기능 | 사용 사례: | 주요 이점 | 
| --- | --- | --- | 
| [AMI 사용 보고서](your-ec2-ami-usage.md) | AMI를 사용하는 AWS 계정 및 각 AMI의 사용 빈도를 파악합니다. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 
| [마지막으로 사용된 시간 추적](ami-last-launched-time.md) | AMI가 마지막으로 사용된 시간을 확인합니다. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 
| [AMI 참조 확인](ec2-ami-references.md) | AWS 리소스가 최신 규정 준수 AMI를 사용하는지 확인합니다. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-ami-usage.html)  | 

**Topics**
+ [AMI 사용 보기](your-ec2-ami-usage.md)
+ [Amazon EC2 AMI를 마지막으로 사용한 시점 확인](ami-last-launched-time.md)
+ [지정된 AMI를 참조하는 리소스 식별](ec2-ami-references.md)

# AMI 사용 보기
<a name="your-ec2-ami-usage"></a>

Amazon Machine Image(AMI)를 다른 AWS 계정(특정 AWS 계정, 조직, 조직 단위(OU) 또는 공개적으로)과 공유하는 경우 AMI 사용 보고서를 생성하여 이러한 AMI가 어떻게 사용되는지 확인할 수 있습니다. 보고서는 다음에 대한 가시성을 제공합니다.
+ EC2 인스턴스 또는 시작 템플릿에서 AMI를 사용하는 AWS 계정
+ 각 AMI를 참조하는 EC2 인스턴스 또는 시작 템플릿의 수

AMI 사용 보고서는 다음 기능을 지원하여 AMI를 보다 효과적으로 관리하는 데 도움이 됩니다.
+ AMI를 안전하게 등록 취소 또는 비활성화할 수 있도록 AMI를 참조하는 AWS 계정 및 리소스 유형을 식별합니다.
+ 스토리지 비용을 절감하기 위해 등록 취소할 미사용 AMI를 식별합니다.
+ 가장 많이 사용되는 AMI를 식별합니다.

**Topics**
+ [AMI 사용 보고서 작동 방식](#how-ami-usage-reports-work)
+ [AMI 사용 보고서 생성](#create-ami-usage-reports)
+ [AMI 사용 보고서 보기](#view-ami-usage-reports)
+ [AMI 사용 보고서 삭제](#delete-ami-usage-reports)
+ [보고서 할당량](#ami-usage-report-quotas)

## AMI 사용 보고서 작동 방식
<a name="how-ami-usage-reports-work"></a>

AMI 사용 보고서를 생성할 때 다음을 지정합니다.
+ 보고할 AMI.
+ AWS 계정 확인할 (특정 계정 또는 모든 계정).
+ 확인할 리소스 유형(EC2 인스턴스, 시작 템플릿 또는 둘 다).
+ 시작 템플릿의 경우 확인할 버전 수(기본값은 최신 버전 20개).

Amazon EC2는 각 AMI에 대해 별도의 보고서를 생성합니다. 각 보고서는 다음을 제공합니다.
+ AMI를 사용하는 AWS 계정의 목록.
+ 계정당 리소스 유형별로 AMI를 참조하는 리소스 수. 시작 템플릿의 경우 AMI가 시작 템플릿의 여러 버전에서 참조되더라도 개수는 1뿐입니다.

**중요**  
AMI 사용 보고서를 생성할 때 최신 활동이 포함되지 않을 수 있습니다. 지난 24시간 동안의 인스턴스 활동 및 지난 며칠 동안의 시작 템플릿 활동은 보고서에 표시되지 않을 수 있습니다.

Amazon EC2는 생성된 보고서를 30일 경과 후 자동으로 삭제합니다. EC2 콘솔에서 보고서를 다운로드하여 로컬로 유지할 수 있습니다.

## AMI 사용 보고서 생성
<a name="create-ami-usage-reports"></a>

AMI가 사용되는 방식을 보려면 먼저 보고할 계정 및 리소스 유형을 지정하여 AMI 사용 보고서를 생성해야 합니다. 보고서가 생성되면 보고서의 내용을 볼 수 있습니다. EC2 콘솔에서 보고서를 다운로드할 수도 있습니다.

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

**AMI 사용 보고서를 생성하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택하고 **작업**, **AMI 사용**, **내 AMI 사용 보기**를 선택합니다.

1. **내 AMI 사용 보고서 생성** 페이지에서 다음을 수행합니다.

   1. **리소스 유형**에서 보고할 리소스 유형을 하나 이상 선택합니다.

   1. **계정 ID**에서 다음 중 하나를 수행합니다.
      + **계정 ID 지정**을 선택한 다음 보고할 각 계정에 대해 **계정 ID 추가**를 선택합니다.
      + 모든 계정을 보고하려면 **모든 계정 포함**을 선택합니다.

   1. **내 AMI 사용 보고서 생성**을 선택합니다.

1. AMI 페이지에서 **내 AMI 사용** 탭을 선택합니다.

1. 세부 정보를 볼 보고서 ID를 선택합니다.

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

**계정 목록에 대한 AMI 사용 보고서를 생성하려면**  
[create-image-usage-report](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image-usage-report.html) 명령을 다음 필수 파라미터와 함께 사용합니다.
+ `--image-id` - 보고할 AMI의 ID입니다.
+ `--resource-types` - 확인할 리소스의 유형입니다. 다음 예제에서 확인할 리소스 유형은 EC2 인스턴스 및 시작 템플릿입니다. 또한 확인할 시작 템플릿 버전의 수도 지정됩니다(`version-depth=100`).

 특정 계정에 대해 보고하려면 `--account-ids` 파라미터를 사용하여 보고할 계정의 ID를 각각 지정합니다.

```
aws ec2 create-image-usage-report \
    --image-id ami-0abcdef1234567890 \
    --account-ids 111122223333 444455556666 123456789012 \
    --resource-types ResourceType=ec2:Instance \
      'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=100}]'
```

**모든 계정의 AMI 사용 보고서를 생성하려면**  
지정된 AMI를 사용하여 모든 계정에 대해 보고하려면 동일한 명령을 사용하되 `--account-ids` 파라미터를 생략합니다.

```
aws ec2 create-image-usage-report \
    --image-id ami-0abcdef1234567890 \
    --resource-types ResourceType=ec2:Instance \
      'ResourceType=ec2:LaunchTemplate,ResourceTypeOptions=[{OptionName=version-depth,OptionValues=100}]'
```

다음은 예제 출력입니다.

```
{
    "ReportId": "amiur-00b877d192f6b02d0"
}
```

**보고서 생성 상태를 모니터링하려면**  
[describe-image-usage-reports](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-reports.html) 명령을 사용하고 보고서 ID를 지정합니다.

```
aws ec2 describe-image-usage-reports --report-ids amiur-00b877d192f6b02d0
```

다음은 예제 출력입니다. `State` 필드의 초기 값은 `pending`입니다. 보고서 항목을 보려면 상태가 `available`이어야 합니다.

```
{
    "ImageUsageReports": [
        {
            "ImageId": "ami-0e9ae3dc21c2b3a64",
            "ReportId": "amiur-abcae3dc21c2b3999",
            "ResourceTypes": [
                {"ResourceType": "ec2:Instance"}
            ],
            "State": "pending",
            "CreationTime": "2025-09-29T13:27:12.322000+00:00",
            "ExpirationTime": "2025-10-28T13:27:12.322000+00:00"
        }
    ]
}
```

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

**계정 목록에 대한 AMI 사용 보고서를 생성하려면**  
[New-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2ImageUsageReport.html) cmdlet을 다음 필수 파라미터와 함께 사용합니다.
+ `-ImageId` - 보고할 AMI의 ID입니다.
+ `-ResourceType` - 확인할 리소스의 유형입니다. 다음 예제에서 확인할 리소스 유형은 EC2 인스턴스 및 시작 템플릿입니다. 또한 확인할 시작 템플릿 버전의 수도 지정됩니다(`'version-depth' = 100`).

 특정 계정에 대해 보고하려면 `-AccountId` 파라미터를 사용하여 보고할 계정의 ID를 각각 지정합니다.

```
New-EC2ImageUsageReport `
    -ImageId ami-0abcdef1234567890 `
    -AccountId 111122223333 444455556666 123456789012 `
    -ResourceType @(
        @{ResourceType = 'ec2:Instance'},
        @{ResourceType = 'ec2:LaunchTemplate'ResourceTypeOptions = @{'version-depth' = 100}
        })
```

**모든 계정의 AMI 사용 보고서를 생성하려면**  
지정된 AMI를 사용하여 모든 계정에 대해 보고하려면 동일한 명령을 사용하되 `-AccountId` 파라미터를 생략합니다.

```
New-EC2ImageUsageReport `
    -ImageId ami-0abcdef1234567890 `
    -ResourceType @(
        @{ResourceType = 'ec2:Instance'},
        @{ResourceType = 'ec2:LaunchTemplate'ResourceTypeOptions = @{'version-depth' = 100}
        })
```

다음은 예제 출력입니다.

```
ReportId
--------
amiur-00b877d192f6b02d0
```

**보고서 생성 상태를 모니터링하려면**  
[Get-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReport.html) 명령을 사용하고 보고서 ID를 지정합니다.

```
Get-EC2ImageUsageReport -ReportId amiur-00b877d192f6b02d0
```

다음은 예제 출력입니다. `State` 필드의 초기 값은 `pending`입니다. 보고서 항목을 보려면 상태가 `available`이어야 합니다.

```
ImageUsageReports
-----------------
{@{ImageId=ami-0e9ae3dc21c2b3a64; ReportId=amiur-abcae3dc21c2b3999; ResourceTypes=System.Object[]; State=pending; CreationTime=2025-09-29; ExpirationTime=2025-10-28}}
```

------

## AMI 사용 보고서 보기
<a name="view-ami-usage-reports"></a>

지난 30일 동안 특정 AMI에 대해 생성한 모든 사용 보고서를 볼 수 있습니다. Amazon EC2는 생성된 보고서를 30일 경과 후 자동으로 삭제합니다.

각 보고서에 대해 AMI를 사용하는 AWS 계정을 확인할 수 있고, 각 계정에 대해 리소스 유형별로 AMI를 참조하는 리소스 수를 확인할 수 있습니다. 보고서 생성이 시작된 시점도 확인할 수 있습니다. 이 정보는 보고서가 **완료**(콘솔) 또는 `available`(AWS CLI) 상태인 경우에만 사용할 수 있습니다.

**중요**  
AMI 사용 보고서를 생성할 때 최신 활동이 포함되지 않을 수 있습니다. 지난 24시간 동안의 인스턴스 활동 및 지난 며칠 동안의 시작 템플릿 활동은 보고서에 표시되지 않을 수 있습니다.

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

**AMI 사용 보고서를 보려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택합니다.

1. **내 사용 보고서** 탭을 선택합니다.

   보고서 목록에는 다음이 표시됩니다.
   + 선택한 AMI에 대해 지난 30일 동안 생성된 모든 보고서입니다.
   + 각 보고서에 대해 **보고서 시작 시간** 열에 보고서가 생성된 날짜가 표시됩니다.

1. 내용을 보려면 보고서의 ID를 선택합니다.

1. AMI 세부 정보 페이지의 **내 사용 보고서** 탭으로 돌아가려면 **이 AMI에 대한 모든 보고서 보기**를 선택합니다.

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

**지정된 AMI에 대한 모든 AMI 사용 보고서를 나열하려면**  
[describe-image-usage-reports](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-reports.html) 명령을 사용하고 AMI의 ID를 지정하여 보고서 목록을 가져옵니다.

```
aws ec2 describe-image-usage-reports --image-ids ami-0abcdef1234567890
```

다음은 예제 출력입니다. 각 보고서 ID는 스캔한 리소스 유형, 보고서 생성 및 만료 날짜와 함께 나열됩니다. 이 정보를 사용하여 항목을 보려는 보고서를 식별할 수 있습니다.

```
{
  "ImageUsageReports": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ReportId": "amiur-1111111111111111",
      "ResourceTypes": [
        {
          "ResourceType": "ec2:Instance"
        }
      ],
      "State": "available",
      "CreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ExpirationTime": "2025-10-28T13:27:12.322000+00:00",
      "Tags": []
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ReportId": "amiur-22222222222222222",
      "ResourceTypes": [
        {
          "ResourceType": "ec2:Instance"
        },
        {
          "ResourceType": "ec2:LaunchTemplate"
        }
      ],
      "State": "available",
      "CreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ExpirationTime": "2025-10-30T13:27:12.322000+00:00",
      "Tags": []
    }
  ],
  "NextToken": "opaque"
}
```

**지정된 AMI에 대한 AMI 사용 보고서의 내용을 보려면**  
[describe-image-usage-report-entries](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-report-entries.html) 명령을 사용하고 AMI의 ID를 지정합니다. 응답은 지정된 AMI에 대한 모든 보고서를 반환하며, AMI를 사용한 계정 및 해당 리소스 수를 보여줍니다.

```
aws ec2 describe-image-usage-report-entries --image-ids ami-0abcdef1234567890
```

다음은 예제 출력입니다.

```
{
  "ImageUsageReportEntries": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 15,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-1111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 2,
      "ReportCreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ReportId": "amiur-22222222222222222"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "001100110011",
      "UsageCount": 39,
      "ReportCreationTime": "2025-10-01T13:27:12.322000+00:00",
      "ReportId": "amiur-22222222222222222"
    }
  ],
  "NextToken": "opaque"
}
```

**지정된 AMI 사용 보고서의 내용을 보려면**  
[describe-image-usage-report-entries](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-usage-report-entries.html) 명령을 사용하고 보고서의 ID를 지정합니다. 응답은 지정된 보고서의 모든 항목을 반환하며, AMI를 사용한 계정 및 해당 리소스 수를 보여줍니다.

```
aws ec2 describe-image-usage-report-entries --report-ids amiur-11111111111111111
```

다음은 예제 출력입니다.

```
{
  "ImageUsageReportEntries": [
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:Instance",
      "AccountId": "123412341234",
      "UsageCount": 15,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:LaunchTemplate",
      "AccountId": "123412341234",
      "UsageCount": 4,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    },
    {
      "ImageId": "ami-0abcdef1234567890",
      "ResourceType": "ec2:LaunchTemplate",
      "AccountId": "001100110011",
      "UsageCount": 2,
      "ReportCreationTime": "2025-09-29T13:27:12.322000+00:00",
      "ReportId": "amiur-11111111111111111"
    }
  ],
  "NextToken": "opaque"
}
```

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

**지정된 AMI에 대한 모든 AMI 사용 보고서를 나열하려면**  
[Get-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReport.html) cmdlet을 사용하고 AMI의 ID를 지정하여 보고서 목록을 가져옵니다.

```
Get-EC2ImageUsageReport -ImageId ami-0abcdef1234567890
```

다음은 예제 출력입니다. 각 보고서 ID는 스캔한 리소스 유형, 보고서 생성 및 만료 날짜와 함께 나열됩니다. 이 정보를 사용하여 항목을 보려는 보고서를 식별할 수 있습니다.

```
@{
    ImageUsageReports = @(
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-1111111111111111"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-09-29T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-28T13:27:12.322000+00:00"
        },
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-22222222222222222"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-09-30T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-29T13:27:12.322000+00:00"
        },
        @{
            ImageId = "ami-0abcdef1234567890"
            ReportId = "amiur-33333333333333333"
            ResourceTypes = @(
                @{
                    ResourceType = "ec2:Instance"
                }
            )
            State = "available"
            CreationTime = "2025-10-01T13:27:12.322000+00:00"
            ExpirationTime = "2025-10-30T13:27:12.322000+00:00"
        }
    )
    NextToken = "opaque"
}
```

**지정된 AMI에 대한 AMI 사용 보고서의 내용을 보려면**  
[Get-EC2ImageUsageReportEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReportEntry.html) cmdlet을 사용하고 AMI의 ID를 지정합니다. 응답은 지정된 AMI에 대한 모든 보고서를 반환하며, AMI를 사용한 계정 및 해당 리소스 수를 보여줍니다.

```
Get-EC2ImageUsageReportEntry -ImageId ami-0abcdef1234567890
```

다음은 예제 출력입니다.

```
ImageUsageReportEntries : {@{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 15
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-1111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 7
    ReportCreationTime = "2025-09-30T13:27:12.322000+00:00"
    ReportId = "amiur-22222222222222222"
    }...}
NextToken : opaque
```

**지정된 AMI 사용 보고서의 내용을 보려면**  
[Get-EC2ImageUsageReportEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageUsageReportEntry.html) cmdlet을 사용하고 보고서의 ID를 지정합니다. 응답은 지정된 보고서의 모든 항목을 반환하며, AMI를 사용한 계정 및 해당 리소스 수를 보여줍니다.

```
Get-EC2ImageUsageReportEntry -ReportId amiur-11111111111111111
```

다음은 예제 출력입니다.

```
ImageUsageReportEntries : {@{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:Instance"
    AccountId = "123412341234"
    UsageCount = 15
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:LaunchTemplate"
    AccountId = "123412341234"
    UsageCount = 4
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }, @{
    ImageId = "ami-0abcdef1234567890"
    ResourceType = "ec2:LaunchTemplate"
    AccountId = "************"
    UsageCount = 2
    ReportCreationTime = "2025-09-29T13:27:12.322000+00:00"
    ReportId = "amiur-11111111111111111"
    }}
NextToken : opaque
```

------

## AMI 사용 보고서 삭제
<a name="delete-ami-usage-reports"></a>

Amazon EC2는 생성된 보고서를 30일 경과 후 자동으로 삭제합니다. 그 전에 수동으로 삭제할 수 있습니다.

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

**AMI 사용 보고서를 삭제하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택합니다.

1. **내 AMI 사용** 탭을 선택합니다.

1. 삭제할 보고서 옆에 위치한 옵션 버튼을 선택하고 **삭제**를 선택합니다.

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

**AMI 사용 보고서를 삭제하려면**  
[delete-image-usage-report](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-image-usage-report.html) 명령을 사용하고 보고서의 ID를 지정합니다.

```
aws ec2 delete-image-usage-report --report-id amiur-0123456789abcdefg
```

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

**AMI 사용 보고서를 삭제하려면**  
[Remove-EC2ImageUsageReport](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2ImageUsageReport.html) cmdlet을 사용하고 보고서의 ID를 지정합니다.

```
Remove-EC2ImageUsageReport -ReportId amiur-0123456789abcdefg
```

------

## 보고서 할당량
<a name="ami-usage-report-quotas"></a>

다음 할당량은 AMI 사용량 보고서 생성에 적용됩니다. 할당량은 AWS 리전별로 적용됩니다.


| 설명 | 할당량 | 
| --- | --- | 
| AWS 계정당 진행 중인(pending) AMI 사용량 보고서 | 2,000 | 
| AMI당 진행 중인(pending) AMI 사용량 보고서 | 1 | 

# Amazon EC2 AMI를 마지막으로 사용한 시점 확인
<a name="ami-last-launched-time"></a>

Amazon EC2는 AMI가 인스턴스를 시작하는 데 마지막으로 사용된 날짜와 시간을 자동으로 추적합니다. 오랫동안 인스턴스를 시작하는 데 사용되지 않은 AMI가 있는 경우 해당 AMI가 [등록 취소](deregister-ami.md) 또는 [사용 중단](ami-deprecate.md)에 적합한지 고려해 보세요.

**고려 사항**
+ AMI를 사용하여 인스턴스를 시작하면 24시간이 지나서 사용량이 보고됩니다.
+ 마지막 실행 시간을 확인하려면 AMI의 소유자여야 합니다.
+ AMI 사용 데이터는 2017년 4월부터 사용할 수 있습니다.

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

**AMI의 마지막 시작 시간 보기**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **AMI**를 선택합니다.

1. 필터 표시줄에서 **내 소유**를 선택합니다.

1. AMI에 대한 확인란을 선택합니다.

1. **세부 정보** 탭에서 **마지막 시작 시간**을 찾습니다.

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

**AMI를 설명하여 마지막 시작 시간을 보는 방법**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다. `LastLaunchedTime`이 없는 경우 본인이 AMI를 소유하는지 확인합니다.

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query Images[].LastLaunchedTime \
    --output text
```

다음은 예제 출력입니다.

```
2025-02-17T20:22:19Z
```

**AMI의 마지막 시작 시간 속성을 보는 방법**  
[describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 명령을 사용합니다. 본인이 지정된 AMI의 소유자여야 합니다.

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute lastLaunchedTime \
    --query LastLaunchedTime.Value \
    --output text
```

다음은 예제 출력입니다.

```
2025-02-17T20:22:19Z
```

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

**AMI를 설명하여 마지막 시작 시간을 보는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다. `LastLaunchedTime`이 없는 경우 본인이 AMI를 소유하는지 확인합니다.

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

다음은 예제 출력입니다.

```
2025-02-17T20:22:19Z
```

**AMI의 마지막 시작 시간 속성을 보는 방법**  
[Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) cmdlet을 사용합니다. 본인이 지정된 AMI의 소유자여야 합니다.

```
(Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute LastLaunchedTime).LastLaunchedTime
```

출력의 예제는 다음과 같습니다.

```
2025-02-17T20:22:19Z
```

------

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

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')
                }
            )
        }
    )
```

------

# Amazon EC2 AMI 사용 중단
<a name="ami-deprecate"></a>

AMI가 만료되어 사용되지 않도록 할 날짜를 지정하여 사용 중지할 수 있습니다. AMI가 만료되는 시점을 나타내는 AMI의 향후 사용 중지 날짜를 지정할 수도 있습니다. 예를 들어 더 이상 적극적으로 유지 관리되지 않는 AMI를 사용 중지하거나, 새 버전으로 대체된 AMI를 사용 중지할 수 있습니다. 기본적으로 사용 중지된 AMI는 AMI 목록에 표시되지 않으므로 새 사용자가 오래된 AMI를 사용할 수 없습니다. 그러나 기존 사용자, 그리고 시작 템플릿 및 Auto Scaling 그룹과 같은 시작 서비스는 해당 ID를 지정하여 사용 중지된 AMI 계속 사용할 수 있습니다. 사용자 및 서비스가 사용할 수 없도록 AMI 삭제하려면 [등록 취소](deregister-ami.md)해야 합니다.

AMI I가 사용 중지된 후:
+ AMI 사용자의 경우, 해당 ID를 지정하거나 사용 중지된 AMI가 표시되도록 지정하지 않는 한 사용 중지된 AMI는 [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 호출에 표시되지 않습니다. AMI 소유자에게는 사용 중지된 AMI가 [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 호출에 계속 표시됩니다.
+ AMI 사용자의 경우 사용 중지된 AMI를 EC2 콘솔을 통해 선택할 수 없습니다. 예를 들어 사용 중지된 AMI는 인스턴스 시작 마법사의 AMI 카탈로그에 표시되지 않습니다. AMI 소유자는 EC2 콘솔에서 사용 중지된 AMI를 계속 볼 수 있습니다.
+ AMI 사용자의 경우 사용 중지된 AMI 의 ID를 알고 있으면 API, CLI 또는 SDK를 통해 계속 사용 중지된 AMI를 사용하여 인스턴스를 시작할 수 있습니다.
+ 시작 템플릿 및 Auto Scaling 그룹과 같은 시작 서비스는 사용 중지된 AMI를 계속 참조할 수 있습니다.
+ 이후에 사용 중지된 AMI 사용하여 시작된 EC2 인스턴스는 영향을 받지 않으며 중지, 시작 및 재부팅할 수 있습니다.

프라이빗 및 퍼블릭 AMI를 모두 사용 중지할 수 있습니다.

**Topics**
+ [비용](#ami-deprecate-costs)
+ [고려 사항](#ami-deprecate-limitations)
+ [AMI 사용 중지](#deprecate-ami)
+ [사용 중지된 AMI 설명](#describe-deprecate-ami)
+ [AMI 사용 중단 취소](#cancel-deprecate-ami)

## 비용
<a name="ami-deprecate-costs"></a>

AMI를 사용 중지하더라도 해당 AMI는 삭제되지 않습니다. AMI 소유자는 AMI의 스냅샷에 대한 비용을 계속 지불합니다. 스냅샷에 대한 지불을 중지하려면 AMI 소유자가 AMI를 [등록 취소](deregister-ami.md)하여 삭제해야 합니다.

## 고려 사항
<a name="ami-deprecate-limitations"></a>
+ AMI를 사용 중지하려면 해당 AMI의 소유자여야 합니다.
+ 최근에 인스턴스를 시작하는 데 사용된 적이 없는 AMI는 사용을 중단하거나 등록을 해제(deregistering)하는 것이 좋습니다. 자세한 내용은 [Amazon EC2 AMI를 마지막으로 사용한 시점 확인](ami-last-launched-time.md) 섹션을 참조하세요.
+ Amazon Data Lifecycle Manager EBS 지원 AMI 정책을 생성하여 EBS 지원 AMI의 사용 중단을 자동화할 수 있습니다. 자세한 내용은 [AMI 수명 주기 정책 생성](https://docs.aws.amazon.com/ebs/latest/userguide/ami-policy.html)을 참조하세요.
+ 기본적으로 모든 퍼블릭 AMI의 사용 중단 날짜가 AMI 생성 날짜로부터 2년으로 설정됩니다. 사용 중단 날짜를 2년보다 짧게 설정할 수 있습니다. 사용 중단 날짜를 취소하거나 중단 날짜를 연장하려면 [특정 AWS 계정과 공유](sharingamis-explicit.md)만을 통해 AMI를 프라이빗으로 설정해야 합니다.

## AMI 사용 중지
<a name="deprecate-ami"></a>

특정 날짜 및 시간에 AMI를 사용 중지할 수 있습니다. AMI의 소유자여야 합니다.

사용 중단 날짜의 상한은 지금부터 10년입니다. 단, 상한이 생성 날짜로부터 2년인 퍼블릭 AMI는 예외입니다. 과거의 날짜는 지정할 수 없습니다.

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

**특정 날짜에 AMI 사용 중단**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색기에서 **AMI(AMIs)**를 선택합니다.

1. 필터 표시줄에서 **내 소유**를 선택합니다.

1. AMI를 선택하고 **작업(Actions)**, **AMI 사용 중단 관리(Manage AMI Deprecation)**를 선택합니다. 여러 AMI를 선택하여 한 번에 여러 AMI의 사용 중단 날짜를 동일하게 설정할 수 있습니다.

1. **활성화** 확인란을 선택한 다음 사용 중단 날짜 및 시간을 입력합니다.

1. **저장**을 선택합니다.

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

**특정 날짜에 AMI 사용 중단**  
[enable-image-deprecation](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-deprecation.html) 명령을 사용합니다. 초 단위로 값을 지정하면 Amazon EC2가 초를 가장 가까운 분으로 반올림합니다.

```
aws ec2 enable-image-deprecation \
    --image-id ami-0abcdef1234567890 \
    --deprecate-at "2025-04-15T13:17:12.000Z"
```

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

**특정 날짜에 AMI 사용 중단**  
[Enable-EC2ImageDeprecation](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageDeprecation.html) cmdlet을 사용합니다. 초 단위로 값을 지정하면 Amazon EC2가 초를 가장 가까운 분으로 반올림합니다.

```
Enable-EC2ImageDeprecation `
    -ImageId ami-0abcdef1234567890 `
    -DeprecateAt 2025-04-15T13:17:12.000Z
```

------

## 사용 중지된 AMI 설명
<a name="describe-deprecate-ami"></a>

AMI의 사용 중단 날짜 및 시간을 보고 사용 중단 날짜를 기준으로 AMI를 필터링할 수 있습니다.

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

**AMI의 사용 중단 날짜 보기**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색기에서 **AMI(AMIs)**를 선택한 후 AMI를 선택합니다.

1. **사용 중단 시간** 필드(AMI 옆에 있는 확인란을 선택한 경우 **세부 정보** 탭에 있음)를 확인합니다. 이 필드에는 AMI의 사용 중단 날짜 및 시간이 표시됩니다. 필드가 비어 있는 경우 AMI는 사용 중단되지 않습니다.

**사용 중단 날짜별로 AMI 필터링**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색기에서 **AMI(AMIs)**를 선택합니다.

1. 필터 표시줄에서 **내 소유(Owned by me)** 또는 **프라이빗 이미지(Private images)**를 선택합니다(프라이빗 이미지에는 사용자와 공유되는 AMI와 사용자가 소유한 AMI가 포함됨).

1. 검색 창에 **Deprecation time**을 입력한 다음(문자를 입력하면 **사용 중단 시간(Deprecation time)** 필터가 나타남) 연산자와 날짜 및 시간을 선택합니다.

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

모든 AMI를 설명하는 경우 본인이 AMI 사용자 또는 AMI 소유자인지에 따라 결과가 다릅니다.
+ **AMI 사용자** - 기본적으로 모든 AMI를 설명할 때 본인과 공유되지만 본인이 소유하지 않는 사용 중단된 AMI는 제외됩니다. 사용 중단된 AMI를 결과에 포함하려면 `--include-deprecated` 옵션을 지정합니다.
+ **AMI 소유자** - 모든 AMI를 설명할 때 사용 중단된 AMI를 포함하여 본인이 소유하는 모든 AMI가 포함됩니다. 본인이 소유하는 사용 중단된 AMI는 `--no-include-deprecated` 옵션을 사용하여 제외할 수 없습니다.

**계정에 대한 모든 AMI를 설명할 때 사용 중단된 AMI를 포함하는 방법**  
다음 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images 
    --owners 123456789012 \   
    --include-deprecated
```

**계정의 사용 중단된 AMI를 설명하는 방법**  
다음 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images \
    --owners self \
    --query "Images[?DeprecationTime!=null].ImageId" \
    --output text
```

다음은 예제 출력입니다.

```
ami-0abcdef1234567890
```

**AMI의 사용 중단 날짜 설명**  
다음 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다. `DeprecationTime`이 출력에 표시되지 않는 경우 AMI는 사용되지 않거나 향후 날짜에 사용되지 않도록 설정되어 있습니다.

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

다음은 예제 출력입니다.

```
2025-05-01T00:00:00.000Z
```

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

**계정의 사용 중단된 AMI를 나열하는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

```
(Get-EC2Image -Owner self | Where-Object {$_.DeprecationTime -ne $null}).ImageId
```

다음은 예제 출력입니다.

```
ami-0abcdef1234567890
```

**AMI의 사용 중단 날짜 설명**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다. `DeprecationTime`이 출력에 표시되지 않는 경우 AMI는 사용되지 않거나 향후 날짜에 사용되지 않도록 설정되어 있습니다.

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

다음은 예제 출력입니다.

```
2025-05-01T00:00:00.000Z
```

------

## AMI 사용 중단 취소
<a name="cancel-deprecate-ami"></a>

사용 중단 날짜 및 시간이 제거되므로 AMI 사용 중단은 취소할 수 있습니다. 이 절차를 수행하려면 AMI 소유자여야 합니다.

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

**AMI의 사용 중단 취소**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색기에서 **AMI(AMIs)**를 선택합니다.

1. 필터 표시줄에서 **내 소유**를 선택합니다.

1. AMI를 선택하고 **작업(Actions)**, **AMI 사용 중단 관리(Manage AMI Deprecation)**를 선택합니다. 여러 AMI를 선택하여 여러 AMI의 사용 중단을 한 번에 취소할 수 있습니다.

1. **활성화** 확인란을 선택 취소한 다음 **저장**을 선택합니다.

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

**AMI의 사용 중단 취소**  
다음 [disable-image-deprecation](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-deprecation.html) 명령을 사용합니다.

```
aws ec2 disable-image-deprecation --image-id ami-0abcdef1234567890
```

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

**AMI의 사용 중단 취소**  
[Disable-EC2ImageDeprecation](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageDeprecation.html) cmdlet을 사용합니다.

```
Disable-EC2ImageDeprecation -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI 비활성화
<a name="disable-an-ami"></a>

인스턴시 시작에 사용되지 않도록 AMI를 비활성화할 수 있습니다. 비활성화된 AMI에서는 새 인스턴스를 시작할 수 없습니다. 비활성화된 AMI를 다시 활성화하면 인스턴스 시작에 다시 사용할 수 있습니다.

프라이빗 및 퍼블릭 AMI를 모두 비활성화할 수 있습니다.

거의 사용하지 않지만 장기간 유지해야 하는 비활성화된 EBS 지원 AMI의 스토리지 비용을 줄이려면 관련 스냅샷을 아카이빙할 수 있습니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Archive Amazon EBS snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)를 참조하세요.

**Topics**
+ [AMI 비활성화 작동 방식](#how-disable-ami-works)
+ [비용](#ami-disable-costs)
+ [사전 조건](#ami-disable-prerequisites)
+ [필수 IAM 권한](#ami-disable-iam-permissions)
+ [AMI 비활성화](#disable-ami)
+ [비활성화된 AMI 설명](#describe-disabled-ami)
+ [비활성화된 AMI 다시 활성화](#re-enable-a-disabled-ami)

## AMI 비활성화 작동 방식
<a name="how-disable-ami-works"></a>

**주의**  
AMI를 비활성화하면 시작 권한이 모두 제거됩니다.

**AMI가 비활성화된 경우:**
+ AMI의 상태가 `disabled`로 변경됩니다.
+ 비활성화된 AMI는 공유될 수 없습니다. AMI가 퍼블릭 상태였거나 이전에 공유된 경우 프라이빗으로 전환됩니다. AMI가 AWS 계정, 조직 또는 조직 단위와 공유된 경우 비활성화된 이들은 AMI에 대한 액세스 권한을 잃게 됩니다.
+ 비활성화된 AMI는 기본적으로 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API 호출에 표시되지 않습니다.
+ 비활성화된 AMI는 **내 소유** 콘솔 필터 아래에 표시되지 않습니다. 비활성화된 AMI를 찾으려면 **비활성화된 이미지** 콘솔 필터를 사용합니다.
+ 비활성화된 AMI는 EC2 콘솔에서 인스턴스 시작 선택이 불가능합니다. 예를 들어 비활성화된 AMI는 시작 인스턴스 마법사의 AMI 카탈로그나 시작 템플릿을 생성할 때 표시되지 않습니다.
+ 시작 템플릿 및 Auto Scaling 그룹과 같은 시작 서비스는 비활성화된 AMI를 계속 참조할 수 있습니다. 비활성화된 AMI에서 후속 인스턴스를 시작하면 실패하므로 사용 가능한 AMI만 참조하도록 시작 템플릿과 Auto Scaling 그룹을 업데이트하는 것이 좋습니다.
+ 이후에 비활성화된 AMI 사용하여 시작되었던 EC2 인스턴스는 영향을 받지 않으며 중지, 시작 및 재부팅할 수 있습니다.
+ 비활성화된 AMI와 관련된 스냅샷은 삭제할 수 없습니다. 연결된 스냅샷을 삭제하려고 하면 `snapshot is currently in use` 오류가 발생합니다.

**AMI가 다시 활성화된 경우:**
+ AMI의 상태가 `available`로 변경되고, 이를 사용하여 인스턴스를 시작할 수 있습니다.
+ AMI가 공유될 수 있습니다.
+ 비활성화되었을 때 액세스 권한을 잃은 AWS 계정, 조직 및 조직 단위는 자동으로 액세스 권한을 획득하고, AMI가 다시 공유될 수 있습니다.

## 비용
<a name="ami-disable-costs"></a>

AMI를 비활성화하더라도 해당 AMI는 삭제되지 않습니다. AMI가 EBS 지원 AMI인 경우 AMI의 EBS 스냅샷에 대한 요금은 계속 지불합니다. AMI를 유지하려는 경우 스냅샷을 보관하여 스토리지 비용을 줄일 수 있습니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Archive Amazon EBS snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)를 참조하세요. AMI와 스냅샷을 보관하지 않으려면 AMI 등록을 취소하고 스냅샷을 삭제해야 합니다. 자세한 내용은 [AMI 등록 취소](deregister-ami.md) 섹션을 참조하세요.

## 사전 조건
<a name="ami-disable-prerequisites"></a>

AMI를 비활성화하거나 다시 활성화하려면 AMI의 소유자여야 합니다.

## 필수 IAM 권한
<a name="ami-disable-iam-permissions"></a>

AMI를 비활성화하고 다시 활성화하려면 다음 IAM 권한이 있어야 합니다.
+ `ec2:DisableImage`
+ `ec2:EnableImage`

## AMI 비활성화
<a name="disable-ami"></a>

EC2 콘솔 또는 AWS Command Line Interface(AWS CLI) 사용을 통해 AMI를 비활성화할 수 있습니다. 이 절차를 수행하려면 AMI 소유자여야 합니다.

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

**AMI 비활성화**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **AMI**를 선택합니다.

1. 필터 표시줄에서 **내 소유**를 선택합니다.

1. AMI를 선택한 다음 **작업**, **AMI 비활성화**를 선택합니다. 한 번에 여러 개의 AMI를 선택하여 비활성화할 수 있습니다.

1. **AMI 비활성화** 창에서 **AMI 비활성화**를 선택합니다.

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

**AMI 비활성화**  
다음 [https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image.html) 명령을 사용합니다.

```
aws ec2 disable-image --image-id ami-0abcdef1234567890
```

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

**AMI 비활성화**  
[Disable-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2Image.html) cmdlet을 사용합니다.

```
Disable-EC2Image -ImageId ami-0abcdef1234567890
```

------

## 비활성화된 AMI 설명
<a name="describe-disabled-ami"></a>

EC2 콘솔 또는 AWS CLI 사용을 통해 비활성화된 AMI를 볼 수 있습니다.

비활성화된 AMI를 보려면 AMI 소유자여야 합니다. 비활성화된 AMI는 프라이빗으로 전환되므로 소유자가 아닌 경우 비활성화된 AMI를 볼 수 없습니다.

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

**비활성화된 AMI 보기**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **AMI**를 선택합니다.

1. 필터 막대에서 **비활성화된 이미지**를 선택합니다.  
![\[비활성화된 이미지 필터\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami-filter-by-disabled-images.png)

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

기본적으로 모든 AMI를 설명하는 경우 비활성화된 AMI는 결과에 포함되지 않습니다. 비활성화된 AMI를 결과에 포함하려면 `--include-disabled` 옵션을 지정합니다. AMI가 비활성화된 경우 AMI의 `State` 필드는 `disabled`입니다.

**계정에 대한 모든 AMI를 설명할 때 비활성화된 AMI를 포함하는 방법**  
다음 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images \
    --owners 123456789012 \
    --include-disabled
```

**계정에 대한 비활성화된 AMI를 나열하는 방법**  
다음 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images \
    --owners self \
    --include-disabled \
    --filters Name=state,Values=disabled \
    --query Images[].ImageId \
    --output text
```

다음은 예제 출력입니다.

```
ami-0abcdef1234567890
```

**AMI 상태를 설명하는 방법**  
다음 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다. `DeprecationTime`이 출력에 표시되지 않는 경우 AMI는 사용되지 않거나 향후 날짜에 사용되지 않도록 설정되어 있습니다.

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

다음은 예제 출력입니다.

```
disabled
```

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

기본적으로 모든 AMI를 설명하는 경우 비활성화된 AMI는 결과에 포함되지 않습니다. 비활성화된 AMI를 결과에 포함하려면 `-IncludeDisabled` 파라미터를 지정합니다. AMI가 비활성화된 경우 AMI의 `State` 필드는 `disabled`입니다.

**계정에 대한 비활성화된 AMI를 나열하는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

```
(Get-EC2Image `
    -Owner self `
    -IncludeDisabled $true | Where-Object {$_.State -eq "disabled"}).ImageId
```

다음은 예제 출력입니다.

```
ami-0abcdef1234567890
```

**AMI 상태를 설명하는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

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

다음은 예제 출력입니다.

```
disabled
```

------

## 비활성화된 AMI 다시 활성화
<a name="re-enable-a-disabled-ami"></a>

비활성화된 AMI를 다시 활성화할 수 있습니다. 이 절차를 수행하려면 AMI 소유자여야 합니다.

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

**비활성화된 AMI 다시 활성화**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **AMI**를 선택합니다.

1. 필터 막대에서 **비활성화된 이미지**를 선택합니다.

1. AMI를 선택한 다음 **작업**, **AMI 활성화**를 선택합니다. 여러 AMI를 선택하여 여러 AMI를 한 번에 다시 활성화할 수 있습니다.

1. **AMI 활성화** 창에서 **활성화**를 선택합니다.

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

**비활성화된 AMI 다시 활성화**  
다음 [https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image.html) 명령을 사용합니다.

```
aws ec2 enable-image --image-id ami-0abcdef1234567890
```

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

**비활성화된 AMI 다시 활성화**  
[Enable-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2Image.html) cmdlet을 사용합니다.

```
Enable-EC2Image -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 AMI 등록 취소
<a name="deregister-ami"></a>

AMI를 등록 취소하면 Amazon EC2에서 AMI를 영구적으로 삭제합니다. AMI의 등록을 취소한 이후에는 새 인스턴스를 시작하기 위해 해당 AMI를 사용하는 것은 불가능합니다. AMI 사용을 마쳤으면 AMI의 등록을 취소할 수 있습니다.

우발적이거나 악의적인 AMI 등록 취소를 방지하기 위해 [등록 취소 보호](ami-deregistration-protection.md)를 활성화할 수 있습니다. 실수로 EBS 지원 AMI를 등록 취소한 경우 영구 삭제되기 전에 허용된 기간에 복원하는 경우에만 [휴지통](https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin.html)을 사용하여 복원할 수 있습니다.

AMI 등록을 취소할 때 연결된 스냅샷을 선택적으로 동시에 삭제할 수 있습니다. 다만 여러 AMI와 연결된 스냅샷은 삭제하도록 지정된 경우에도 삭제되지 않지만 AMI는 여전히 등록 취소됩니다. 삭제되지 않은 스냅샷에서는 계속 스토리지 비용이 발생합니다.

AMI를 시작한 인스턴스에서는 AMI를 등록 취소해도 영향을 받지 않습니다. 이러한 인스턴스는 계속 사용할 수 있습니다. 기본적으로 AMI 등록 취소는 AMI 생성 프로세스 중에 생성된 스냅샷에 영향을 주지 않습니다. 이러한 인스턴스에 대한 사용 비용과 스냅샷에 대한 스토리지 비용은 계속 발생합니다. 따라서 불필요한 비용이 발생하지 않도록 필요하지 않는 스냅샷을 삭제하고 인스턴스를 종료하는 것이 좋습니다. 등록 취소 중에 자동으로 스냅샷을 삭제하거나 등록 취소 후에 수동으로 스냅샷을 삭제할 수 있습니다. 자세한 내용은 [사용하지 않는 리소스로 인한 비용 방지](#delete-unneeded-resources-to-avoid-unnecessary-costs) 섹션을 참조하세요.

이후 등록이 취소된 AMI에서 시작된 인스턴스의 경우에도 `describe-instance-image-metadata` AWS CLI 명령을 사용하여 AMI에 대한 몇 가지 개략적인 정보를 볼 수 있습니다. 자세한 내용은 [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) 섹션을 참조하세요.

**Topics**
+ [고려 사항](#deregister-ami-considerations)
+ [AMI 등록 취소](#deregister-an-ami)
+ [사용하지 않는 리소스로 인한 비용 방지](#delete-unneeded-resources-to-avoid-unnecessary-costs)
+ [등록 취소로부터 Amazon EC2 AMI 보호](ami-deregistration-protection.md)

## 고려 사항
<a name="deregister-ami-considerations"></a>
+ 계정이 소유하지 않은 AMI는 등록 취소할 수 없습니다.
+ AWS Backup 서비스에서 관리하는 AMI를 등록 취소하는 데 Amazon EC2를 사용할 수 없습니다. 대신 AWS Backup을 사용하여 백업 볼트의 해당 복구 지점을 삭제합니다. 자세한 내용은 AWS Backup 개발자 안내서**의 [백업 삭제](https://docs.aws.amazon.com/aws-backup/latest/devguide/deleting-backups.html)를 참조하세요.

## AMI 등록 취소
<a name="deregister-an-ami"></a>

EBS 지원 AMI와 Amazon S3 지원 AMI를 등록 취소할 수 있습니다. EBS 지원 AMI의 경우 연결된 스냅샷을 선택적으로 동시에 삭제할 수 있습니다. 그러나 스냅샷이 다른 AMI와 연결된 경우 삭제하도록 지정된 경우에도 스냅샷은 삭제되지 않습니다.

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

**AMI 등록 해제**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. 필터 막대에서 **내 소유**를 선택하여 사용 가능한 AMI를 나열하거나 **비활성화된 이미지**를 선택하여 비활성화된 AMI를 나열합니다.

1. 등록 취소할 AMI를 선택합니다.

1. **작업(Actions)**, **AMI 등록 취소(AMI Deregister)**를 선택합니다.

1. (선택 사항) 등록 취소 중에 연결된 스냅샷을 삭제하려면 **연결된 스냅샷 삭제** 확인란을 선택합니다.
**참고**  
스냅샷이 다른 AMI와 연결된 경우 확인란을 선택하더라도 스냅샷은 삭제되지 않습니다.

1. **AMI 등록 취소**를 선택합니다.

   콘솔이 목록에서 AMI를 제거하는 데 몇 분 정도 걸릴 수 있습니다. 상태를 새로 고치려면 **새로 고침**을 선택합니다.

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

**AMI 등록 해제**  
다음 [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) 명령을 사용합니다.

```
aws ec2 deregister-image --image-id ami-0abcdef1234567890
```

**AMI 등록을 취소하고 연결된 스냅샷을 삭제하려면**  
다음 [deregister-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/deregister-image.html) 명령을 사용하고 `--delete-associated-snapshots` 파라미터를 지정합니다. 스냅샷이 다른 AMI와 연결된 경우 이 파라미터를 지정하더라도 스냅샷은 삭제되지 않습니다.

```
aws ec2 deregister-image \
    --image-id ami-0abcdef1234567890 \
    --delete-associated-snapshots
```

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

**AMI 등록 해제**  
[Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) cmdlet을 사용합니다.

```
Unregister-EC2Image -ImageId ami-0abcdef1234567890
```

**AMI 등록을 취소하고 연결된 스냅샷을 삭제하려면**  
[Unregister-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2Image.html) cmdlet을 사용하고 `-DeleteAssociatedSnapshots` 파라미터를 지정합니다. 스냅샷이 다른 AMI와 연결된 경우 이 파라미터를 지정하더라도 스냅샷은 삭제되지 않습니다.

```
Unregister-EC2Image `
    -ImageId ami-0abcdef1234567890 `
    -DeleteAssociatedSnapshots
```

------

## 사용하지 않는 리소스로 인한 비용 방지
<a name="delete-unneeded-resources-to-avoid-unnecessary-costs"></a>

AMI를 등록 취소하더라도 기본적으로 AMI와 연결된 리소스가 모두 삭제되지는 않습니다. 이러한 리소스로는 EBS 지원 AMI에 대한 스냅샷 및 Amazon S3 지원 AMI에 대한 Amazon S3의 파일이 포함됩니다. AMI를 등록 취소할 때 AMI에서 시작된 인스턴스는 종료 또는 중지되지 않습니다.

스냅샷과 파일을 저장하는 비용은 계속 발생하고 실행 중인 인스턴스에 대한 비용도 발생합니다.

이러한 유형의 불필요한 비용을 방지하려면 필요하지 않은 리소스를 삭제하는 것이 좋습니다.

**EBS-backed AMI**
+ AMI 등록을 취소하면서 연결된 스냅샷을 삭제합니다. 자세한 내용은 [AMI 등록 취소](#deregister-an-ami) 섹션을 참조하세요.
+ 연결된 스냅샷을 삭제하지 않고 AMI 등록을 취소하는 경우 수동으로 [스냅샷을 삭제할 수 있습니다](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-snapshot.html#ebs-delete-snapshot). AMI 생성 중에 생성된 인스턴스 루트 볼륨의 스냅샷은 다음과 같은 설명 형식을 갖습니다.

  ```
  Created by CreateImage(i-1234567890abcdef0) for ami-0abcdef1234567890
  ```
+ AMI에서 시작된 인스턴스가 더는 필요하지 않은 경우 해당 인스턴스를 [중지](Stop_Start.md#starting-stopping-instances)하거나 [종료](terminating-instances.md#terminating-instances-console)할 수 있습니다. 인스턴스를 나열하려면 AMI의 ID 기준으로 필터링합니다.

**Amazon S3 지원 AMI**
+ [ec2-delete-bundle](ami-tools-commands.md#ami-delete-bundle)(AMI 도구) 명령을 사용하여 Amazon S3에서 번들을 삭제합니다.
+ 번들을 삭제한 후 Amazon S3 버킷이 비어 있고 해당 버킷을 더는 사용하지 않는다면 [버킷을 삭제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)할 수 있습니다.
+ AMI에서 시작된 인스턴스가 더는 필요하지 않은 경우 해당 인스턴스를 [종료](terminating-instances.md#terminating-instances-console)할 수 있습니다. 인스턴스를 나열하려면 AMI의 ID 기준으로 필터링합니다.

# 등록 취소로부터 Amazon EC2 AMI 보호
<a name="ami-deregistration-protection"></a>

AMI에서 *등록 취소 보호*를 켜서 우발적이거나 악의적인 삭제를 방지할 수 있습니다. 등록 취소 보호를 켜면 IAM 권한이 상관없이 사용자는 AMI를 등록 취소할 수 없습니다. AMI를 등록 취소하려면 먼저 등록 취소 보호를 꺼야 합니다.

AMI에서 등록 취소 보호를 켤 때 24시간의 휴지 기간을 포함하는 옵션이 제공됩니다. 이 휴지 기간은 이 기능을 끈 후에도 등록 취소 보호가 계속 적용되는 기간입니다. 이 휴지 기간에는 AMI 등록을 취소할 수 없습니다. 휴지 기간이 끝나면 AMI를 등록 취소할 수 있습니다.

등록 취소 보호는 모든 기존 및 신규 AMI에서 기본적으로 꺼져 있습니다.

## 등록 취소 보호 켜기
<a name="enable-deregistration-protection"></a>

등록 취소 보호를 켜려면 다음 절차를 따르세요.

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

**등록 취소 보호를 켜는 방법**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. 필터 막대에서 **내 소유**를 선택하여 사용 가능한 AMI를 나열하거나 **비활성화된 이미지**를 선택하여 비활성화된 AMI를 나열합니다.

1. 등록 취소 보호를 켜려는 AMI를 선택하고 **작업**, **AMI 등록 취소 보호 관리**를 선택합니다.

1. **AMI 등록 취소 보호 관리** 대화 상자에서 휴지 기간을 포함하거나 포함하지 않고 등록 취소 보호를 켤 수 있습니다. 다음 옵션 중 하나를 선택하세요.
   + **24시간의 휴지 기간을 포함하여 활성화** - 휴지 기간이 포함된 경우 등록 취소 보호가 꺼진 후에도 24시간 동안 AMI 등록을 취소할 수 없습니다.
   + **휴지 기간 없이 활성화** - 휴지 기간이 없으면 등록 취소 보호가 꺼진 후 즉시 AMI를 등록 취소할 수 있습니다.

1. **저장**을 선택합니다.

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

**등록 취소 보호를 켜는 방법**  
[enable-image-deregistration-protection](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-deregistration-protection.html) 명령을 사용합니다. 선택적 휴지 기간을 활성화하려면 `--with-cooldown` 옵션을 포함합니다.

```
aws ec2 enable-image-deregistration-protection \
    --image-id ami-0abcdef1234567890 \
    --with-cooldown
```

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

**등록 취소 보호를 켜는 방법**  
[Enable-EC2ImageDeregistrationProtection](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageDeregistrationProtection.html) cmdlet을 사용합니다. 선택적 휴지 기간을 활성화하려면 `-WithCooldown` 파라미터를 `true`로 설정합니다.

```
Enable-EC2ImageDeregistrationProtection `
    -ImageId ami-0abcdef1234567890 `
    -WithCooldown $true
```

------

## 등록 취소 보호 끄기
<a name="disable-deregistration-protection"></a>

등록 취소 보호를 끄려면 다음 절차를 따르세요.

AMI에 대한 등록 취소 보호를 켤 때 24시간의 휴지 기간을 포함하도록 선택한 경우 등록 취소 보호를 꺼도 즉시 AMI를 등록 취소할 수 없습니다. 휴지 기간은 24시간이며, 이 기간에 이 기능을 끈 후에도 등록 취소 보호가 계속 적용됩니다. 이 휴지 기간에는 AMI 등록을 취소할 수 없습니다. 휴지 기간이 끝난 후 AMI를 등록 취소할 수 있습니다.

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

**등록 취소 보호를 끄는 방법**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. 필터 막대에서 **내 소유**를 선택하여 사용 가능한 AMI를 나열하거나 **비활성화된 이미지**를 선택하여 비활성화된 AMI를 나열합니다.

1. 등록 취소 보호를 끄려는 AMI를 선택하고 **작업**, **AMI 등록 취소 보호 관리**를 선택합니다.

1. **AMI 등록 취소 보호 관리** 대화 상자에서 **비활성화**를 선택합니다.

1. **저장**을 선택합니다.

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

**등록 취소 보호를 끄는 방법**  
[disable-image-deregistration-protection](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-deregistration-protection.html) 명령을 사용합니다.

```
aws ec2 disable-image-deregistration-protection --image-id ami-0abcdef1234567890
```

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

**등록 취소 보호를 끄는 방법**  
[Disable-EC2ImageDeregistrationProtection](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageDeregistrationProtection.html) cmdlet을 사용합니다.

```
Disable-EC2ImageDeregistrationProtection -ImageId ami-0abcdef1234567890
```

------

# Amazon EC2 부팅 모드를 사용한 인스턴스 시작 동작
<a name="ami-boot"></a>

컴퓨터가 부팅될 때 실행되는 첫 번째 소프트웨어는 플랫폼을 초기화하고 운영 체제가 플랫폼별 작업을 수행할 수 있는 인터페이스를 제공합니다.

Amazon EC2에서는 부팅 모드 소프트웨어의 두 가지 변형, 즉 통합 확장 가능 펌웨어 인터페이스(UEFI)와 레거시 BIOS입니다.

**AMI에서 가능한 부팅 모드 파라미터**  
AMI는 부트 모드 파라미터 값인 `uefi`, `legacy-bios` 또는 `uefi-preferred` 중에서 하나를 가질 수 있습니다. AMI 부트 모드 파라미터는 선택 사항입니다. 부팅 모드 파라미터가 없는 AMI의 경우 이러한 AMI에서 시작된 인스턴스는 인스턴스 유형의 기본 부팅 모드 값을 사용합니다.

**AMI 부팅 모드 파라미터의 목적**  
AMI 부팅 모드 파라미터는 인스턴스를 시작할 때 사용할 부팅 모드를 Amazon EC2에 알립니다. 부팅 모드 파라미터가 `uefi`로 설정되면 EC2는 인스턴스를 UEFI에서 시작하려고 시도합니다. 운영 체제가 UEFI를 지원하도록 구성되지 않은 경우에는 인스턴스 시작에 실패할 수 있습니다.

**UEFI 기본 부팅 모드 파라미터**  
`uefi-preferred` 부팅 모드 파라미터를 사용하여 UEFI와 레거시 BIOS를 모두 지원하는 AMI를 생성할 수 있습니다. 부팅 모드 파라미터가 `uefi-preferred`로 설정되고 인스턴스 유형이 UEFI를 지원하는 경우 인스턴스가 UEFI에서 시작됩니다. 인스턴스 유형이 UEFI를 지원하지 않는 경우 인스턴스는 레거시 BIOS에서 시작됩니다.

**주의**  
UEFI 보안 부팅과 같은 일부 기능은 UEFI에서 부팅하는 인스턴스에서만 사용할 수 있습니다. UEFI를 지원하지 않는 인스턴스 유형과 함께 `uefi-preferred` AMI 부팅 모드 파라미터를 사용하면 인스턴스가 레거시 BIOS로 시작되고 UEFI 종속 기능이 비활성화됩니다. UEFI 종속 기능의 가용성에 의존하는 경우 AMI 부팅 모드 파라미터를 `uefi`로 설정하세요.

**인스턴스 유형별 기본 부팅 모드**
+ Graviton 인스턴스 유형: UEFI
+ 인텔 및 AMD 인스턴스 유형: 레거시 BIOS

**영역 지원**  
UEFI 부팅은 Wavelength Zone에서 지원되지 않습니다.

**Topics**
+ [UEFI 부팅 모드에서 EC2 인스턴스를 시작하기 위한 요구 사항](launch-instance-boot-mode.md)
+ [Amazon EC2 AMI의 부팅 모드 파라미터 결정](ami-boot-mode.md)
+ [EC2 인스턴스 유형의 지원되는 부팅 모드 결정](instance-type-boot-mode.md)
+ [EC2 인스턴스의 부팅 모드 결정](instance-boot-mode.md)
+ [EC2 인스턴스에 대한 운영 체제의 부팅 모드 결정](os-boot-mode.md)
+ [Amazon EC2 AMI의 부팅 모드 설정](set-ami-boot-mode.md)
+ [Amazon EC2 인스턴스의 UEFI 변수](uefi-variables.md)
+ [Amazon EC2 인스턴스의 UEFI 보안 부팅](uefi-secure-boot.md)

# UEFI 부팅 모드에서 EC2 인스턴스를 시작하기 위한 요구 사항
<a name="launch-instance-boot-mode"></a>

인스턴스의 부팅 모드는 AMI의 구성, 인스턴스에 포함된 운영 체제, 인스턴스 유형에 따라 결정됩니다. UEFI 부팅 모드에서 인스턴스를 시작하려면 다음 요구 사항을 충족해야 합니다.

**AMI**  
AMI는 UEFI에 대해 다음과 같이 구성되어야 합니다.  
+ **운영 체제** – AMI에 포함된 운영 체제는 UEFI를 사용할 수 있도록 구성해야 합니다. 그렇지 않으면 인스턴스 시작에 실패합니다. 자세한 내용은 [EC2 인스턴스에 대한 운영 체제의 부팅 모드 결정](os-boot-mode.md) 섹션을 참조하세요.
+ **AMI 부팅 모드 파라미터** – AMI의 부팅 모드 파라미터를 `uefi` 또는 `uefi-preferred`로 설정해야 합니다. 자세한 내용은 [Amazon EC2 AMI의 부팅 모드 파라미터 결정](ami-boot-mode.md) 섹션을 참조하세요.
**Linux** - 다음 Linux AMI는 UEFI를 지원합니다.  
+ Amazon Linux 2023
+ Amazon Linux 2(Graviton 인스턴스 유형만 해당)
다른 Linux AMI의 경우 [AMI를 구성](set-ami-boot-mode.md)하거나, [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/)를 통해 AMI를 가져오거나, [CloudEndure](https://docs.cloudendure.com/)를 통해 AMI를 가져와야 합니다.  
**Windows** – 다음 Windows AMI는 UEFI를 지원합니다.  
+ Windows\$1Server-2025-\$1(`BIOS-` 이름 접두사가 있는 AMI 제외)
+ TPM-Windows\$1Server-2022-English-Full-Base
+ TPM-Windows\$1Server-2022-English-Core-Base
+ TPM-Windows\$1Server-2019-English-Full-Base
+ TPM-Windows\$1Server-2019-English-Core-Base
+ TPM-Windows\$1Server-2016-English-Full-Base
+ TPM-Windows\$1Server-2016-English-Core-Base

**인스턴스 유형**  
AWS Nitro 시스템에 구축된 모든 인스턴스는 UEFI와 레거시 BIOS를 모두 지원합니다. 단, 베어 메탈 인스턴스, DL1, G4ad, P4, u-3tb1, u-6tb1, u-9tb1, u-12tb1, u-18tb1, u-24tb1 및 VT1은 예외입니다. 자세한 내용은 [EC2 인스턴스 유형의 지원되는 부팅 모드 결정](instance-type-boot-mode.md) 섹션을 참조하세요.

다음 표에서는 인스턴스의 부팅 모드(**결과 인스턴스 부팅 모드** 열로 표시됨)가 AMI의 부팅 모드 파라미터(열 1), AMI에 포함된 운영 체제의 부팅 모드 구성(열 2), 인스턴스 유형의 부팅 모드 지원(열 3)을 조합하여 결정된다는 것을 보여줍니다.


| AMI 부팅 모드 파라미터 | 운영 체제 부팅 모드 구성 | 인스턴스 유형 부팅 모드 지원 | 결과 인스턴스 부팅 모드 | 
| --- | --- | --- | --- | 
| UEFI | UEFI | UEFI | UEFI | 
| 레거시 BIOS | 레거시 BIOS | 레거시 BIOS | 레거시 BIOS | 
| UEFI 기본 | UEFI | UEFI | UEFI | 
| UEFI 기본 | UEFI | UEFI 및 레거시 BIOS | UEFI | 
| UEFI 기본 | 레거시 BIOS | 레거시 BIOS | 레거시 BIOS | 
| UEFI 기본 | 레거시 BIOS | UEFI 및 레거시 BIOS | 레거시 BIOS | 
| 부팅 모드가 지정되지 않음 - ARM | UEFI | UEFI | UEFI | 
| 부팅 모드가 지정되지 않음 - x86 | 레거시 BIOS | UEFI 및 레거시 BIOS | 레거시 BIOS | 

# Amazon EC2 AMI의 부팅 모드 파라미터 결정
<a name="ami-boot-mode"></a>

AMI 부트 모드 파라미터는 선택 사항입니다. AMI는 부트 모드 파라미터 값인 `uefi`, `legacy-bios` 또는 `uefi-preferred` 중에서 하나를 가질 수 있습니다.

일부 AMI에는 부트 모드 파라미터가 없습니다. AMI에 부트 모드 파라미터가 없으면 AMI에서 시작된 인스턴스는 인스턴스 유형의 기본값(Graviton의 경우에 `uefi`, Intel 및 AMD 인스턴스 유형의 경우에 `legacy-bios`)을 사용합니다.

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

**AMI의 부팅 모드 파라미터를 확인하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택한 후에 AMI를 선택합니다.

1. **부트 모드** 필드를 검사합니다.
   + **uefi** 값은 UEFI가 AMI에서 지원된다는 것을 나타냅니다.
   + **uefi-preferred** 값은 UEFI와 레거시 BIOS가 모두 AMI에서 지원된다는 것을 나타냅니다.
   + 값이 없으면 AMI에서 시작된 인스턴스에서는 인스턴스 유형의 기본값을 사용합니다.

**인스턴스 시작 시 AMI의 부팅 모드 파라미터를 확인하려면**  
인스턴스 시작 마법사를 사용하여 인스턴스를 시작하는 경우에는 AMI를 선택하는 단계에서 **부트 모드** 필드를 검사합니다. 자세한 내용은 [애플리케이션 및 OS 이미지(Amazon Machine Image)](ec2-instance-launch-parameters.md#liw-ami) 섹션을 참조하세요.

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

**AMI의 부팅 모드 파라미터를 확인하려면**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용하여 AMI의 부팅 모드를 확인합니다.

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-id ami-0abcdef1234567890 \
    --query Images[].BootMode \
    --output text
```

다음은 예제 출력입니다.

```
uefi
```

출력에서 `uefi` 값은 AMI가 UEFI를 지원함을 나타냅니다. `uefi-preferred` 값은 AMI가 UEFI와 레거시 BIOS를 지원함을 나타냅니다. 값이 없으면 AMI에서 시작된 인스턴스에서는 인스턴스 유형의 기본값을 사용합니다.

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

**AMI의 부팅 모드 파라미터를 확인하려면**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용하여 AMI의 부팅 모드를 확인합니다.

```
Get-EC2Image -Region us-east-1 `
    -ImageId ami-0abcdef1234567890 | Format-List Name, BootMode, TpmSupport
```

다음은 예제 출력입니다.

```
Name       : TPM-Windows_Server-2016-English-Full-Base-2023.05.10
BootMode   : uefi
TpmSupport : v2.0
```

출력에서 `BootMode` 값은 AMI의 부팅 모드를 나타냅니다. `uefi` 값은 AMI가 UEFI를 지원함을 나타냅니다. `uefi-preferred` 값은 AMI가 UEFI와 레거시 BIOS를 지원함을 나타냅니다. 값이 없으면 AMI에서 시작된 인스턴스에서는 인스턴스 유형의 기본값을 사용합니다.

------

# EC2 인스턴스 유형의 지원되는 부팅 모드 결정
<a name="instance-type-boot-mode"></a>

인스턴스 유형의 지원되는 부팅 모드를 확인할 수 있습니다.

Amazon EC2 콘솔에는 인스턴스 유형의 지원되는 부팅 모드가 표시되지 않습니다.

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

[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 명령을 사용하여 인스턴스 유형의 지원되는 부팅 모드를 결정합니다. `--query` 파라미터는 지원되는 부팅 모드만 반환하도록 출력을 필터링합니다.

다음 예제에서는 지정된 인스턴스 유형이 UEFI 및 레거시 BIOS 부팅 모드를 모두 지원합니다.

```
aws ec2 describe-instance-types \
    --instance-types m5.2xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

다음은 예제 출력입니다.

```
[
    [
        "legacy-bios",
        "uefi"
    ]
]
```

다음 예시에서는 레거시 BIOS만 지원하는 `t2.xlarge`를 보여 줍니다.

```
aws ec2 describe-instance-types \
    --instance-types t2.xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

다음은 예제 출력입니다.

```
[
    [
        "legacy-bios"
    ]
]
```

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

[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet을 사용하여 인스턴스 유형의 지원되는 부팅 모드를 확인합니다.

다음 예시에서는 `m5.2xlarge`가 UEFI 및 레거시 BIOS 부트 모드를 모두 지원하는 사례를 보여줍니다.

```
Get-EC2InstanceType -InstanceType m5.2xlarge | Format-List InstanceType, SupportedBootModes
```

다음은 예제 출력입니다.

```
InstanceType       : m5.2xlarge
SupportedBootModes : {legacy-bios, uefi}
```

다음 예시에서는 레거시 BIOS만 지원하는 `t2.xlarge`를 보여 줍니다.

```
Get-EC2InstanceType -InstanceType t2.xlarge | Format-List InstanceType, SupportedBootModes
```

다음은 예제 출력입니다.

```
InstanceType       : t2.xlarge
SupportedBootModes : {legacy-bios}
```

------

**UEFI를 지원하는 인스턴스 유형을 확인하려면 다음을 수행하세요.**  
UEFI를 지원하는 인스턴스 유형을 확인할 수 있습니다. Amazon EC2 콘솔에는 인스턴스 유형의 UEFI 지원이 표시되지 않습니다.

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

사용 가능한 인스턴스 유형은 AWS 리전마다 다릅니다. 리전에서 UEFI를 지원하는 사용 가능한 인스턴스 유형을 확인하려면 [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 명령을 사용합니다. UEFI를 지원하는 인스턴스 유형으로 결과 범위를 지정하려면 `--filters` 파라미터를 포함하고 `InstanceType` 값으로 출력 범위를 지정하려면 `--query` 파라미터를 포함합니다.

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi \
    --query "InstanceTypes[*].[InstanceType]" --output text | sort
```

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

사용 가능한 인스턴스 유형은 AWS 리전마다 다릅니다. 리전에서 UEFI를 지원하는 사용 가능한 인스턴스 유형을 확인하려면 [Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet을 사용합니다.

```
Get-EC2InstanceType | `
	Where-Object {$_.SupportedBootModes -Contains "uefi"} | `
	Sort-Object InstanceType | `
	Format-Table InstanceType -GroupBy CurrentGeneration
```

------

**UEFI 보안 부팅을 지원하고 비휘발성 변수를 유지하는 인스턴스 유형을 확인하려면 다음을 수행하세요.**  
베어 메탈 인스턴스는 UEFI 보안 부팅과 비휘발성 변수를 지원하지 않으므로 다음 예제에서는 해당 인스턴스가 출력에서 제외됩니다. UEFI 보안 부팅에 관한 자세한 내용은 [Amazon EC2 인스턴스의 UEFI 보안 부팅](uefi-secure-boot.md) 섹션을 참조하세요.

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

[describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 명령을 사용하고 출력에서 ​​베어 메탈 인스턴스를 제외합니다.

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi Name=bare-metal,Values=false \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
```

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

[Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) cmdlet을 사용하고 출력에서 베어 메탈 인스턴스를 제외합니다.

```
Get-EC2InstanceType | `
    Where-Object { `
        $_.SupportedBootModes -Contains "uefi" -and `
        $_.BareMetal -eq $False
        } | `
    Sort-Object InstanceType  | `
    Format-Table InstanceType, SupportedBootModes, BareMetal, `
        @{Name="SupportedArchitectures"; Expression={$_.ProcessorInfo.SupportedArchitectures}}
```

------

# EC2 인스턴스의 부팅 모드 결정
<a name="instance-boot-mode"></a>

인스턴스의 부팅 모드는 Amazon EC2 콘솔의 **부팅 모드** 필드에 표시되며 AWS CLI에 `currentInstanceBootMode` 파라미터별로 표시됩니다.

인스턴스가 시작되면 부팅 모드 파라미터 값은 인스턴스를 시작하는 데 사용된 AMI의 부팅 모드 파라미터 값에 따라 다음과 같이 결정됩니다.
+ 부팅 모드 파라미터가 `uefi`인 AMI는 `currentInstanceBootMode` 파라미터가 `uefi`인 인스턴스를 생성합니다.
+ 부팅 모드 파라미터가 `legacy-bios`인 AMI는 `currentInstanceBootMode` 파라미터가 ` legacy-bios`인 인스턴스를 생성합니다.
+ 부팅 모드 파라미터가 `uefi-preferred`인 AMI는 인스턴스 유형이 UEFI를 지원하는 경우 `currentInstanceBootMode` 파라미터가 `uefi`인 인스턴스를 생성하고, 그렇지 않으면 `currentInstanceBootMode` 파라미터가 `legacy-bios`인 인스턴스를 생성합니다.
+ 부팅 모드 파라미터 값이 없는 AMI는 AMI 아키텍처가 ARM인지 x86인지 여부와 인스턴스 유형에서 지원되는 부팅 모드에 따라 달라지는 `currentInstanceBootMode` 파라미터 값을 가진 인스턴스를 생성합니다. 기본 부팅 모드는 Graviton 인스턴스 유형에서 `uefi`, Intel 및 AMD 인스턴스 유형에서 `legacy-bios`입니다.

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

**인스턴스의 부팅 모드를 확인하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택한 다음 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 **부팅 모드** 필드를 검사합니다.

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

**인스턴스의 부팅 모드를 확인하려면**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 명령을 사용하여 인스턴스의 부팅 모드를 결정합니다. 또한 인스턴스 생성에 사용된 AMI의 부팅 모드를 결정할 수 있습니다.

```
aws ec2 describe-instances \
    --region us-east-1 \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].BootMode \
    --output text
```

다음은 예제 출력입니다.

```
uefi
```

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

**인스턴스의 부팅 모드를 확인하려면**  
[https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet을 사용하여 인스턴스의 부팅 모드를 확인합니다. 또한 인스턴스 생성에 사용된 AMI의 부팅 모드를 결정할 수 있습니다.

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | Format-List BootMode, CurrentInstanceBootMode, InstanceType, ImageId
```

다음은 예제 출력입니다.

```
BootMode                : uefi
CurrentInstanceBootMode : uefi
InstanceType            : c5a.large
ImageId                 : ami-0abcdef1234567890
```

------

# EC2 인스턴스에 대한 운영 체제의 부팅 모드 결정
<a name="os-boot-mode"></a>

AMI의 부팅 모드는 인스턴스를 부팅하는 데 사용할 부팅 모드를 Amazon EC2에 안내합니다. 인스턴스의 운영 체제가 UEFI에 맞게 구성되어 있는지 확인하려면 SSH(Linux 인스턴스) 또는 RDP(Windows 인스턴스)를 사용하여 인스턴스에 연결해야 합니다.

인스턴스 운영 체제에 대한 지침을 사용하세요.

## Linux
<a name="os-boot-mode-linux"></a>

**인스턴스 운영 체제의 부팅 모드 확인**

1. [SSH를 사용하여 Linux 인스턴스에 연결합니다](connect-linux-inst-ssh.md).

1. 운영 체제의 부팅 모드를 보려면 다음 중 하나를 시도해 보세요.
   + 다음 명령을 실행합니다.

     ```
     [ec2-user ~]$ sudo /usr/sbin/efibootmgr
     ```

     UEFI 부팅 모드로 부팅된 인스턴스의 예상 출력

     ```
     BootCurrent: 0001
     Timeout: 0 seconds
     BootOrder: 0000,0001
     Boot0000* UiApp
     Boot0001* UEFI Amazon Elastic Block Store vol-xyz
     ```
   + `/sys/firmware/efi` 디렉터리의 존재를 확인하려면 다음 명령을 실행합니다. 이 디렉터리는 인스턴스가 UEFI를 사용하여 부팅하는 경우에만 존재합니다. 디렉터리가 없으면 명령이 `Legacy BIOS Boot Detected`을(를) 반환합니다.

     ```
     [ec2-user ~]$ [ -d /sys/firmware/efi ] && echo "UEFI Boot Detected" || echo "Legacy BIOS Boot Detected"
     ```

     UEFI 부팅 모드로 부팅된 인스턴스의 예상 출력

     ```
     UEFI Boot Detected
     ```

     레거시 BIOS 부팅 모드로 부팅된 인스턴스의 예상 출력

     ```
     Legacy BIOS Boot Detected
     ```
   + 다음 명령을 실행하여 EFI가 `dmesg` 출력에 표시되는지 확인합니다.

     ```
     [ec2-user ~]$ dmesg | grep -i "EFI"
     ```

     UEFI 부팅 모드로 부팅된 인스턴스의 예상 출력

     ```
     [    0.000000] efi: Getting EFI parameters from FDT:
     [    0.000000] efi: EFI v2.70 by EDK II
     ```

## Windows
<a name="os-boot-mode-windows"></a>

**인스턴스 운영 체제의 부팅 모드 확인**

1. [RDP를 사용하여 Windows 인스턴스에 연결합니다](connecting_to_windows_instance.md).

1. **시스템 정보**로 이동하여 **BIOS 모드** 행을 확인합니다.  
![\[선택한 BIOS 모드 행을 보여주는 시스템 정보 창입니다. BIOS 모드의 값은 레거시입니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/BIOS-mode-win.png)

# Amazon EC2 AMI의 부팅 모드 설정
<a name="set-ami-boot-mode"></a>

기본적으로 AMI는 AMI를 생성하는 데 사용된 EC2 인스턴스의 부팅 모드를 상속합니다. 예를 들어, 레거시 BIOS에서 실행되는 EC2 인스턴스에서 AMI를 생성하는 경우에는 새 AMI의 부팅 모드는 `legacy-bios`입니다. 부팅 모드가 `uefi-preferred`인 EC2 인스턴스에서 AMI를 생성하는 경우 새 AMI의 부팅 모드는 `uefi-preferred`입니다.

AMI를 등록할 때 AMI의 부팅 모드를 `uefi`, `legacy-bios` 또는 `uefi-preferred`로 설정할 수 있습니다.

AMI 부팅 모드가 `uefi-preferred`로 설정된 경우 인스턴스는 다음과 같이 부팅됩니다.
+ UEFI와 레거시 BIOS를 모두 지원하는 인스턴스 유형(예: `m5.large`)의 경우 UEFI를 사용하여 인스턴스가 부팅됩니다.
+ 레거시 BIOS만 지원하는 인스턴스 유형(예: `m4.large`)의 경우 레거시 BIOS를 사용하여 인스턴스가 부팅됩니다.

AMI 부팅 모드를 `uefi-preferred`로 설정하면 운영 체제가 UEFI와 레거시 BIOS를 모두 부팅할 수 있는 기능을 지원해야 합니다.

기존 레거시 BIOS 기반 인스턴스를 UEFI로 변환하거나 기존 UEFI 기반 인스턴스를 레거시 BIOS로 변환하려면 먼저 인스턴스의 볼륨 및 운영 체제가 선택한 부팅 모드를 지원하도록 수정해야 합니다. 다음에 볼륨의 스냅샷을 생성합니다. 마지막으로 스냅샷에서 AMI를 생성합니다.

**고려 사항**
+ AMI 부팅 모드 파라미터를 설정해도 지정된 부팅 모드에 대한 운영 체제가 자동으로 구성되지는 않습니다. 먼저 선택한 부팅 모드를 사용한 부팅을 지원하도록 인스턴스의 볼륨 및 운영 체제를 적절하게 수정해야 합니다. 그렇게 하지 않으면 결과 AMI를 사용할 수 없습니다. 예를 들어 레거시 BIOS 기반 Windows 인스턴스를 UEFI로 변환하는 경우 Microsoft의 [MBR2GPT](https://learn.microsoft.com/en-us/windows/deployment/mbr-to-gpt) 도구를 사용하여 시스템 디스크를 MBR에서 GPT로 변환할 수 있습니다. 필요한 수정 사항은 운영 체제마다 다릅니다. 자세한 내용은 운영 체제 설명서를 참조하세요.
+ [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 명령 또는 [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet을 사용하여 [NitroTPM](nitrotpm.md) 및 UEFI Preferred를 모두 지원하는 AMI를 생성할 수는 없습니다.
+ UEFI 보안 부팅과 같은 일부 기능은 UEFI에서 부팅하는 인스턴스에서만 사용할 수 있습니다. UEFI를 지원하지 않는 인스턴스 유형과 함께 `uefi-preferred` AMI 부팅 모드 파라미터를 사용하면 인스턴스가 레거시 BIOS로 시작되고 UEFI 종속 기능이 비활성화됩니다. UEFI 종속 기능의 가용성에 의존하는 경우 AMI 부팅 모드 파라미터를 `uefi`로 설정하세요.

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

**AMI의 부팅 모드를 설정하려면**

1. 선택된 부팅 모드를 통한 부팅을 지원하도록 인스턴스의 볼륨 및 운영 체제를 적절하게 수정합니다. 필요한 수정 사항은 운영 체제마다 다릅니다. 자세한 내용은 운영 체제 설명서를 참조하세요.
**주의**  
이 단계를 수행하지 않으면 AMI를 사용할 수 없습니다.

1. 인스턴스의 볼륨 ID를 찾으려면 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 명령을 사용합니다. 다음 단계에서 이 볼륨의 스냅샷을 생성합니다.

   ```
   aws ec2 describe-instances \
       --instance-ids i-1234567890abcdef0 \
       --query Reservations[].Instances[].BlockDeviceMappings
   ```

   다음은 예제 출력입니다.

   ```
   [
       [
           {
               "DeviceName": "/dev/xvda",
               "Ebs": {
                   "AttachTime": "2024-07-11T01:05:51+00:00",
                   "DeleteOnTermination": true,
                   "Status": "attached",
                   "VolumeId": "vol-1234567890abcdef0"
               }
           }
       ]
   ]
   ```

1. 볼륨의 스냅샷을 생성하려면 [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html) 명령을 사용합니다. 이전 단계의 볼륨 ID를 사용합니다.

   ```
   aws ec2 create-snapshot \
       --volume-id vol-01234567890abcdef \
       --description "my snapshot"
   ```

   다음은 예제 출력입니다.

   ```
   {
       "Description": "my snapshot",
       "Encrypted": false,
       "OwnerId": "123456789012",
       "Progress": "",
       "SnapshotId": "snap-0abcdef1234567890",
       "StartTime": "",
       "State": "pending",
       "VolumeId": "vol-01234567890abcdef",
       "VolumeSize": 30,
       "Tags": []
   }
   ```

1. 스냅샷이 `completed` 상태가 될 때까지 기다렸다가 다음 단계로 이동합니다. 스냅샷의 상태를 가져오려면 이전 단계에서 얻은 스냅샷 ID와 함께 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 명령을 사용합니다.

   ```
   aws ec2 describe-snapshots \
       --snapshot-ids snap-0abcdef1234567890 \
       --query Snapshots[].State \
       --output text
   ```

   다음은 예제 출력입니다.

   ```
   completed
   ```

1. 새 AMI를 생성하려면 [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 명령을 사용합니다. **CreateSnapshot**의 출력에서 `SnapshotId` 값을 복사합니다.
   + 부팅 모드를 UEFI로 설정하려면 `uefi` 값으로 `--boot-mode` 파라미터를 추가합니다.

     ```
     aws ec2 register-image \
        --description "my image" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi
     ```
   + 부팅 모드를 `uefi-preferred`로 설정하려면 `--boot-mode`의 값을 `uefi-preferred`로 설정합니다.

     ```
     aws ec2 register-image \
        --description "my description" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi-preferred
     ```

1. (선택 사항) 새로 생성된 AMI가 앞서 지정한 부팅 모드인지 확인하려면 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

   ```
   aws ec2 describe-images \
       --image-id ami-1234567890abcdef0 \
       --query Images[].BootMode \
       --output text
   ```

   다음은 예제 출력입니다.

   ```
   uefi
   ```

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

**AMI의 부팅 모드를 설정하려면**

1. 선택된 부팅 모드를 통한 부팅을 지원하도록 인스턴스의 볼륨 및 운영 체제를 적절하게 수정합니다. 필요한 수정 사항은 운영 체제마다 다릅니다. 자세한 내용은 운영 체제 설명서를 참조하세요.
**주의**  
이 단계를 수행하지 않으면 AMI를 사용할 수 없습니다.

1. 인스턴스의 볼륨 ID를 찾으려면 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet을 사용합니다.

   ```
   (Get-EC2Instance `
       -InstanceId i-1234567890abcdef0).Instances.BlockDeviceMappings.Ebs
   ```

   다음은 예제 출력입니다.

   ```
   AssociatedResource  : 
   AttachTime          : 7/11/2024 1:05:51 AM
   DeleteOnTermination : True
   Operator            : 
   Status              : attached
   VolumeId            : vol-01234567890abcdef
   ```

1. 볼륨의 스냅샷을 생성하려면 [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html) cmdlet을 사용합니다. 이전 단계의 볼륨 ID를 사용합니다.

   ```
   New-EC2Snapshot `
       -VolumeId vol-01234567890abcdef `
       -Description "my snapshot"
   ```

   다음은 예제 출력입니다.

   ```
   AvailabilityZone          : 
   Description               : my snapshot
   Encrypted                 : False
   FullSnapshotSizeInBytes   : 0
   KmsKeyId                  : 
   OwnerId                   : 123456789012
   RestoreExpiryTime         : 
   SnapshotId                : snap-0abcdef1234567890
   SseType                   : 
   StartTime                 : 4/25/2025 6:08:59 PM
   State                     : pending
   StateMessage              : 
   VolumeId                  : vol-01234567890abcdef
   VolumeSize                : 30
   ```

1. 스냅샷이 `completed` 상태가 될 때까지 기다렸다가 다음 단계로 이동합니다. 스냅샷의 상태를 가져오려면 이전 단계에서 얻은 스냅샷 ID와 함께 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html) cmdlet을 사용합니다.

   ```
   (Get-EC2Snapshot `
       -SnapshotId snap-0abcdef1234567890).State.Value
   ```

   다음은 예제 출력입니다.

   ```
   completed
   ```

1. 새 AMI를 생성하려면 [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet을 사용합니다. **New-EC2Snapshot**의 출력에서 `SnapshotId` 값을 복사합니다.
   + 부팅 모드를 UEFI로 설정하려면 `uefi` 값으로 `-BootMode` 파라미터를 추가합니다.

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi
     ```
   + 부팅 모드를 `uefi-preferred`로 설정하려면 `-BootMode`의 값을 `uefi-preferred`로 설정합니다.

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi-preferred
     ```

1. (선택 사항) 새로 생성된 AMI가 앞서 지정한 부팅 모드인지 확인하려면 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

   ```
   (Get-EC2Image `
       -ImageId ami-1234567890abcdef0).BootMode.Value
   ```

   다음은 예제 출력입니다.

   ```
   uefi
   ```

------

# Amazon EC2 인스턴스의 UEFI 변수
<a name="uefi-variables"></a>

부팅 모드가 UEFI로 설정된 인스턴스를 시작하면 변수에 대한 키-값 스토어가 생성됩니다. 스토어는 UEFI 및 인스턴스 운영 체제에서 UEFI 변수를 저장하는 데 사용할 수 있습니다.

UEFI 변수는 부트 로더와 운영 체제에서 초기 시스템 시작을 구성하는 데 사용됩니다. 이를 통해 운영 체제는 부팅 순서와 같은 부팅 프로세스의 특정 설정을 관리하거나 UEFI 보안 부팅 키를 관리할 수 있습니다.

**주의**  
인스턴스에 연결할 수 있는 사람(및 인스턴스에서 실행 중인 모든 소프트웨어) 또는 인스턴스에서 [GetInstanceUefiData](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData.html) API를 사용할 권한이 있는 사람은 누구나 변수를 읽을 수 있습니다. 암호 또는 개인 식별 정보와 같은 민감한 데이터를 UEFI 변수 저장소에 저장해서는 안 됩니다.

**UEFI 변수 지속성**
+ 2022년 5월 10일 또는 그 전에 시작된 인스턴스의 경우 UEFI 변수는 재부팅 또는 중지 시 초기화됩니다.
+ 2022년 5월 11일 또는 그 후에 시작된 인스턴스의 경우 비휘발성으로 표시된 UEFI 변수는 재부팅 및 중지/시작 시 유지됩니다.
+ 베어 메탈 인스턴스는 인스턴스 중지/시작 작업에서 UEFI 비휘발성 변수를 유지하지 않습니다.

# Amazon EC2 인스턴스의 UEFI 보안 부팅
<a name="uefi-secure-boot"></a>

UEFI 보안 부팅은 Amazon EC2의 장기 보안 부팅 프로세스를 기반으로 구축되며, 재부팅 시 지속적인 위협으로부터 소프트웨어를 보호할 수 있는 추가적인 심층 방어 기능을 제공합니다. 이렇게 하면 인스턴스가 암호화 키로 서명된 소프트웨어만 부팅합니다. 키는 [UEFI 비휘발성 변수 스토어](uefi-variables.md)의 키 데이터베이스에 저장됩니다. UEFI 보안 부팅은 인스턴스 부팅 흐름의 무단 수정을 방지합니다.

**Topics**
+ [UEFI 보안 부팅이 Amazon EC2 인스턴스에서 작동하는 방식](how-uefi-secure-boot-works.md)
+ [Amazon EC2의 UEFI 보안 부팅 요구 사항](launch-instance-with-uefi-sb.md)
+ [UEFI 보안 부팅에 대해 Amazon EC2 인스턴스가 활성화되어 있는지 확인](verify-uefi-secure-boot.md)
+ [사용자 지정 UEFI 보안 부팅 키를 사용하여 Linux AMI 생성](create-ami-with-uefi-secure-boot.md)
+ [UEFI 보안 부팅에 대한 AWS 바이너리 blob 생성](aws-binary-blob-creation.md)

# UEFI 보안 부팅이 Amazon EC2 인스턴스에서 작동하는 방식
<a name="how-uefi-secure-boot-works"></a>

UEFI 보안 부팅은 UEFI에 지정된 기능으로 부팅 체인의 상태에 대한 확인을 제공합니다. 펌웨어 자체 초기화 후에 암호로 검증된 UEFI 바이너리만 실행되도록 설계되었습니다. 이러한 바이너리에는 UEFI 드라이버, 기본 부트로더 및 체인 로드 구성 요소가 포함됩니다.

UEFI 보안 부팅은 신뢰 체인에 사용되는 4개의 키 데이터베이스를 지정합니다. 데이터베이스는 UEFI 변수 스토어에 저장됩니다.

신뢰 체인은 다음과 같습니다.

**플랫폼 키(PK) 데이터베이스**  
PK 데이터베이스는 신뢰의 루트입니다. 여기에는 키 교환 키(KEK) 데이터베이스를 업데이트하기 위해 신뢰 체인에 사용되는 단일 퍼블릭 PK 키가 포함되어 있습니다.  
PK 데이터베이스를 변경하려면 업데이트 요청에 서명하기 위한 프라이빗 PK 키가 있어야 합니다. 여기에는 빈 PK 키를 작성하여 PK 데이터베이스를 삭제하는 작업이 포함됩니다.

**키 교환 키(KEK) 데이터베이스**  
KEK 데이터베이스는 서명(db) 및 거부 목록(dbx) 데이터베이스를 업데이트하기 위해 신뢰 체인에 사용되는 퍼블릭 KEK 키 목록입니다.  
퍼블릭 KEK 데이터베이스를 변경하려면 업데이트 요청에 서명하기 위한 프라이빗 PK 키가 있어야 합니다.

**서명(db) 데이터베이스**  
db 데이터베이스는 모든 UEFI 부팅 바이너리를 검증하기 위해 신뢰 체인에 사용되는 퍼블릭 키 및 해시 목록입니다.  
db 데이터베이스를 변경하려면 업데이트 요청에 서명하기 위한 프라이빗 PK 키 또는 프라이빗 KEK 키가 있어야 합니다.

**서명 거부 목록(dbx) 데이터베이스**  
dbx 데이터베이스는 신뢰할 수 없는 퍼블릭 키 및 바이너리 해시 목록이며 신뢰 체인에서 해지 파일로 사용됩니다.  
dbx 데이터베이스는 항상 다른 모든 키 데이터베이스보다 우선합니다.  
dbx 데이터베이스를 변경하려면 업데이트 요청에 서명하기 위한 프라이빗 PK 키 또는 프라이빗 KEK 키가 있어야 합니다.  
UEFI 포럼은 [https://uefi.org/revocationlistfile](https://uefi.org/revocationlistfile)에서 많은 알려진 불량 바이너리 및 인증서에 대해 퍼블릭적으로 사용 가능한 dbx를 유지 관리합니다.

**중요**  
UEFI 보안 부팅은 모든 UEFI 바이너리에서 서명 검증을 시행합니다. UEFI 보안 부팅에서 UEFI 바이너리 실행을 허용하려면 위에서 설명한 프라이빗 db 키로 서명합니다.

기본적으로 UEFI 보안 부팅은 비활성화되어 있고 시스템은 `SetupMode`에 있습니다. 시스템이 `SetupMode`에 있을 때 암호화 서명 없이 모든 키 변수를 업데이트할 수 있습니다. PK가 설정되면 UEFI 보안 부팅이 활성화되고 SetupMode가 종료됩니다.

# Amazon EC2의 UEFI 보안 부팅 요구 사항
<a name="launch-instance-with-uefi-sb"></a>

지원되는 AMI와 지원되는 인스턴스 유형을 사용하여 [Amazon EC2 인스턴스를 시작](LaunchingAndUsingInstances.md)하면 해당 인스턴스는 UEFI 보안 부팅 데이터베이스에 대해 UEFI 부팅 바이너리를 자동으로 검증합니다. 추가 구성은 필요하지 않습니다. 시작 후 인스턴스에서 UEFI 보안 부팅을 구성할 수도 있습니다.

**참고**  
UEFI 보안 부팅은 부팅 흐름 수정으로부터 인스턴스와 해당 운영 체제를 보호합니다. UEFI 보안 부팅이 활성화된 소스 AMI에서 새 AMI를 생성하고 AMI 내에서 `UefiData` 변경과 같이 복사 프로세스 중에 특정 파라미터를 수정하는 경우 UEFI 보안 부팅을 비활성화할 수 있습니다.

**Topics**
+ [지원 AMI](#uefi-amis)
+ [지원되는 인스턴스 유형](#uefi-instance)

## 지원 AMI
<a name="uefi-amis"></a>

**Linux AMI**  
Linux 인스턴스를 시작하려면 Linux AMI에 UEFI 보안 부팅이 활성화되어 있어야 합니다.

Amazon Linux는 AL2023 릴리스 2023.1부터 UEFI 보안 부팅을 지원합니다. 하지만 UEFI 보안 부팅은 기본 AMI에서 활성화되지 않습니다. 자세한 정보는 *AL2023 사용 설명서*에서 [UEFI 보안 부팅](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html)을 참조하세요. 이전 버전의 Amazon Linux AMI에서는 UEFI 보안 부팅이 지원되지 않습니다. 지원 AMI를 사용하려면 자체 Linux AMI에서 여러 구성 단계를 수행해야 합니다. 자세한 내용은 [사용자 지정 UEFI 보안 부팅 키를 사용하여 Linux AMI 생성](create-ami-with-uefi-secure-boot.md) 섹션을 참조하세요.

**Windows AMI**  
Windows 인스턴스를 시작하려면 Windows AMI에 UEFI 보안 부팅이 활성화되어 있어야 합니다. Microsoft 키를 사용하여 UEFI 보안 부팅을 위해 사전 구성된 AWS Windows AMI를 찾으려면 *AWS Windows AMIs Reference*의 [Find Windows Server AMIs configured with NitroTPM and UEFI Secure Boot](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find)를 참조하세요.

현재는 [import-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html) 명령을 사용하여 UEFI 보안 부팅이 사용 설정된 Windows 가져오기를 지원하지 않습니다.

## 지원되는 인스턴스 유형
<a name="uefi-instance"></a>

UEFI를 지원하는 모든 가상화된 인스턴스 유형은 UEFI 보안 부팅도 지원합니다. UEFI 보안 부팅을 지원하는 인스턴스 유형은 [UEFI 부팅 모드에 대한 요구 사항](launch-instance-boot-mode.md) 섹션을 참조하세요.

**참고**  
베어 메탈 인스턴스 유형은 UEFI 보안 부팅을 지원하지 않습니다.

# UEFI 보안 부팅에 대해 Amazon EC2 인스턴스가 활성화되어 있는지 확인
<a name="verify-uefi-secure-boot"></a>

다음 절차에 따라 UEFI 보안 부팅에 대해 Amazon EC2가 활성화되어 있는지 확인할 수 있습니다.

## Linux 인스턴스
<a name="verify-uefi-secure-boot-linux"></a>

`mokutil` 유틸리티를 사용하여 Linux 인스턴스가 UEFI 보안 부팅을 사용하도록 설정되어 있는지 확인할 수 있습니다. 인스턴스에 `mokutil`가 설치되지 않은 경우 설치해야 합니다. Amazon Linux 2의 설치 지침은 [Find and install software packages on an Amazon Linux 2 instance](https://docs.aws.amazon.com/linux/al2/ug/find-install-software.html)를 참조하세요. 다른 Linux 배포는 관련 문서를 참조하세요.

**UEFI 보안 부팅에 대해 Linux 인스턴스가 활성화되어 있는지 확인**  
인스턴스에 연결하고 터미널 창에서 `root`로 다음 명령을 실행합니다.

```
mokutil --sb-state 
```

다음은 예제 출력입니다.
+ UEFI 보안 부팅이 활성화된 경우 출력에 `SecureBoot enabled`가 포함됩니다.
+ UEFI 보안 부팅이 활성화되지 않은 경우 출력에 `SecureBoot disabled` 또는 `Failed to read SecureBoot`가 포함됩니다.

## Windows 인스턴스
<a name="verify-uefi-secure-boot-windows"></a>

**UEFI 보안 부팅에 대해 Windows 인스턴스가 활성화되어 있는지 확인**

1. 인스턴스에 연결합니다.

1. msinfo32 도구를 엽니다.

1. **보안 부팅 상태(Secure Boot State)** 필드를 확인합니다. UEFI 보안 부팅이 활성화된 경우 값은 다음 이미지와 같이 **지원됨**입니다.  
![\[시스템 정보 내의 보안 부팅 상태입니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/secure-boot-state-win.png)

Windows PowerShell Cmdlet `Confirm-SecureBootUEFI`를 사용하여 보안 부팅 상태를 확인할 수도 있습니다. cmdlet에 대한 자세한 내용은 Microsoft 설명서의 [Confirm-SecureBootUEFI](https://learn.microsoft.com/en-us/powershell/module/secureboot/confirm-securebootuefi)를 참조하세요.

# 사용자 지정 UEFI 보안 부팅 키를 사용하여 Linux AMI 생성
<a name="create-ami-with-uefi-secure-boot"></a>

이 지침은 UEFI 보안 부팅과 사용자 지정 프라이빗 키를 사용하여 Linux AMI를 생성하는 방법을 보여줍니다. Amazon Linux는 AL2023 릴리스 2023.1부터 UEFI 보안 부팅을 지원합니다. 자세한 정보는 *Amazon Linux 2023 사용 설명서*의 [AL2023의 UEFI 보안 부팅](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html)을 참조하세요.

**중요**  
다음 절차는 **고급 사용자 전용**입니다. 이러한 절차를 사용하려면 SSL 및 Linux 배포 부팅 흐름에 대한 충분한 지식이 있어야 합니다.

**사전 조건**
+ 다음 도구가 사용됩니다.
  + OpenSSL – [https://www.openssl.org/](https://www.openssl.org/)
  + efivar – [https://github.com/rhboot/efivar](https://github.com/rhboot/efivar)
  + efitools – [https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/](https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/)
  + [get-instance-uefi-dat](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) 명령
+ Linux 인스턴스는 UEFI 부팅 모드를 지원하는 Linux AMI로 시작되고 비휘발성 데이터가 있어야 합니다.

UEFI 보안 부팅 키 없이 새로 생성된 인스턴스는 `SetupMode`에 생성됩니다. 이를 통해 자체 키를 등록할 수 있습니다. 일부 AMI는 UEFI 보안 부팅으로 사전 구성되어 제공되며 기존 키를 변경할 수 없습니다. 키를 변경하려면 원래 AMI를 기반으로 새 AMI를 생성해야 합니다.

변수 스토어에 키를 전파하는 방법에는 두 가지가 있습니다. 이들 방법은 다음에 나오는 옵션 A와 옵션 B에 설명되어 있습니다. 옵션 A는 실제 하드웨어의 흐름을 모방하여 인스턴스 내에서 이 작업을 수행하는 방법을 설명합니다. 옵션 B는 AMI를 생성할 때 base64로 인코딩된 파일로 전달되는 바이너리 blob을 생성하는 방법을 설명합니다. 두 옵션 모두 신뢰 체인에 사용되는 3개의 키 페어를 먼저 생성해야 합니다.

**Topics**
+ [작업 1: 키 페어 생성](#uefi-secure-boot-create-three-key-pairs)
+ [작업 2 - 옵션 A: 인스턴스 내에서 변수 스토어에 키 추가](#uefi-secure-boot-optionA)
+ [작업 2 - 옵션 B: 미리 채워진 변수 스토어를 포함하는 이진 blob 생성](#uefi-secure-boot-optionB)

## 작업 1: 키 페어 생성
<a name="uefi-secure-boot-create-three-key-pairs"></a>

UEFI 보안 부팅은 신뢰 체인에 사용되는 플랫폼 키(PK), 키 교환 키(KEK) 및 서명 데이터베이스(db)의 세 가지 키 데이터베이스를 기반으로 합니다.¹

인스턴스에서 각 키를 생성합니다. UEFI 보안 부팅 표준에 유효한 형식으로 퍼블릭 키를 준비하려면 각 키에 대한 인증서를 생성합니다. `DER`은 SSL 형식(형식의 바이너리 인코딩)을 정의합니다. 그런 다음 각 인증서를 UEFI 보안 부팅에서 이해하는 바이너리 형식인 UEFI 서명 목록으로 변환합니다. 마지막으로 관련 키로 각 인증서에 서명합니다.

**Topics**
+ [키 페어 생성 준비](#uefisb-prepare-to-create-key-pairs)
+ [키 페어 1: 플랫폼 키(PK) 생성](#uefisb-create-key-pair-1)
+ [키 페어 2: 키 교환 키(KEK) 생성](#uefisb-create-key-pair-2)
+ [키 페어 3: 서명 데이터베이스(db) 생성](#uefisb-create-key-pair-3)
+ [프라이빗 키로 부팅 이미지(커널)에 서명](#uefi-secure-boot-sign-kernel)

### 키 페어 생성 준비
<a name="uefisb-prepare-to-create-key-pairs"></a>

키 페어를 생성하기 전에 키 생성에 사용할 전역 고유 식별자(GUID)를 생성합니다.

1. [인스턴스에 연결합니다.](connect.md)

1. 셸 프롬프트에서 다음 명령을 실행합니다.

   ```
   uuidgen --random > GUID.txt
   ```

### 키 페어 1: 플랫폼 키(PK) 생성
<a name="uefisb-create-key-pair-1"></a>

PK는 UEFI 보안 부팅 인스턴스에 대한 신뢰 루트입니다. 프라이빗 PK는 KEK를 업데이트하는 데 사용되며, KEK는 승인된 키를 서명 데이터베이스(db)에 추가하는 데 사용할 수 있습니다.

X.509 표준은 키 페어를 생성하는 데 사용됩니다. 표준에 대한 자세한 내용은 *Wikipedia*의 [X.509](https://en.wikipedia.org/wiki/X.509)를 참조하세요.

**PK 생성**

1. 키를 생성합니다. 변수 이름을 `PK`로 지정해야 합니다.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt
   ```

   다음 파라미터가 지정됩니다.
   + `-keyout PK.key` – 프라이빗 키 파일입니다.
   + `-days 3650` - 인증서가 유효한 일 수입니다.
   + `-out PK.crt` - UEFI 변수를 생성하는 데 사용되는 인증서입니다.
   + `CN=Platform key` - 키의 일반 이름(CN)입니다. *플랫폼 키* 대신 조직 이름을 입력할 수 있습니다.

1. 인증서를 생성합니다.

   ```
   openssl x509 -outform DER -in PK.crt -out PK.cer
   ```

1. UEFI 서명 목록으로 인증서를 변환합니다.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
   ```

1. 프라이빗 PK(자체 서명)로 UEFI 서명 목록에 서명합니다.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
   ```

### 키 페어 2: 키 교환 키(KEK) 생성
<a name="uefisb-create-key-pair-2"></a>

프라이빗 KEK는 시스템에서 부팅할 수 있는 승인된 서명 목록인 db에 키를 추가하는 데 사용됩니다.

**KEK 생성**

1. 키를 생성합니다.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
   ```

1. 인증서를 생성합니다.

   ```
   openssl x509 -outform DER -in KEK.crt -out KEK.cer
   ```

1. UEFI 서명 목록으로 인증서를 변환합니다.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
   ```

1. 프라이빗 PK로 서명 목록에 서명합니다.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
   ```

### 키 페어 3: 서명 데이터베이스(db) 생성
<a name="uefisb-create-key-pair-3"></a>

db 목록에는 시스템에서 부팅할 권한이 있는 승인된 키가 포함되어 있습니다. 목록을 수정하려면 프라이빗 KEK가 필요합니다. 부팅 이미지는 이 단계에서 생성된 프라이빗 키로 서명됩니다.

**db 생성**

1. 키를 생성합니다.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
   ```

1. 인증서를 생성합니다.

   ```
   openssl x509 -outform DER -in db.crt -out db.cer
   ```

1. UEFI 서명 목록으로 인증서를 변환합니다.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
   ```

1. 프라이빗 KEK로 서명 목록에 서명합니다.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
   ```

### 프라이빗 키로 부팅 이미지(커널)에 서명
<a name="uefi-secure-boot-sign-kernel"></a>

Ubuntu 22.04의 경우 다음 이미지에 서명이 필요합니다.

```
/boot/efi/EFI/ubuntu/shimx64.efi
/boot/efi/EFI/ubuntu/mmx64.efi
/boot/efi/EFI/ubuntu/grubx64.efi
/boot/vmlinuz
```

**이미지에 서명**  
다음 구문을 사용하여 이미지에 서명합니다.

```
sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
```

**참고**  
모든 새 커널에 서명해야 합니다. *`/boot/vmlinuz`*는 일반적으로 마지막으로 설치된 커널에 심볼릭 링크로 연결됩니다.

부팅 체인과 필요한 이미지에 대해 알아보려면 배포 설명서를 참조하세요.

¹ ArchWiki 커뮤니티의 노고에 감사드립니다. PK 생성, KEK 생성, DB 생성 및 이미지 서명을 위한 명령은 ArchWiki 유지 관리 팀 및/또는 ArchWiki 기고자가 작성한 [키 생성](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys)에서 가져왔습니다.

## 작업 2 - 옵션 A: 인스턴스 내에서 변수 스토어에 키 추가
<a name="uefi-secure-boot-optionA"></a>

[3개의 키 페어](#uefi-secure-boot-create-three-key-pairs)를 생성한 후 다음 단계를 완료하여 인스턴스에 연결하고 인스턴스 내에서 변수 스토어에 키를 추가할 수 있습니다. 또는 [작업 2 - 옵션 B: 미리 채워진 변수 스토어를 포함하는 이진 blob 생성](#uefi-secure-boot-optionB)의 단계를 완료합니다.

**Topics**
+ [1단계: UEFI 보안 부팅을 지원하는 인스턴스 시작](#step1-launch-uefi-sb)
+ [2단계: UEFI 보안 부팅을 지원하도록 인스턴스 구성](#step2-launch-uefi-sb)
+ [3단계: 인스턴스에서 AMI 생성](#step3-launch-uefi-sb)

### 1단계: UEFI 보안 부팅을 지원하는 인스턴스 시작
<a name="step1-launch-uefi-sb"></a>

다음 사전 조건으로 [인스턴스를 시작](LaunchingAndUsingInstances.md)하면 UEFI 보안 부팅을 지원하도록 인스턴스를 구성할 준비가 됩니다. 시작 시 인스턴스에서만 UEFI 보안 부팅 지원을 활성화할 수 있습니다. 나중에 활성화할 수 없습니다.

**사전 조건**
+ **AMI** - Linux AMI는 UEFI 부팅 모드를 지원해야 합니다. AMI가 UEFI 부팅 모드를 지원하는지 확인하려면 AMI 부팅 모드 파라미터가 **uefi**여야 합니다. 자세한 내용은 [Amazon EC2 AMI의 부팅 모드 파라미터 결정](ami-boot-mode.md) 섹션을 참조하세요.

  참고: AWS에서는 Graviton 기반 인스턴스 유형의 UEFI를 지원하도록 구성된 Linux AMI만 제공합니다. AWS에서는 현재 UEFI 부팅 모드를 지원하는 x86\$164 Linux AMI를 제공하지 않습니다. 모든 아키텍처의 UEFI 부팅 모드를 지원하도록 자체 AMI를 구성할 수 있습니다. UEFI 부팅 모드를 지원하도록 자체 AMI를 구성하려면 자체 AMI에서 여러 구성 단계를 수행해야 합니다. 자세한 내용은 [Amazon EC2 AMI의 부팅 모드 설정](set-ami-boot-mode.md) 섹션을 참조하세요.
+ **인스턴스 유형(Instance type)** - UEFI를 지원하는 모든 가상화된 인스턴스 유형은 UEFI 보안 부팅도 지원합니다. 베어 메탈 인스턴스 유형은 UEFI 보안 부팅을 지원하지 않습니다. UEFI 보안 부팅을 지원하는 인스턴스 유형은 [UEFI 부팅 모드에 대한 요구 사항](launch-instance-boot-mode.md) 섹션을 참조하세요.
+ UEFI 보안 부팅 릴리스 후 인스턴스를 시작합니다. UEFI 보안 부팅이 릴리스된 2022년 5월 10일 후에 시작된 인스턴스만 UEFI 보안 부팅을 지원할 수 있습니다.

인스턴스를 시작한 후 UEFI 데이터가 있는지 확인하여 UEFI 보안 부팅을 지원하도록 구성할 준비가 되었는지 확인할 수 있습니다(즉, [2단계](#step2-launch-uefi-sb)로 진행할 수 있음). UEFI 데이터가 있으면 비휘발성 데이터가 지속되는 것입니다.

**인스턴스가 2단계를 수행할 준비가 되었는지 확인**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) 명령을 사용하여 인스턴스 ID를 지정합니다.

```
aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0
```

UEFI 데이터가 출력에 있는 경우 인스턴스는 2단계를 수행할 준비가 된 것입니다. 출력이 비어 있으면 UEFI 보안 부팅을 지원하도록 인스턴스를 구성할 수 없습니다. UEFI 보안 부팅 지원이 제공되기 전에 인스턴스가 시작된 경우 이러한 상황이 발생할 수 있습니다. 새 인스턴스를 시작하고 다시 시도합니다.

### 2단계: UEFI 보안 부팅을 지원하도록 인스턴스 구성
<a name="step2-launch-uefi-sb"></a>

#### 인스턴스의 UEFI 변수 스토어에 키 페어 등록
<a name="step2a-launch-uefi-sb"></a>

**주의**  
키를 등록한 *후* 부팅 이미지에 서명해야 합니다. 그렇지 않으면 인스턴스를 부팅할 수 없습니다.

서명된 UEFI 서명 목록(`PK`, `KEK` 및 `db`)을 생성한 후에는 UEFI 펌웨어에 등록해야 합니다.

다음과 같은 경우에만 `PK` 변수에 쓸 수 있습니다.
+ 아직 등록된 PK가 없으며 이는 `SetupMode` 변수가 `1`인 경우 표시됩니다. 다음 명령을 사용하여 이를 확인합니다. 출력은 `1` 또는 `0`입니다.

  ```
  efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode 
  ```
+ 새 PK는 기존 PK의 프라이빗 키로 서명됩니다.

**UEFI 변수 스토어에 키 등록**  
인스턴스에서 다음 명령을 실행해야 합니다.

SetupMode가 활성화된 경우(값은 `1`) 인스턴스에서 다음 명령을 실행하여 키를 등록할 수 있습니다.

```
[ec2-user ~]$ efi-updatevar -f db.auth db
```

```
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
```

```
[ec2-user ~]$ efi-updatevar -f PK.auth PK
```

**UEFI 보안 부팅이 활성화되었는지 확인**  
UEFI 보안 부팅이 활성화되었는지 확인하려면 [UEFI 보안 부팅에 대해 Amazon EC2 인스턴스가 활성화되어 있는지 확인](verify-uefi-secure-boot.md)의 단계를 따르세요.

이제 [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) CLI 명령을 사용하여 UEFI 변수 스토어를 내보내거나 다음 단계로 계속하고 부팅 이미지에 서명하여 UEFI 보안 부팅 지원 인스턴스로 재부팅할 수 있습니다.

### 3단계: 인스턴스에서 AMI 생성
<a name="step3-launch-uefi-sb"></a>

인스턴스에서 AMI를 생성하기 위해 콘솔이나 `CreateImage` API, CLI 또는 SDK를 사용할 수 있습니다. 콘솔 지침은 [Amazon EBS 지원 AMI 생성](creating-an-ami-ebs.md) 섹션을 참조하세요. API 지침은 [CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)를 참조하세요.

**참고**  
`CreateImage` API는 인스턴스의 UEFI 변수 스토어를 AMI에 자동으로 복사합니다. 콘솔은 `CreateImage` API를 사용합니다. 이 AMI를 사용하여 인스턴스를 시작하면 인스턴스는 동일한 UEFI 변수 스토어를 갖게 됩니다.

## 작업 2 - 옵션 B: 미리 채워진 변수 스토어를 포함하는 이진 blob 생성
<a name="uefi-secure-boot-optionB"></a>

[3개의 키 페어](#uefi-secure-boot-create-three-key-pairs)를 생성한 후에는 UEFI 보안 부팅 키가 포함된 미리 채워진 변수 스토어가 포함된 이진 blob을 생성할 수 있습니다. 또는 [작업 2 - 옵션 A: 인스턴스 내에서 변수 스토어에 키 추가](#uefi-secure-boot-optionA)의 단계를 완료합니다.

**주의**  
키를 등록하기 *전* 부팅 이미지에 서명해야 합니다. 그렇지 않으면 인스턴스를 부팅할 수 없습니다.

**Topics**
+ [1단계: 새 변수 스토어 생성 또는 기존 변수 스토어 업데이트](#uefi-secure-boot-create-or-update-variable)
+ [2단계: AMI 생성 시 이진 blob 업로드](#uefi-secure-boot-upload-binary-blob-on-ami-creation)

### 1단계: 새 변수 스토어 생성 또는 기존 변수 스토어 업데이트
<a name="uefi-secure-boot-create-or-update-variable"></a>

python-uefivars 도구를 사용하여 실행 중인 인스턴스 없이 *오프라인*으로 변수 스토어를 생성할 수 있습니다. 이 도구는 키에서 새 변수 스토어를 생성할 수 있습니다. 이 스크립트는 현재 EDK2 형식, AWS 형식 및 상위 수준 도구로 더 쉽게 편집할 수 있는 JSON 표현을 지원합니다.

**실행 중인 인스턴스 없이 오프라인으로 변수 스토어 생성**

1. 다음 링크에서 도구를 다운로드합니다.

   ```
   https://github.com/awslabs/python-uefivars
   ```

1. 다음 명령을 실행하여 키에서 새 변수 스토어를 생성합니다. 그러면 *your\$1binary\$1blob*.bin에 base64로 인코딩된 바이너리 blob이 생성됩니다. 이 도구는 `-I` 파라미터를 통해 바이너리 blob 업데이트도 지원합니다.

   ```
   ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl
   ```

### 2단계: AMI 생성 시 이진 blob 업로드
<a name="uefi-secure-boot-upload-binary-blob-on-ami-creation"></a>

[https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html)를 사용하여 UEFI 변수 스토어 데이터를 전달합니다. `--uefi-data` 파라미터에 대해 바이너리 blob을 지정하고 `--boot-mode` 파라미터에 대해 `uefi`를 지정합니다.

```
aws ec2 register-image \
    --name uefi_sb_tpm_register_image_test \
    --uefi-data $(cat your_binary_blob.bin) \
    --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \
    --architecture x86_64 \
    --root-device-name /dev/sda1 \
    --virtualization-type hvm \
    --ena-support \
    --boot-mode uefi
```

# UEFI 보안 부팅에 대한 AWS 바이너리 blob 생성
<a name="aws-binary-blob-creation"></a>

다음 단계를 사용하여 AMI 생성 중 UEFI 보안 부팅 변수를 사용자 지정할 수 있습니다. 이 단계에서 사용되는 KEK는 2021년 9월 현재 최신 버전입니다. Microsoft에서 KEK를 업데이트하는 경우 최신 KEK를 사용해야 합니다.

**AWS 바이너리 blob 생성**

1. 빈 PK 서명 목록을 생성합니다.

   ```
   touch empty_key.crt
   cert-to-efi-sig-list empty_key.crt PK.esl
   ```

1. KEK 인증서를 다운로드합니다.

   ```
   https://go.microsoft.com/fwlink/?LinkId=321185
   ```

1. UEFI 서명 목록(`siglist`)에서 KEK 인증서를 래핑합니다.

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK.esl MicCorKEKCA2011_2011-06-24.crt 
   ```

1. Microsoft의 db 인증서를 다운로드합니다.

   ```
   https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
   https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
   ```

1. db 서명 목록을 생성합니다.

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
   cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
   ```

1. 통합 확장 가능 펌웨어 인터페이스 포럼은 더 이상 DBX 파일을 제공하지 않습니다. 이제 Microsoft가 GitHub에서 제공합니다. Microsoft 보안 부팅 업데이트 리포지토리([https://github.com/microsoft/secureboot\$1objects](https://github.com/microsoft/secureboot_objects))에서 최신 DBX 업데이트를 다운로드합니다.

1. 서명된 update-binary의 압축을 풉니다.

   아래 스크립트 콘텐츠로 `SplitDbxContent.ps1`을 생성합니다. 또는 `Install-Script -Name SplitDbxContent`를 사용하여 [ PowerShell Gallery](https://www.powershellgallery.com/packages/SplitDbxContent/1.0)에서 스크립트를 설치할 수 있습니다.

   ```
   <#PSScriptInfo
    
   .VERSION 1.0
    
   .GUID ec45a3fc-5e87-4d90-b55e-bdea083f732d
    
   .AUTHOR Microsoft Secure Boot Team
    
   .COMPANYNAME Microsoft
    
   .COPYRIGHT Microsoft
    
   .TAGS Windows Security
    
   .LICENSEURI
    
   .PROJECTURI
    
   .ICONURI
    
   .EXTERNALMODULEDEPENDENCIES
    
   .REQUIREDSCRIPTS
    
   .EXTERNALSCRIPTDEPENDENCIES
    
   .RELEASENOTES
   Version 1.0: Original published version.
    
   #>
   
   <#
   .DESCRIPTION
    Splits a DBX update package into the new DBX variable contents and the signature authorizing the change.
    To apply an update using the output files of this script, try:
    Set-SecureBootUefi -Name dbx -ContentFilePath .\content.bin -SignedFilePath .\signature.p7 -Time 2010-03-06T19:17:21Z -AppendWrite'
   .EXAMPLE
   .\SplitDbxAuthInfo.ps1 DbxUpdate_x64.bin
   #>
   
   
   # Get file from script input
   $file  = Get-Content -Encoding Byte $args[0]
   
   # Identify file signature
   $chop = $file[40..($file.Length - 1)]
   if (($chop[0] -ne 0x30) -or ($chop[1] -ne 0x82 )) {
       Write-Error "Cannot find signature"
       exit 1
   }
   
   # Signature is known to be ASN size plus header of 4 bytes
   $sig_length = ($chop[2] * 256) + $chop[3] + 4
   $sig = $chop[0..($sig_length - 1)]
   
   if ($sig_length -gt ($file.Length + 40)) {
       Write-Error "Signature longer than file size!"
       exit 1
   }
   
   # Content is everything else
   $content = $file[0..39] + $chop[$sig_length..($chop.Length - 1)]
   
   # Write signature and content to files
   Set-Content -Encoding Byte signature.p7 $sig
   Set-Content -Encoding Byte content.bin $content
   ```

   스크립트를 사용하여 서명된 DBX 파일의 압축을 풉니다.

   ```
   PS C:\Windows\system32> SplitDbxContent.ps1 .\dbx.bin
   ```

   이렇게 하면 `signature.p7` 및 `content.bin`이라는 두 파일이 생성됩니다. 다음 단계에서 `content.bin`을 사용합니다.

1. `uefivars.py` 스크립트를 사용하여 UEFI 변수 스토어를 빌드합니다.

   ```
   ./uefivars.py -i none -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin 
   ```

1. 바이너리 blob과 UEFI 변수 스토어를 확인합니다.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o json | less
   ```

1. Blob을 동일한 도구에 다시 전달하여 업데이트할 수 있습니다.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin
   ```

   예상 결과

   ```
   Replacing PK
   Replacing KEK
   Replacing db
   Replacing dbx
   ```

# EBS-backed AMI에서 암호화 사용
<a name="AMIEncryption"></a>

Amazon EBS 스냅샷의 지원을 받는 AMI에서는 Amazon EBS 암호화를 활용할 수 있습니다. 데이터 볼륨과 루트 볼륨 모두의 스냅샷을 암호화하고 AMI에 연결할 수 있습니다. 전체 EBS 암호화 지원을 통해 인스턴스를 시작하고 이미지를 복사할 수 있습니다. 이러한 작업을 위한 암호화 파라미터는 AWS KMS를 사용할 수 있는 모든 리전에서 지원됩니다.

암호화된 EBS 볼륨이 있는 EC2 인스턴스는 다른 인스턴스와 동일한 방법으로 AMIs에서 시작됩니다. 또한 암호화되지 않은 EBS 스냅샷이 지원하는 AMI에서 인스턴스를 시작할 때 시작하는 동안 해당 볼륨의 일부 또는 전체를 암호화할 수 있습니다.

EBS 볼륨과 마찬가지로 AMI의 스냅샷은 기본 AWS KMS key 또는 지정한 고객 관리형 키로 암호화할 수 있습니다. 어느 경우든 선택한 KMS 키에 대한 사용 권한이 있어야 합니다.

암호화된 스냅샷이 있는 AMI는 AWS 계정 간에 공유할 수 있습니다. 자세한 내용은 [Amazon EC2의 공유 AMI 사용량 이해](sharing-amis.md) 섹션을 참조하세요.

**Topics**
+ [인스턴스 시작 시나리오](#AMI-encryption-launch)
+ [이미지 복사 시나리오](#AMI-encryption-copy)

## 인스턴스 시작 시나리오
<a name="AMI-encryption-launch"></a>



Amazon EC2는 `RunInstances` 작업과 블록 디바이스 매핑을 통해 제공된 파라미터를 사용하여 AMI에서 시작됩니다. AWS Management Console을 사용하거나 Amazon EC2 API 또는 CLI를 직접 사용할 수 있습니다. 자세한 내용은 [Amazon EC2 인스턴스의 볼륨에 대한 블록 디바이스 매핑](block-device-mapping-concepts.md) 섹션을 참조하세요. AWS CLI에서 블록 디바이스 매핑을 제어하는 예제는 [시작, 목록 및 EC2 인스턴스 종료](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html) 단원을 참조하세요.

기본적으로 명시적인 암호화 파라미터가 없는 경우 `RunInstances` 작업은 AMI 원본 스냅샷에서 EBS 볼륨을 복원하는 동안 AMI 원본 스냅샷의 기존 암호화 상태를 유지합니다. 기본적으로 암호화를 활성화한 경우 스냅샷의 암호화 여부와 상관없이 AMI에서 생성된 모든 볼륨이 암호화됩니다. 기본적으로 암호화를 활성화하지 않은 경우 인스턴스는 AMI의 암호화 상태를 유지합니다.

암호화 파라미터를 입력하여, 인스턴스를 시작하는 동시에 결과 볼륨에 새 암호화 상태를 적용할 수도 있습니다. 결과적으로 다음의 동작이 관찰됩니다.

**암호화 파라미터 없이 시작**
+ 암호화가 기본적으로 활성화되지 않은 경우, 암호화되지 않은 스냅샷이 암호화되지 않은 볼륨으로 복원됩니다. 이런 경우 새로 생성된 모든 볼륨이 암호화됩니다.
+ 소유한 암호화된 스냅샷은 동일한 KMS 키(으)로 암호화된 볼륨으로 복원됩니다.
+ 소유하지 않은 암호화된 스냅샷(예: 공유 AMI)은 AWS 계정의 기본 KMS 키로 암호화되는 볼륨으로 복원됩니다.

암호화 파라미터를 입력하여 기본 동작을 재정의할 수 있습니다. 사용 가능한 파라미터는 `Encrypted` 및 `KmsKeyId`입니다. `Encrypted` 파라미터만 설정할 경우 그 결과는 다음과 같습니다.

**`Encrypted`이(가) 설정되었지만 `KmsKeyId`이(가) 지정되지 않은 경우의 인스턴스 시작 동작**
+ 암호화되지 않은 스냅샷은 AWS 계정의 기본 KMS 키로 암호화되는 EBS 볼륨으로 복원됩니다.
+ 소유한 암호화된 스냅샷은 동일한 KMS 키(으)로 암호화된 EBS 볼륨으로 복원됩니다. (즉, `Encrypted` 파라미터는 아무런 효과가 없습니다.)
+ 소유하지 않은 암호화된 스냅샷(즉, 공유 AMI)은 AWS 계정의 기본 KMS 키로 암호화되는 볼륨으로 복원됩니다. (즉, `Encrypted` 파라미터는 아무런 효과가 없습니다.)

`Encrypted` 및 `KmsKeyId` 파라미터를 모두 설정하면 암호화 작업에 대해 기본이 아닌 KMS 키을(를) 지정할 수 있습니다. 결과는 다음 동작과 같습니다.

**`Encrypted`와(과) `KmsKeyId`이(가) 모두 설정된 인스턴스**
+ 암호화되지 않은 스냅샷은 지정된 KMS 키(으)로 암호화된 EBS 볼륨으로 복원됩니다.
+ 암호화된 스냅샷은 원래의 KMS 키이(가) 아니라 지정된 KMS 키(으)로 암호화된 EBS 볼륨으로 복원됩니다.

`KmsKeyId` 파라미터를 설정하지 않고 `Encrypted`을(를) 제공하면 오류가 발생합니다.

다음 섹션에서는 기본이 아닌 암호화 파라미터를 사용하여 AMI에서 인스턴스를 시작하는 예시를 볼 수 있습니다. 이러한 각각의 시나리오에서 `RunInstances` 작업에 입력된 파라미터에 의해 스냅샷에서 볼륨을 복원하는 동안 암호화 상태의 변경이 유발됩니다.

콘솔을 사용하여 AMI에서 인스턴스를 시작하는 방법에 대한 자세한 내용은 [Amazon EC2 인스턴스 시작하기](LaunchingAndUsingInstances.md) 섹션을 참조하세요.

### 시작 중에 볼륨 암호화
<a name="launch1"></a>

이 예시에서 암호화되지 않은 스냅샷이 지원하는 AMI는 암호화된 EBS 볼륨을 통해 EC2 인스턴스를 시작하는 데 사용됩니다.

![\[인스턴스를 시작하고 즉시 볼륨을 암호화합니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami-launch-convert.png)


`Encrypted` 파라미터만 사용하면 이 인스턴스의 볼륨이 암호화됩니다. `KmsKeyId` 파라미터는 선택 항목입니다. KMS 키 ID를 지정하지 않을 경우 볼륨을 암호화는 데 AWS 계정의 기본 KMS 키가 사용됩니다. 소유한 다른 KMS 키(으)로 사본을 암호화하려면 `KmsKeyId` 파라미터를 입력합니다.

### 시작 중에 볼륨 재암호화
<a name="launch2"></a>

이 예시에서 암호화된 스냅샷이 지원하는 AMI는 새 KMS 키(으)로 암호화된 EBS 볼륨을 통해 EC2 인스턴스를 시작하는 데 사용됩니다.

![\[인스턴스를 시작하고 즉시 볼륨을 다시 암호화합니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami-launch-encrypted.png)


AMI를 소유한 상태에서 암호화 파라미터를 입력하지 않을 경우, 결과 인스턴스는 해당 스냅샷과 동일한 KMS 키(으)로 암호화된 볼륨을 갖게 됩니다. AMI를 소유하지 않고 공유하며 암호화 파라미터를 입력하지 않을 경우, 볼륨이 기본 KMS 키(으)로 암호화됩니다. 설명된 대로 암호화 파라미터를 입력할 경우, 볼륨이 지정된 KMS 키(으)로 암호화됩니다.

### 시작 중에 여러 볼륨의 암호화 상태 변경
<a name="launch3"></a>

이 더 복잡한 예시에서 여러 스냅샷이 (각기 자체적인 암호화 상태를 통해) 지원하는 AMI는 새로 암호화된 볼륨과 재암호화된 볼륨을 통해 EC2 인스턴스를 시작하는 데 사용됩니다.

![\[시작 중에 여러 볼륨을 암호화하고 다시 암호화합니다.\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami-launch-mixed.png)


이 시나리오에서 `RunInstances` 작업에는 원본 스냅샷 각각에 대한 암호화 파라미터가 입력됩니다. 모든 가능한 암호화 파라미터를 지정하면, 결과 인스턴스는 AMI 소유 여부와 상관없이 동일합니다.

## 이미지 복사 시나리오
<a name="AMI-encryption-copy"></a>

Amazon EC2 AMI는 `CopyImage` 작업을 사용하여 복사됩니다. AWS Management Console을 통하거나 Amazon EC2 API 또는 CLI를 직접 사용할 수 있습니다.

기본적으로 명시적인 암호화 파라미터가 없는 경우. `CopyImage` 작업은 복사 중에 AMI 원본 스냅샷의 기존 암호화 상태를 유지합니다. 암호화 파라미터를 입력하여, AMI을(를) 복사하는 동시에 연결된 EBS 스냅샷에 새 암호화 상태를 적용할 수도 있습니다. 결과적으로 다음의 동작이 관찰됩니다.

**암호화 파라미터 없이 복사**
+ 암호화가 기본적으로 활성화되지 않은 경우, 암호화되지 않은 스냅샷이 또 다른 암호화되지 않은 스냅샷으로 복사됩니다. 이런 경우 새로 생성된 모든 스냅샷이 암호화됩니다.
+ 소유한 암호화된 스냅샷은 동일한 KMS 키(으)로 암호화된 스냅샷으로 복사됩니다.
+ 소유하지 않은 암호화된 스냅샷(즉, 공유 AMI)은 AWS 계정의 기본 KMS 키로 암호화되는 스냅샷으로 복사됩니다.

암호화 파라미터를 입력하여 이러한 모든 기본 동작을 재정의할 수 있습니다. 사용 가능한 파라미터는 `Encrypted` 및 `KmsKeyId`입니다. `Encrypted` 파라미터만 설정할 경우 그 결과는 다음과 같습니다.

**`Encrypted`이(가) 설정되었지만 `KmsKeyId`이(가) 지정되지 않은 경우의 이미지 복사 동작**
+ 암호화되지 않은 스냅샷은 AWS 계정의 기본 KMS 키로 암호화된 스냅샷으로 복사됩니다.
+ 암호화된 스냅샷은 동일한 KMS 키(으)로 암호화된 스냅샷으로 복사됩니다. (즉, `Encrypted` 파라미터는 아무런 효과가 없습니다.)
+ 소유하지 않은 암호화된 스냅샷(즉, 공유 AMI)은 AWS 계정의 기본 KMS 키로 암호화되는 볼륨으로 복사됩니다. (즉, `Encrypted` 파라미터는 아무런 효과가 없습니다.)

`Encrypted` 및 `KmsKeyId` 파라미터를 모두 설정하면 암호화 작업에 대해 고객 관리형 KMS 키을(를) 지정할 수 있습니다. 결과는 다음 동작과 같습니다.

**`Encrypted`와(과) `KmsKeyId`이(가) 모두 설정된 경우의 이미지 복사 동작**
+ 암호화되지 않은 스냅샷은 지정된 KMS 키(으)로 암호화된 스냅샷으로 복사됩니다.
+ 암호화된 스냅샷은 원래의 KMS 키(이)가 아니라 지정된 KMS 키(으)로 암호화된 스냅샷으로 복사됩니다.

`KmsKeyId` 파라미터를 설정하지 않고 `Encrypted`을(를) 제공하면 오류가 발생합니다.

다음 섹션에서는 기본이 아닌 암호화 파라미터를 사용하여 AMI를 복사하여 암호화 상태에 변경이 유발되는 예시를 제공합니다.

콘솔 사용에 대한 자세한 지침은 [Amazon EC2 AMI 복사](CopyingAMIs.md) 섹션을 참조하세요.

### 복사 중에 암호화되지 않은 이미지 암호화
<a name="copy-unencrypted-to-encrypted"></a>

이 시나리오에서는 암호화되지 않은 루트 스냅샷으로 지원되는 AMI가 암호화된 루트 스냅샷이 있는 AMI로 복사됩니다. `CopyImage` 작업은 고객 관리형 키를 포함하여 2개의 암호화 파라미터를 사용하여 호출됩니다. 따라서 루트 스냅샷의 암호화 상태가 변경되므로 대상 AMI는 소스 스냅샷과 동일한 데이터를 포함하는 루트 스냅샷에 의해 지원되지만 지정된 키를 사용하여 암호화됩니다. 두 AMI 모두의 스냅샷에 대한 스토리지 비용과 각 AMI에서 시작되는 인스턴스에 대한 비용이 발생합니다.

**참고**  
기본적으로 암호화를 활성화하는 경우 AMI의 모든 스냅샷에서 `Encrypted` 파라미터를 `true`로 설정하는 것과 효과가 동일합니다.

![\[AMI 복사 후 즉시 스냅샷 암호화\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/ami-to-ami-convert.png)


`Encrypted` 파라미터를 설정하면 이 인스턴스에 대한 단일 스냅샷이 암호화됩니다. `KmsKeyId` 파라미터를 지정하지 않으면 스냅샷 복사본을 암호화하는 데 기본 고객 관리형 키가 사용됩니다.

**참고**  
여러 스냅샷으로 이미지를 복사하고 각 이미지의 암호화 상태를 개별적으로 구성할 수도 있습니다.

# Amazon EC2의 공유 AMI 사용량 이해
<a name="sharing-amis"></a>

*공유 AMI*는 다른 개발자가 사용할 수 있도록 공유된 개발자 생성 AMI입니다. Amazon EC2를 처음 시작할 때 가장 손쉬운 방법 중 하나는 필요한 구성 요소를 가진 공유 AMI를 선택한 다음 개인 설정을 추가하는 것입니다. 자체 AMI를 생성하여 다른 사람과 공유할 수도 있습니다.

공유 AMI를 사용할 때는 사용자의 주의가 필요합니다. Amazon에서는 다른 Amazon EC2 사용자와 공유된 AMI의 무결성이나 보안성을 보장하지 않습니다. 따라서 공유 AMI를 사용할 때는 데이터 센터에서 외부 코드를 배포하는 경우와 마찬가지로 이런 AMI를 취급하고 그에 따라 적절한 조치를 취해야 합니다. 검증된 제공자 등 신뢰할 수 있는 출처에서 나온 AMI의 사용을 권장합니다.

## 확인된 공급 업체
<a name="verified-ami-provider"></a>

Amazon EC2 콘솔에서 Amazon 또는 확인된 Amazon 파트너가 소유한 공용 AMI는 **확인된 공급 업체**로 표시됩니다.

[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) AWS CLI 명령을 사용하여 확인된 공급 업체의 퍼블릭 AMI를 식별할 수도 있습니다. Amazon 또는 확인된 파트너가 소유한 퍼블릭 이미지에는 별칭이 있는 소유자(`amazon`, `aws-backup-vault` 또는 `aws-marketplace`)가 있습니다. CLI 출력에서 다음 값이 `ImageOwnerAlias`에 표시됩니다. 다른 사용자는 AMI 별칭을 사용할 수 없습니다. 이렇게 하면 Amazon 또는 확인된 공급 업체의 AMI를 쉽게 찾을 수 있습니다.

확인된 공급 업체가 되려면 AWS Marketplace에 판매자로 등록해야 합니다. 등록한 후에는 AWS Marketplace에 AMI를 표시할 수 있습니다. 자세한 내용을 알아보려면 [AWS Marketplace 판매자 설명서](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html)의 [Getting started as a seller](https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html)(판매자로 시작하기)와 *AMI-based products*(AMI 기반 제품)를 참조하세요.

**Topics**
+ [확인된 공급 업체](#verified-ami-provider)
+ [Amazon EC2 인스턴스에 사용할 공유 AMI 찾기](usingsharedamis-finding.md)
+ [Linux용 공유 AMI 사용 준비](usingsharedamis-confirm.md)
+ [허용된 AMI를 사용하여 Amazon EC2에서 AMI 검색 및 사용 제어](ec2-allowed-amis.md)
+ [AMI를 Amazon EC2에서 공개적으로 사용할 수 있도록 설정](sharingamis-intro.md)
+ [AMI에 대한 퍼블릭 액세스 치단 이해](block-public-access-to-amis.md)
+ [조직 및 조직 단위와 AMI 공유](share-amis-with-organizations-and-OUs.md)
+ [특정 AWS 계정과 AMI 공유](sharingamis-explicit.md)
+ [AWS 계정과 AMI 공유 취소](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를 해당 리전에 복사한 후 공유하세요. 자세한 내용은 [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 카탈로그(AMI Catalog)**를 선택합니다.

1. **커뮤니티 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인지를 확인해야 합니다. 시스템 보안성 향상에 대한 정보는 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 Image(AMIs)를 검색하고 사용하는 것을 제어하려면 *허용된 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/ko_kr/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 계정 ID로 정의되는 별칭입니다.  
+ `amazon` – Amazon 또는 확인된 공급업체가 생성한 AMI를 식별하는 별칭
+ `aws-marketplace` – AWS Marketplace에서 확인된 공급업체가 생성한 AMI를 식별하는 별칭
+ `aws-backup-vault` - 논리적 에어 갭 백업 저장소 계정에 있는 AWS 백업 AMI를 식별하는 별칭 논리적 에어 갭 저장소 AWS 백업 기능을 사용하는 경우 이 별칭이 AMI 공급업체로 포함되어 있는지 확인하세요.
+ AWS 계정 ID - 하나 이상의 12자리 AWS 계정 ID
+ `none` - 계정이 생성한 AMI만 검색하여 사용할 수 있음을 나타냅니다. 퍼블릭 또는 공유 AMI는 검색하고 사용할 수 없습니다. 지정하면 다른 기준을 지정할 수 없습니다.

`ImageNames`  
정확한 일치 또는 와일드카드(`?` 또는 `*`)를 사용하여 허용되는 AMI의 이름.

`MarketplaceProductCodes`  
허용되는 AMI의 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의 핵심 구성은 허용된 AMI에 대한 기준을 정의하는 `ImageCriteria` 구성입니다. 다음 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` 예제에서는 4개의 `ImageCriterion`을 구성합니다. AMI는 이러한 `ImageCriterion` 중 하나와 일치하는 경우 허용됩니다. 기준이 평가되는 방식에 대한 자세한 정보는 [기준 평가 방법](#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 제품 코드가 `abcdefg1234567890`인 AMI 허용

  `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`에는 `MarketplaceProductCodes`에 대한 값이 1개 있습니다. 이 `ImageCriterion`에 최대 49개를 더 추가하여 50개 한도에 도달할 수 있습니다.
+ 두 번째 `ImageCriterion`에는 `ImageProviders`에 대한 2개의 값이 있습니다. 이 `ImageCriterion`에 최대 198개를 더 추가하여 200개 한도에 도달할 수 있습니다.
+ 세 번째 `ImageCriterion`에는 `ImageNames`에 대한 값이 1개 있습니다. 이 `ImageCriterion`에 최대 49개를 더 추가하여 50개 한도에 도달할 수 있습니다.

### 허용된 AMI 작업
<a name="allowed-amis-operations"></a>

허용된 AMI 기능에는 이미지 기준을 관리하기 위한 **활성화**, **비활성화** 및 **감사 모드**의 세 가지 운영 상태가 있습니다. 이를 통해 이미지 기준을 활성화 또는 비활성화하거나 필요에 따라 검토할 수 있습니다.

**활성화됨**

허용된 AMI가 활성화된 경우: 
+ `ImageCriteria`가 적용됩니다.
+ 허용된 AMI만 EC2 콘솔과 이미지를 사용하는 API(예: 이미지를 사용하는 다른 작업을 설명, 복사, 저장 또는 수행하는 API)에서 검색할 수 있습니다.
+ 인스턴스는 허용된 AMI를 사용해서만 시작할 수 있습니다.

**비활성화됨**

허용된 AMI가 비활성화된 경우: 
+ `ImageCriteria`가 적용되지 않습니다.
+ AMI 검색 또는 사용에는 제한이 없습니다.

**감사 모드**

 감사 모드에서:
+ `ImageCriteria`가 적용되지만 AMI 검색 또는 사용에는 제한이 없습니다.
+ EC2 콘솔의 각 AMI에 대해 **허용된 이미지** 필드에는 허용되는 AMI가 활성화된 경우 계정의 사용자가 AMI를 검색하고 사용할 수 있는지 여부를 나타내는 **예** 또는 **아니요**가 표시됩니다.
+ 명령줄에서 `describe-image` 작업에 대한 응답에는 허용된 AMI가 활성화된 경우 계정의 사용자가 AMI를 검색하고 사용할 수 있는지 여부를 나타내는 `"ImageAllowed": true` 또는 `"ImageAllowed": false`가 포함됩니다.
+ EC2 콘솔에서 AMI 카탈로그는 허용된 AMI가 활성화된 경우 계정의 사용자가 검색하거나 사용할 수 없는 AMI 옆에 **허용되지 않음**을 표시합니다.

## 허용된 AMI 구현 모범 사례
<a name="best-practice-for-implementing-allowed-amis"></a>

허용된 AMI를 구현할 때는 이러한 모범 사례를 고려하여 원활한 전환을 보장하고 AWS 환경의 잠재적 중단을 최소화할 수 있습니다.

1. **감사 모드 활성화**

   먼저 감사 모드에서 허용된 AMI를 활성화합니다. 이 상태를 사용하면 실제로 액세스를 제한하지 않고 기준의 영향을 받는 AMI를 확인하여 위험 없는 평가 기간을 확보할 수 있습니다.

1. **허용된 AMI 기준 설정**

   조직의 보안 정책, 규정 준수 요구 사항 및 운영 요구 사항에 맞는 AMI 공급업체를 신중하게 설정합니다.
**참고**  
Amazon ECS, Amazon EKS, AWS Lambda Managed Instances 등의 AWS 관리형 서비스를 사용할 때는 AWS에서 생성한 AMI를 허용하도록 `amazon` 별칭을 지정하는 것이 좋습니다. 이러한 서비스는 Amazon에서 게시한 AMI를 사용하여 인스턴스를 시작합니다.  
AMI에 대한 `CreationDateCondition` 제한을 설정할 때는 주의해야 합니다. 지나치게 제한적인 날짜 조건(예: AMI가 5일 미만이어야 함)을 설정하면, AWS 또는 다른 공급자로부터 제공된 AMI가 지정된 기간 내에 업데이트되지 않을 경우 인스턴스 시작이 실패할 수 있습니다.  
더 나은 제어와 구체성을 위해 `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 규칙을 사용하여 실행 중이거나 중지된 인스턴스가 허용된 AMI 기준을 충족하는 AMI로 시작되었는지 확인합니다. 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. **인스턴스 시작 모니터링**

   애플리케이션 및 Amazon EMR, Amazon ECR, Amazon EKS, AWS Elastic Beanstalk와 같이 사용하는 AWS 관리형 서비스 전반의 AMI에서 인스턴스 시작을 계속 모니터링합니다. 예상치 못한 문제가 있는지 확인하고 허용된 AMI 기준을 필요한 만큼 조정합니다.

1. **새 AMI 파일럿**

   현재 허용된 AMI 설정을 준수하지 않는 타사 AMI를 테스트하는 경우 AWS는 다음 접근 방식을 권장합니다.
   + 별도의 AWS 계정 사용: 비즈니스 크리티컬 리소스에 액세스할 수 없는 계정을 생성합니다. 허용된 AMI 설정이 이 계정에서 활성화되어 있지 않은지 또는 테스트하려는 AMI가 명시적으로 허용되는지 확인하여 테스트할 수 있습니다.
   + 다른 AWS 리전에서 테스트: 타사 AMI를 사용할 수 있지만 허용된 AMI 설정을 아직 활성화하지 않은 리전을 사용합니다.

   이러한 접근 방식은 새로운 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. 탐색 창에서 **대시보드**를 선택합니다.

1. **계정 속성** 카드의 **설정**에서 **허용된 AMI**를 선택합니다.

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

그 대신에 감사 모드를 활성화하려면 `enabled` 대신에 `audit-mode`를 지정합니다.

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

그 대신에 감사 모드를 활성화하려면 `enabled` 대신에 `audit-mode`를 지정합니다.

```
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. 탐색 창에서 **대시보드**를 선택합니다.

1. **계정 속성** 카드의 **설정**에서 **허용된 AMI**를 선택합니다.

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. 탐색 창에서 **대시보드**를 선택합니다.

1. **계정 속성** 카드의 **설정**에서 **허용된 AMI**를 선택합니다.

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. 탐색 창에서 **대시보드**를 선택합니다.

1. **계정 속성** 카드의 **설정**에서 **허용된 AMI**를 선택합니다.

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 카탈로그(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를 사용하여 시작된 인스턴스를 찾는 방법**  
[describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) 명령을 `image-allowed` 필터와 함께 사용합니다.

```
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)를 참조하세요.

------

# AMI를 Amazon EC2에서 공개적으로 사용할 수 있도록 설정
<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)
+ [AMI를 모든 AWS 계정과 공유(공개 공유)](#share-an-ami-publicly)

## 고려 사항
<a name="considerations-for-sharing-public-AMIs"></a>

AMI를 퍼블릭으로 설정하기 전에 다음 사항을 고려하세요.
+ **소유권** - AMI를 공개하려면 사용자의 AWS 계정이 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)할 수는 있음).
  + 암호화된 볼륨
  + 암호화된 볼륨의 스냅샷
  + 제품 코드
+ **민감한 데이터 노출 방지(Avoid exposing sensitive data)** - AMI를 공유할 때 민감한 데이터의 노출을 방지하려면 [공유 Linux AMI 생성을 위한 권장 사항](building-shared-amis.md)에 설명된 보안 고려 사항을 읽고 권장 작업을 따르세요.
+ **사용** - AMI를 공유하면 사용자는 AMI에서만 인스턴스를 시작할 수 있습니다. 삭제, 공유 또는 수정할 수 없습니다. 그러나 AMI를 사용하여 인스턴스를 시작한 후에는 시작한 인스턴스에서 AMI를 생성할 수 있습니다.
+ **자동 사용 중단** - 기본적으로 모든 퍼블릭 AMI의 사용 중단 날짜가 AMI 생성 날짜로부터 2년으로 설정됩니다. 사용 중단 날짜를 2년보다 짧게 설정할 수 있습니다. 사용 중단 날짜를 취소하거나 중단 날짜를 연장하려면 [특정 AWS 계정과 공유](sharingamis-explicit.md)만을 통해 AMI를 프라이빗으로 설정해야 합니다.
+ **사용되지 않는 AMI 제거** - 퍼블릭 AMI가 사용 중단일에 도달한 후 6개월 이상 AMI에서 새 인스턴스를 시작하지 않은 경우 AWS에서는 퍼블릭 공유 속성을 제거하여 더 이상 사용되지 않는 AMI가 퍼블릭 AMI 목록에 표시되지 않도록 합니다.
+ **결제** - 다른 AWS 계정이 인스턴스를 시작하기 위해 AMI를 사용하는 경우에는 요금이 청구되지 않습니다. AMI를 사용하여 인스턴스를 시작하는 계정에는 AMI가 시작하는 인스턴스에 대한 요금이 청구됩니다.

## AMI를 모든 AWS 계정과 공유(공개 공유)
<a name="share-an-ami-publicly"></a>

AMI를 퍼블릭으로 설정한 후에는 콘솔의 **커뮤니티 AMI**에서 사용할 수 있습니다. 이는 EC2 콘솔의 왼쪽 탐색기에 있는 **AMI 카탈로그**에서 또는 콘솔을 사용하여 인스턴스를 시작할 때 액세스할 수 있습니다. AMI 공개 후 AMI가 **커뮤니티 AMI(Community AMIs)**에 표시되는 데 약간의 시간이 걸릴 수 있다는 점에 유의하세요.

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

**퍼블릭 AMI 설정**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. 목록에서 AMI를 선택한 후 **작업(Actions)**, **AMI 권한 수정(Edit AMI permissions)**을 선택합니다.

1. **AMI 가용성**에서 **퍼블릭**을 선택합니다.

1. **변경 사항 저장**을 선택합니다.

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

각 AMI에는 소유자를 제외하고 해당 AMI를 사용한 인스턴스 시작이 허용된 AWS 계정을 제어할 수 있는 `launchPermission` 속성이 존재합니다. 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) 명령을 사용하여 지정한 AMI의 `launchPermission` 목록에 `all` 그룹을 추가합니다.

   ```
   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에는 소유자를 제외하고 해당 AMI를 사용한 인스턴스 시작이 허용된 AWS 계정을 제어할 수 있는 `launchPermission` 속성이 존재합니다. 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) 명령을 사용하여 지정한 AMI의 `launchPermission` 목록에 `all` 그룹을 추가합니다.

   ```
   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의 퍼블릭 공유를 방지하는 것이 좋습니다.

**참고**  
이 설정은 계정 수준에서 직접 구성되거나 선언적 정책을 사용하여 구성됩니다. AMI의 퍼블릭 공유를 방지하려는 각 AWS 리전에 구성해야 합니다. 선언적 정책을 사용하면 여러 리전과 여러 계정에 동시에 설정을 적용할 수 있습니다. 선언적 정책을 사용 중인 경우 계정 내에서 직접 설정을 수정할 수 없습니다. 이 주제에서는 계정 내에서 직접 설정을 구성하는 방법을 설명합니다. 선언적 정책 사용에 대한 자세한 내용은 *AWS Organizations 사용 설명서*의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

관리자 사용자만 AMI에 대한 퍼블릭 액세스 차단을 활성화하거나 비활성화할 수 있도록 IAM 권한을 제한할 수 있습니다.

**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가 있는 기존 계정  | 비활성화됨 | 

¹ 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. 탐색 창에서 **대시보드**를 선택합니다.

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. 탐색 창에서 **대시보드**를 선택합니다.

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의 퍼블릭 공유를 허용하려는 각 AWS 리전에서 AMI에 대한 퍼블릭 액세스 차단을 비활성화해야 합니다.

**필수 권한**  
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. 탐색 창에서 **대시보드**를 선택합니다.

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 계정을 통합할 수 있는 관리 서비스입니다. [특정 계정과 공유하는 것](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에 액세스할 수 있습니다. 예를 들어 다음 다이어그램에서 AMI는 최상위 OU와 공유됩니다(숫자 **1**의 화살표로 표시). 최상위 OU 아래에 중첩된 모든 OU 및 계정(숫자 **2**의 점선으로 표시)은 또한 AMI에 액세스할 수 있습니다. 조직의 계정과 점선 외부의 OU(숫자 **3**으로 표시)는 AMI가 공유되는 OU의 하위가 아니므로 AMI에 액세스할 수 없습니다.

![\[AMI는 OU와 공유되며 모든 하위 OU 및 계정은 AMI에 액세스할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/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를 포함한 모든 조직 또는 OU와 AMI를 공유할 수 있습니다.

  리전 내에서 AMI를 공유할 수 있는 최대 엔터티 수는 [Amazon EC2 서비스 할당량](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)을 참조하세요.
+ **태그** - 사용자 정의 태그(AMI에 연결하는 태그)는 공유할 수 없습니다. AMI를 공유하면 AMI가 공유되는 조직 또는 OU의 AWS 계정에서 사용자 정의 태그를 사용할 수 없습니다.
+ **ARN 형식(ARN format)** - 명령에 조직 또는 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`*은(는) `o-123example`와 같은 조직 ID입니다.
  + *`ou-id`*은(는) `ou-1234-5example`와 같은 조직 단위 ID입니다.

  ARN 형식에 대한 자세한 내용은 *IAM 사용 설명서*의 [Amazon 리소스 이름(ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)을 참조하세요.
+ **암호화 및 키** - 암호화되지 않거나 암호화된 스냅샷의 지원을 받는 AMI를 공유할 수 있습니다.
  + 암호화된 스냅샷은 고객 관리형 키로 암호화해야 합니다. 기본 AWS 관리형 키로 암호화된 스냅샷의 지원을 받는 AMI는 공유할 수 없습니다.
  + 암호화된 스냅샷의 지원을 받는 AMI를 공유하는 경우 조직 또는 OU가 스냅샷을 암호화하는 데 사용된 고객 관리형 키를 사용하도록 허용해야 합니다. 자세한 내용은 [조직 및 OU가 KMS 키를 사용할 수 있도록 허용](allow-org-ou-to-use-key.md) 섹션을 참조하세요.
+ **리전** - AMI는 리전 리소스입니다. AMI를 공유하면 공유한 리전에서만 사용할 수 있습니다. AMI를 다른 리전에서 사용할 수 있도록 하려면 AMI를 해당 리전에 복사한 후 공유하세요. 자세한 내용은 [Amazon EC2 AMI 복사](CopyingAMIs.md) 섹션을 참조하세요.
+ **사용** - AMI를 공유하면 사용자는 AMI에서만 인스턴스를 시작할 수 있습니다. 삭제, 공유 또는 수정할 수 없습니다. 그러나 AMI를 사용하여 인스턴스를 시작한 후에는 시작한 인스턴스에서 AMI를 생성할 수 있습니다.
+ **결제** - 다른 AWS 계정이 인스턴스를 시작하기 위해 AMI를 사용하는 경우에는 요금이 청구되지 않습니다. AMI를 사용하여 인스턴스를 시작하는 계정에는 AMI가 시작하는 인스턴스에 대한 요금이 청구됩니다.

# 조직 또는 조직 단위의 ARN 가져오기
<a name="get-org-ou-ARN"></a>

조직 및 조직 단위 ARN에는 12자리 관리 계정 번호가 포함되어 있습니다. 관리 계정 번호를 모르는 경우 각각에 대한 ARN을 가져올 조직 및 조직 단위를 설명할 수 있습니다. 다음 예제에서 `123456789012`는 관리 계정의 계정 ID입니다.

**필수 권한**  
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) 명령을 사용합니다. 조직 ARN만 반환하는 `--query` 옵션을 추가합니다.

```
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 관리형 키로 암호화된 스냅샷의 지원을 받는 AMI는 공유할 수 없습니다.

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 키에 속한 계정)에 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)** 탭을 선택한 다음 **공유 조직/OU(Shared organizations/OUs)**까지 아래로 스크롤합니다.

   공유되는 AMI를 찾으려면 [Amazon EC2 인스턴스에 사용할 공유 AMI 찾기](usingsharedamis-finding.md) 섹션을 참조하세요.

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

**AMI를 공유한 조직 및 OU를 확인하려면**  
[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) 명령을 `launchPermission` 속성과 함께 사용합니다.

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

AMI를 조직 또는 OU와 공유할 수 있습니다.

**참고**  
AMI를 공유하기 위해서 해당 AMI의 레퍼런스인 Amazon EBS 스냅샷을 함께 공유할 필요는 없습니다. AMI만 공유하면 됩니다. 그러면 시스템이 시작에 필요한 EBS 스냅샷 액세스 권한을 자동으로 인스턴스에 제공합니다. 그러나 AMI가 참조하는 스냅샷을 암호화하는 데 사용되는 KMS 키를 공유해야 합니다. 자세한 내용은 [조직 및 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)**, **AMI 권한 수정(Edit AMI permissions)**을 선택합니다.

1. **AMI 가용성(AMI availability)**에서 **프라이빗(Private)**을 선택합니다.

1. **공유 조직/OU(Shared organizations/OUs)** 옆에서 **조직/OU ARN 추가(Add organization/OU ARN)**를 선택합니다.

1. **조직/OU ARN(Organization/OU ARN)**에 AMI를 공유할 조직 ARN 또는 OU ARN을 입력한 다음 **AMI 공유(Share AMI)**를 선택합니다. ID뿐 아니라 전체 ARN을 지정해야 합니다.

   이 AMI를 다수의 조직 또는 OU와 공유하려면 이 단계를 반복하여 필요한 모든 조직 또는 OU를 추가합니다.

1. 작업을 마쳤으면 [**변경 사항 저장(Save changes)**]을 선택합니다.

1. (선택 사항) AMI를 공유한 조직 또는 OU를 보려면 목록에서 AMI를 선택하고 **권한(Permissions)** 탭을 선택한 다음 **공유 조직/OU(Shared organizations/OUs)**까지 아래로 스크롤합니다. 공유되는 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) 명령은 지정한 OU에 특정 AMI의 시작 권한을 허용하는 데 사용됩니다. ID뿐 아니라 전체 ARN을 지정해야 합니다.

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

**모든 조직, OU 및 AWS 계정과 AMI 공유 중지**  
다음 명령은 특정 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)**, **AMI 권한 수정(Edit AMI permissions)**을 선택합니다.

1. **공유 조직/OU(Shared organizations/OUs)**에서 AMI 공유를 중지할 조직 또는 OU를 선택한 다음 **선택한 항목 제거(Remove selected)**를 선택합니다.

1. 작업을 마쳤으면 [**변경 사항 저장(Save changes)**]을 선택합니다.

1. (선택 사항) 조직 또는 OU와의 AMI 공유를 중지했는지 확인하려면 목록에서 AMI를 선택하고 **권한(Permissions)** 탭을 선택한 다음 **공유 조직/OU(Shared organizations/OUs)**까지 아래로 스크롤합니다.

------
#### [ 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}]"
```

**모든 조직, OU 및 AWS 계정과 AMI 공유 중지**  
[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"
```

**모든 조직, OU 및 AWS 계정과 AMI 공유 중지**  
[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 계정과 공유할 수 있습니다. 이런 작업은 AWS 계정 ID만 있으면 가능합니다.

AWS 계정 ID는 12자리 숫자(예: `012345678901`)이며, AWS 계정을 고유하게 식별합니다. 자세한 내용은 *AWS Account Management 참조 안내서*의 [AWS 계정 식별자 보기](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)를 참조하세요.



## 고려 사항
<a name="considerations-for-sharing-AMI-with-accounts"></a>

특정 AWS 계정과 AMI를 공유하는 경우 다음 사항을 고려하세요.
+ **소유권** - AMI를 공유하려면 사용자의 AWS 계정이 AMI를 소유해야 합니다.
+ **공유 제한** - 리전 내에서 AMI를 공유할 수 있는 최대 엔터티 수는 [Amazon EC2 서비스 할당량](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)을 참조하세요.
+ **태그** - 사용자 정의 태그(AMI에 연결하는 태그)는 공유할 수 없습니다. AMI를 공유하면 AMI가 공유되는 AWS 계정에서 사용자 정의 태그를 사용할 수 없습니다.
+ **스냅샷** - AMI를 공유하기 위해 해당 AMI의 레퍼런스인 Amazon EBS 스냅샷을 함께 공유할 필요는 없습니다. AMI 자체만 공유할 수 있으며, 시스템에서 시작을 위해 참조된 EBS 스냅샷에 대한 액세스 권한을 인스턴스에 제공합니다. 그러나 AMI가 참조하는 스냅샷을 암호화하는 데 사용되는 모든 KMS 키를 공유해야 합니다. 자세한 내용은 *Amazon EBS 사용 설명서*의 [Share an Amazon EBS snapshot](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 User Guide의 [Required AWS KMS key policy for use with encrypted volumes](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) 섹션을 참조하세요.
+ **결제** - 다른 AWS 계정이 인스턴스를 시작하기 위해 AMI를 사용하는 경우에는 요금이 청구되지 않습니다. AMI를 사용하여 인스턴스를 시작하는 계정에는 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)**을 선택합니다.

1. **프라이빗(Private)**을 선택합니다.

1. **공유 계정(Shared accounts)**에서 **계정 ID 추가(Add account ID)**를 선택합니다.

1. **AWS 계정 ID**에서 AMI를 공유하려는 AWS 계정 ID를 입력한 다음 **Share AMI**(AMI 공유)를 선택합니다.

   이 AMI를 다수의 계정과 공유하려면 모든 필수 계정 ID가 추가될 때까지 단계 5 및 6을 반복합니다.

1. 작업을 마쳤으면 **변경 사항 저장(Save changes)**을 선택합니다.

1. (선택 사항) AMI를 공유하는 AWS 계정 계정 ID를 보려면 목록에서 AMI를 선택하고 **Permissions**(권한) 탭을 선택합니다. 공유되는 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
```

------

# AWS 계정과 AMI 공유 취소
<a name="cancel-sharing-an-AMI"></a>

AMI의 시작 권한에 계정을 추가하여 Amazon Machine Image(AMI)를 [특정 AWS 계정과 공유](sharingamis-explicit.md)할 수 있습니다. AMI가 AWS 계정과 공유된 경우 더 이상 계정과 이를 공유하지 않으려면 AMI의 시작 권한에서 해당 계정을 제거합니다. `cancel-image-launch-permission` AWS CLI 명령을 실행하여 이 작업을 수행할 수 있습니다. 이 명령을 실행하면 지정된 AMI에 대한 시작 권한에서 AWS 계정이 제거됩니다. 사용자의 AWS 계정과 공유되는 AMI를 찾으려면 [Amazon EC2 인스턴스에 사용할 공유 AMI 찾기](usingsharedamis-finding.md) 섹션을 참조하세요.

예를 들어, 사용자와 공유되었지만 사용되지 않거나 사용 중단된 AMI로 인스턴스를 시작할 가능성을 줄이기 위해 사용자 계정과 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 및 SDK만 AMI의 시작 권한에서 계정 제거를 지원합니다. EC2 콘솔은 현재 이 작업을 지원하지 않습니다.

## 계정과 AMI 공유 취소
<a name="cancel-image-launch-permission"></a>

**참고**  
계정과 AMI 공유를 취소한 후에는 이를 실행 취소할 수 없습니다. 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)

AWS Marketplace용 AMI를 구축하는 경우에는 *AWS Marketplace 판매자 가이드*의 [AMI 구축 모범 사례](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 default 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 도구)로 전송되면, 퍼블릭 키(Amazon EC2에서 `CreateKeyPair` 또는 `ImportKeyPair`로의 호출이 이루어진 후에 서버에 저장하는 키 페어의 일부)를 인스턴스 메타데이터에 대한 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/는 링크-로컬 주소이며 인스턴스에서만 유효합니다.

------
#### [ 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) 섹션을 참조하세요.
+ 번들링 전에는 항상 셸 기록을 삭제합니다. 동일한 AMI로 하나 이상의 번들을 업로드하려고 시도하면 셸 기록에 액세스 키가 포함됩니다. 다음 명령은 인스턴스 내에서 번들링을 실시하기 전 마지막 단계로 실행해야 합니다.

  ```
  [ec2-user ~]$ shred -u ~/.*history
  ```
**주의**  
위 경고에서 설명한 **shred**의 제한은 여기에도 적용됩니다.  
bash는 종료 시점에서 현재 세션의 이력을 디스크에 기록한다는 점을 유의하세요. `~/.bash_history`를 삭제한 후 인스턴스에서 로그아웃했다가 다시 로그인할 경우 `~/.bash_history`가 다시 생성되고 이전 세션에서 실행한 모든 명령이 포함되어 있는 것을 알 수 있습니다.  
bash 이외의 다른 프로그램도 디스크에 이력을 기록하므로 불필요한 DOT 파일 및 DOT 디렉터리를 삭제 또는 제외하도록 주의하세요.
+ 실행 중인 인스턴스를 번들링하려면 프라이빗 키와 X.509 인증서가 필요합니다. 이런 정보와 다른 자격 증명은 번들링에 포함되지 않은 장소(예: 인스턴스 저장소)에 따로 보관하세요.

# Amazon EventBridge를 사용하여 AMI 이벤트 모니터링
<a name="monitor-ami-events"></a>

Amazon Machine Image(AMI)의 상태가 변경되면 Amazon EC2는 Amazon EventBridge(이전의 Amazon CloudWatch Events)로 전송되는 이벤트를 생성합니다. 이벤트는 JSON 형식의 기본 EventBridge 이벤트 버스로 전송됩니다. Amazon EventBridge를 사용하여 이러한 이벤트를 감지하고 대응할 수 있습니다. 이벤트에 대한 응답으로 작업을 트리거하는 EventBridge에서 규칙을 생성하여 이를 수행합니다. 예를 들어 AMI 생성 프로세스가 완료된 시점을 감지한 다음 Amazon SNS 주제를 호출하여 사용자에게 이메일 알림을 전송하는 EventBridge 규칙을 생성할 수 있습니다.

AMI가 다음 상태가 되면 Amazon EC2는 `EC2 AMI State Change` 이벤트를 생성합니다.
+ `available`
+ `failed`
+ `deregistered`
+ `disabled`

이벤트는 최선의 작업을 기반으로 생성됩니다.

다음 표에는 AMI 작업과 AMI의 가능한 상태가 나열되어 있습니다. 표에서 **예**는 해당 작업이 실행될 때 AMI의 가능한 상태를 나타냅니다.


| AMI 작업 | available | failed | deregistered | disabled | 
| --- | --- | --- | --- | --- | 
| CopyImage | 예 | 예 |  |  | 
|  CreateImage  |  예  |  예  |  |  | 
|  CreateRestoreImageTask  | 예 | 예 |  |  | 
| DeregisterImage |  |  |  예  |  | 
|  DisableImage  |  |  |  |  예  | 
|  EnableImage  |  예  |  |  |  | 
| RegisterImage | 예 | 예 |  |  | 

**EC2 AMI State Change 이벤트**
+ [이벤트 세부 정보](#ami-events)
+ [available 이벤트](#ami-event-available)
+ [failed 이벤트](#ami-event-failed)
+ [deregistered 이벤트](#ami-event-deregistered)
+ [disabled 이벤트](#ami-event-disabled)

## 이벤트 세부 정보
<a name="ami-events"></a>

이벤트에서 다음 필드를 사용하여 작업을 트리거하는 규칙을 생성할 수 있습니다.

`"source": "aws.ec2"`  
Amazon EC2에서 시작된 이벤트를 식별합니다.

`"detail-type": "EC2 AMI State Change"`  
이벤트 이름을 식별합니다.

`"detail": { "ImageId": "ami-0abcdef1234567890", "State": "available", }`  
AMI ID와 AMI 상태(`available`, `failed`, `deregistered` 또는 `disabled`)를 제공합니다.

자세한 내용은 **Amazon EventBridge 사용 설명서의 다음 섹션을 참조하세요.
+ [Amazon EventBridge 이벤트](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)
+ [Amazon EventBridge 이벤트 패턴](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Amazon EventBridge 규칙](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

Lambda 함수를 생성하고 해당 Lambda 함수를 실행하는 EventBridge 규칙을 생성하는 방법에 대한 튜토리얼은 **AWS Lambda 사용자 가이드의 [Tutorial: Log the state of an Amazon EC2 instance using EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-log-ec2-instance-state.html)를 참조하세요.

## available 이벤트
<a name="ami-event-available"></a>

다음은 `CreateImage`, `CopyImage`, `RegisterImage`, `CreateRestoreImageTask` 또는 `EnableImage` 작업이 성공한 후 AMI가 `available` 상태가 될 때 Amazon EC2가 생성하는 이벤트의 예입니다.

`"State": "available"`는 작업이 성공했음을 나타냅니다.

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "available",
        "ErrorMessage": ""
    }
}
```

## failed 이벤트
<a name="ami-event-failed"></a>

다음은 `CreateImage`, `CopyImage`, `RegisterImage` 또는 `CreateRestoreImageTask` 작업이 성공한 후 AMI가 `failed` 상태가 될 때 Amazon EC2가 생성하는 이벤트의 예입니다.

다음 필드는 관련 정보를 제공합니다.
+ `"State": "failed"` - 작업이 실패했음을 나타냅니다.
+ `"ErrorMessage": ""` - 실패한 작업의 이유를 제공합니다.

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "failed",
        "ErrorMessage": "Description of failure"
    }
}
```

## deregistered 이벤트
<a name="ami-event-deregistered"></a>

다음은 `DeregisterImage` 작업이 성공한 후 AMI가 `deregistered` 상태가 될 때 Amazon EC2가 생성하는 이벤트의 예입니다. 작업이 실패하면 이벤트가 생성되지 않습니다. `DeregisterImage`는 동기 작업이기 때문에 모든 실패는 즉시 알려집니다.

`"State": "deregistered"`는 `DeregisterImage` 작업이 성공했음을 나타냅니다.

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "deregistered",
        "ErrorMessage": ""
    }
}
```

## disabled 이벤트
<a name="ami-event-disabled"></a>

다음은 `DisableImage` 작업이 성공한 후 AMI가 `disabled` 상태가 될 때 Amazon EC2가 생성하는 이벤트의 예입니다. 작업이 실패하면 이벤트가 생성되지 않습니다. `DisableImage`는 동기 작업이기 때문에 모든 실패는 즉시 알려집니다.

`"State": "disabled"`는 `DisableImage` 작업이 성공했음을 나타냅니다.

```
{
    "version": "0",
    "id": "example-9f07-51db-246b-d8b8441bcdf0",
    "detail-type": "EC2 AMI State Change",
    "source": "aws.ec2",
    "account": "012345678901",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": ["arn:aws:ec2:us-east-1::image/ami-0abcdef1234567890"],
    "detail": {
        "RequestId": "example-9dcc-40a6-aa77-7ce457d5442b",
        "ImageId": "ami-0abcdef1234567890",
        "State": "disabled",
        "ErrorMessage": ""
    }
}
```

# AMI 결제 정보 이해
<a name="ami-billing-info"></a>

다수의 Amazon Machine Image(AMI) 중에서 선택하여 인스턴스를 시작할 수 있습니다. AMI는 다양한 운영 체제 플랫폼 및 기능을 지원합니다. 인스턴스를 시작할 때 선택한 AMI가 최종 AWS 결제 금액에 미치는 영향을 이해하려면 관련 운영 체제 플랫폼 및 결제 정보를 조사하면 됩니다. 온디맨드 또는 스팟 인스턴스를 시작하거나 예약 인스턴스를 구매하기 전에 이 작업을 수행하세요.

다음은 AMI를 미리 조사하는 것이 필요에 가장 적합한 AMI를 선택하는 데 어떤 도움이 되는지 보여주는 두 가지 예입니다.
+ 스팟 인스턴스의 경우 AMI의 [**플랫폼 세부 정보(Platform details)**]를 사용하여 해당 AMI가 스팟 인스턴스에 대해 지원되는지 확인할 수 있습니다.
+ 예약 인스턴스를 구매하는 경우 AMI의 [**플랫폼 세부 정보(Platform details)**]에 매핑되는 운영 체제 플랫폼([**플랫폼(Platform)**)을 선택할 수 있습니다.

인스턴스 요금에 대한 자세한 내용은 [Amazon EC2 요금](https://aws.amazon.com/ec2/pricing/)을 참조하세요.

**Topics**
+ [AMI 결제 정보 필드](billing-info-fields.md)
+ [AMI 결제 및 사용 세부 정보 찾기](view-billing-info.md)
+ [청구서의 AMI 요금 확인](verify-ami-charges.md)

# AMI 결제 정보 필드
<a name="billing-info-fields"></a>

다음 필드는 AMI와 연결된 결제 정보를 제공합니다.

플랫폼 세부 정보  
 AMI의 결제 코드와 연결된 플랫폼 세부 정보입니다. 예를 들어 `Red Hat Enterprise Linux`입니다.

사용 작업  
AMI와 연결된 Amazon EC2 인스턴스 및 결제 코드의 작업입니다. 예를 들어 `RunInstances:0010`입니다. [**사용 작업(Usage operation)**]은 AWS 비용 및 사용 보고서(CUR) 및 [AWS 가격 목록 API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html)의 [lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation) 열에 해당합니다.

Amazon EC2 콘솔의 **인스턴스** 또는 **AMI** 페이지나 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 또는 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 명령에서 반환되는 응답에서 이러한 필드를 볼 수 있습니다.

## 샘플 데이터: 플랫폼별 사용 작업
<a name="billing-info"></a>

다음 표에는 Amazon EC2 콘솔의 **인스턴스** 또는 **AMI **페이지나 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 또는 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) 명령에서 반환된 응답에 표시될 수 있는 플랫폼 세부 정보와 사용 작업 값이 나와 있습니다.


| 플랫폼 세부 정보 | 사용 작업 2 | 
| --- | --- | 
|  Linux/UNIX  |  RunInstances  | 
|  Red Hat BYOL Linux  |  RunInstances:00g0 3  | 
|  Red Hat Enterprise Linux  |  RunInstances:0010  | 
|  Red Hat Enterprise Linux with HA  |  RunInstances:1010  | 
|  Red Hat Enterprise Linux with SQL Server Standard and HA  |  RunInstances:1014  | 
|  Red Hat Enterprise Linux with SQL Server Enterprise and HA  |  RunInstances:1110  | 
|  Red Hat Enterprise Linux with SQL Server Standard  |  RunInstances:0014  | 
|  Red Hat Enterprise Linux with SQL Server Web  |  RunInstances:0210  | 
|  Red Hat Enterprise Linux with SQL Server Enterprise  |  RunInstances:0110  | 
|  SQL Server Enterprise  |  RunInstances:0100  | 
|  SQL Server Standard  |  RunInstances:0004  | 
|  SQL Server Web  |  RunInstances:0200  | 
|  SUSE Linux  |  RunInstances:000g  | 
| Ubuntu Pro |  RunInstances:0g00  | 
|  Windows  |  RunInstances:0002  | 
|  Windows BYOL  |  RunInstances:0800  | 
|  Windows with SQL Server Enterprise 1  |  RunInstances:0102  | 
|  Windows with SQL Server Standard 1  |  RunInstances:0006  | 
|  Windows with SQL Server Web 1  |  RunInstances:0202  | 

1 AMI에 두 개의 소프트웨어 라이선스가 연결된 경우 **플랫폼 세부 정보** 필드에 모두 표시됩니다.

2 스팟 인스턴스를 실행 중인 경우 AWS 비용 및 사용 보고서의 [https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)은 여기에 나열된 **사용 작업** 값과 다를 수 있습니다. 예를 들어, `[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)`에 `RunInstances:0010:SV006`이 표시되는 경우 Amazon EC2가 미국 동부(버지니아 북부)의 영역 6에서 Red Hat Enterprise Linux 스팟 인스턴스 시간을 실행하고 있음을 의미합니다.

3 사용 보고서에 RunInstances (Linux/UNIX)로 표시됩니다.

# AMI 결제 및 사용 세부 정보 찾기
<a name="view-billing-info"></a>

다음은 청구서의 AMI 요금을 확인하는 데 도움이 되는 속성입니다.
+ **플랫폼 세부 정보**
+ **사용 작업**
+ **AMI ID**

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

**특정 AMI의 AMI 결제 정보를 찾는 방법**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **AMI**를 선택합니다.

1. AMI를 선택합니다.

1. **세부 정보** 탭에서 **플랫폼 세부 정보** 및 **사용 작업**을 찾습니다.

**특정 인스턴스의 AMI 결제 정보를 찾는 방법**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. 인스턴스를 선택합니다.

1. **세부 정보** 탭에서 **인스턴스 세부 정보**를 확장하고 **플랫폼 세부 정보** 및 **사용 작업**을 찾습니다.

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

**특정 AMI의 AMI 결제 정보를 찾는 방법**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 명령을 사용합니다.

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query "Images[].{PlatformDetails:PlatformDetails,UsageOperation:UsageOperation}"
```

다음은 Linux AMI의 예시 출력입니다.

```
[
    {
        "PlatformDetails": "Linux/UNIX",
        "UsageOperation": "RunInstances"
    }
]
```

**특정 인스턴스의 AMI 결제 정보를 찾는 방법**  
아래와 같이 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 명령을 사용합니다.

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[].Instances[].{PlatformDetails:PlatformDetails,UsageOperation:UsageOperation}"
```

다음은 Windows 인스턴스의 예시 출력입니다.

```
[
    {
        "PlatformDetails": "Windows",
        "UsageOperation": "RunInstances:0002"
    }
]
```

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

**특정 AMI의 AMI 결제 정보를 찾는 방법**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet을 사용합니다.

```
Get-EC2Image `
    -ImageId ami-0abcdef1234567890 | `
    Format-List PlatformDetails, UsageOperation
```

다음은 Linux AMI의 예시 출력입니다.

```
PlatformDetails : Linux/UNIX
UsageOperation  : RunInstances
```

**특정 인스턴스의 AMI 결제 정보를 찾는 방법**  
[Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet을 사용합니다.

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | `
    Format-List PlatformDetails, UsageOperation
```

다음은 Windows 인스턴스의 예시 출력입니다.

```
PlatformDetails : Windows
UsageOperation  : RunInstances:0002
```

------

# 청구서의 AMI 요금 확인
<a name="verify-ami-charges"></a>

계획되지 않은 비용이 발생하지 않도록 AWS 비용 및 사용 보고서(CUR)의 인스턴스에 대한 결제 정보가 인스턴스 시작에 사용한 AMI에 연결된 결제 정보와 일치하는지 확인할 수 있습니다.

결제 정보를 확인하려면 CUR에서 인스턴스 ID를 찾아 `[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 열에서 해당 값을 확인합니다. 이 값은 AMI에 연결된 [**사용 작업(Usage operation)**] 값과 일치해야 합니다.

예를 들어 `ami-0123456789EXAMPLE` AMI의 결제 정보는 다음과 같습니다.
+ **플랫폼 세부 정보** = `Red Hat Enterprise Linux`
+ **사용 작업** = `RunInstances:0010`

이 AMI를 사용하여 인스턴스를 시작한 경우 CUR에서 인스턴스 ID를 찾아 `[lineitem/Operation](https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)` 열에서 해당 값을 확인할 수 있습니다. 이 예시에서 값은 `RunInstances:0010`이어야 합니다.

# Amazon EC2의 AMI 할당량
<a name="ami-quotas"></a>

다음 할당량이 AMI 생성 및 공유에 적용됩니다. 할당량은 AWS 리전별로 적용됩니다.


****  

| 할당량 이름 | 설명 | 리전별 기본 할당량 | 
| --- | --- | --- | 
| AMI | 리전별로 허용되는 최대 퍼블릭 및 프라이빗 AMI 수입니다. 여기에는 사용 가능, 보류 중 및 비활성화된 AMI 및 휴지통의 AMI가 포함됩니다. | 50,000 | 
| 퍼블릭 AMI | 리전별로 허용되는 최대 퍼블릭 AMI 수입니다(휴지통의 퍼블릭 AMI 포함). | 5 | 
| AMI 공유 | 리전 내에서 AMI를 공유할 수 있는 최대 엔터티(조직, 조직 단위(OU), 계정) 수입니다. 조직 또는 OU와 AMI를 공유하는 경우 조직 또는 OU의 계정 수는 할당량에 포함되지 않습니다. | 1,000 | 

할당량을 초과했는데 더 많은 AMI를 생성하거나 공유하려는 경우 다음과 같이 하면 됩니다.
+ 총 AMI 할당량 또는 퍼블릭 AMI 할당량을 초과한 경우 사용하지 않은 이미지의 등록 취소를 고려하세요.
+ 퍼블릭 AMI 할당량을 초과한 경우 하나 이상의 퍼블릭 AMI를 프라이빗으로 전환하는 것을 고려하세요.
+ AMI 공유 할당량을 초과한 경우 별도의 계정 대신 조직 또는 OU와 AMI를 공유하는 것을 고려하세요.
+ AMI의 할당량 증가를 요청하세요.

## AMI의 할당량 증가 요청
<a name="request-ami-quota-increase"></a>

AMI의 기본 할당량보다 더 많이 필요한 경우 할당량 증가를 요청할 수 있습니다.

**AMI의 할당량 증가 요청 방법**

1. [https://console.aws.amazon.com/servicequotas/](https://console.aws.amazon.com/servicequotas/)에서 Service Quotas 콘솔을 엽니다.

1. 탐색 창에서 **AWS 서비스**를 선택합니다.

1. 목록에서 **Amazon Elastic Compute Cloud(Amazon EC2)**를 선택하거나 검색 상자에 서비스 이름을 입력합니다.

1. 증가를 요청할 AMI 할당량을 선택합니다. 선택할 수 있는 AMI 할당량은 다음과 같습니다.
   + AMI
   + 퍼블릭 AMI
   + AMI 공유

1. **할당량 증가 요청**을 선택합니다.

1. **Change quota value**(할당량 값 변경)에 새 할당량 값을 입력한 다음, **Request**(요청)를 선택합니다.

보류 중이거나 최근에 해결된 요청을 보려면 탐색 창에서 **대시보드**를 선택합니다. 보류 중인 요청의 경우 요청 상태를 선택하여 요청 접수증을 엽니다. 요청의 초기 상태는 **Pending**(보류 중)입니다. 상태가 **Quota requested**(할당량 요청됨)로 변경되면 **Support Center case number**(지원 센터 케이스 번호) 아래에 케이스 번호가 표시됩니다. 이 케이스 번호를 선택하여 요청의 티켓을 엽니다.

요청이 해결되면 할당량에 대한 **적용된 할당량 값**이 새 값으로 설정됩니다.

자세한 내용은 [Service Quotas 사용 설명서](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)를 참조하세요.