

# 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
   ```

------