

# Amazon EC2 시작 템플릿에 필요한 IAM 권한
<a name="permissions-for-launch-templates"></a>

IAM 권한을 사용하여 사용자가 시작 템플릿이나 시작 템플릿 버전 나열, 보기, 생성 또는 삭제를 수행할 수 있는지 제어할 수 있습니다.

**중요**  
사용자가 시작 템플릿이나 시작 템플릿 버전을 생성할 때 시작 템플릿에서 지정할 수 있는 리소스를 제한하기 위해 리소스 수준의 권한을 사용할 수 없습니다. 따라서 신뢰할 수 있는 관리자에게만 시작 템플릿과 시작 템플릿 버전을 생성할 수 있는 권한을 부여해야 합니다.

시작 템플릿을 사용하는 모든 사용자에게 시작 템플릿에 지정된 리소스를 사용하고 생성할 수 있는 권한을 부여해야 합니다. 예제:
+ 공유 프라이빗 Amazon Machine Image(AMI)에서 인스턴스를 시작하려면 사용자에게 AMI에 대한 시작 권한이 있어야 합니다.
+ 기존 스냅샷의 태그를 사용하여 EBS 볼륨을 생성하려면 사용자에게 스냅샷에 대한 읽기 권한과 볼륨을 생성하고 태그를 지정할 수 있는 권한이 있어야 합니다.

**Topics**
+ [ec2:CreateLaunchTemplate](#permissions-for-launch-templates-create)
+ [ec2:DescribeLaunchTemplates](#permissions-for-launch-templates-view)
+ [ec2:DescribeLaunchTemplateVersions](#permissions-for-launch-template-versions-view)
+ [ec2:DeleteLaunchTemplate](#permissions-for-launch-templates-delete)
+ [버전 관리 권한 제어](#permissions-for-launch-template-versions)
+ [시작 템플릿의 태그에 대한 액세스 제어](#permissions-for-launch-templates-tags)

## ec2:CreateLaunchTemplate
<a name="permissions-for-launch-templates-create"></a>

시작 템플릿을 콘솔에서 생성하거나 API를 사용하여 생성하려면 보안 주체에게 IAM 정책에서 `ec2:CreateLaunchTemplate` 권한이 있어야 합니다. 가능하면 태그를 사용하여 계정의 시작 템플릿에 대한 액세스를 제어합니다.

예를 들어 다음 IAM 정책 문에서는 템플릿이 지정된 태그(*`purpose`*=*`testing`*)를 사용하는 경우에만 보안 주체에게 시작 템플릿을 생성할 수 있는 권한을 부여합니다.

```
{
    "Sid": "IAMPolicyForCreatingTaggedLaunchTemplates",
    "Action": "ec2:CreateLaunchTemplate",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/purpose": "testing"
        }
    }
}
```

시작 템플릿을 생성하는 보안 주체에게는 다음과 같은 몇 가지 관련 권한이 필요할 수도 있습니다.
+ **ec2:CreateTags** - `CreateLaunchTemplate` 작업 중에 시작 템플릿에 태그를 추가하려면 `CreateLaunchTemplate` 호출자는 IAM 정책에서 `ec2:CreateTags` 권한이 있어야 합니다.
+ **ec2:RunInstances** - 생성한 시작 템플릿에서 EC2 인스턴스를 시작하려면 보안 주체는 IAM 정책에서 `ec2:RunInstances` 권한도 있어야 합니다.

태그를 적용하는 리소스 생성 작업의 경우 사용자는 `ec2:CreateTags` 권한이 있어야 합니다. 다음 IAM 정책 문은 `ec2:CreateAction` 조건 키를 사용하여 사용자가 `CreateLaunchTemplate`의 컨텍스트에서만 태그를 생성하도록 허용합니다. 사용자는 기존 시작 템플릿이나 다른 어떤 리소스에도 태그를 지정할 수 없습니다. 자세한 내용은 [생성 시 Amazon EC2 리소스 태그 지정에 대한 권한 부여](supported-iam-actions-tagging.md) 섹션을 참조하세요.

```
{
    "Sid": "IAMPolicyForTaggingLaunchTemplatesOnCreation",
    "Action": "ec2:CreateTags",
    "Effect": "Allow",
    "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/*",
    "Condition": {
        "StringEquals": {
            "ec2:CreateAction": "CreateLaunchTemplate"
        }
    }
}
```

시작 템플릿을 생성한 IAM 사용자에게는 자신이 생성한 시작 템플릿을 사용할 수 있는 권한이 자동으로 부여되지 않습니다. 다른 보안 주체와 마찬가지로 시작 템플릿 생성자는 IAM 정책을 통해 권한을 받아야 합니다. IAM 사용자가 시작 템플릿에서 EC2 인스턴스를 시작하려는 경우 `ec2:RunInstances` 권한이 있어야 합니다. 이러한 권한을 부여할 때 사용자가 특정 태그 또는 특정 ID의 시작 템플릿만 사용할 수 있도록 지정할 수 있습니다. 또한 `RunInstances` 호출에 대한 리소스 수준 권한을 지정하여 시작 템플릿을 사용하는 모든 사용자가 인스턴스를 시작할 때 참조하고 사용할 수 있는 AMI 및 기타 리소스를 제어할 수도 있습니다. 예시 정책은 [시작 템플릿](ExamplePolicies_EC2.md#iam-example-runinstances-launch-templates) 섹션을 참조하세요.

## ec2:DescribeLaunchTemplates
<a name="permissions-for-launch-templates-view"></a>

계정의 시작 템플릿을 나열하고 보려면 보안 주체에게 IAM 정책에 `ec2:DescribeLaunchTemplates` 권한이 있어야 합니다. `Describe` 작업은 리소스 수준 권한을 지원하지 않으므로 조건 없이 지정해야 하며 정책의 리소스 요소 값은 `"*"`여야 합니다.

예를 들어 다음 IAM 정책 문은 보안 주체에게 계정의 모든 시작 템플릿을 나열하고 볼 수 있는 권한을 부여합니다.

```
{
    "Sid": "IAMPolicyForDescribingLaunchTemplates",
    "Action": "ec2:DescribeLaunchTemplates",
    "Effect": "Allow",
    "Resource": "*"
}
```

## ec2:DescribeLaunchTemplateVersions
<a name="permissions-for-launch-template-versions-view"></a>

시작 템플릿을 나열하고 보는 보안 주체에게는 시작 템플릿을 구성하는 전체 속성 집합을 검색할 수 있는 `ec2:DescribeLaunchTemplateVersions` 권한도 있어야 합니다.

계정에 시작 템플릿 버전을 나열하고 보려면 보안 주체에게 IAM 정책에서 `ec2:DescribeLaunchTemplateVersions` 권한이 있어야 합니다. `Describe` 작업은 리소스 수준 권한을 지원하지 않으므로 조건 없이 지정해야 하며 정책의 리소스 요소 값은 `"*"`여야 합니다.

예를 들어 다음 IAM 정책 문은 보안 주체에게 계정에서 모든 시작 템플릿 버전을 나열하고 볼 수 있는 권한을 부여합니다.

```
{
    "Sid": "IAMPolicyForDescribingLaunchTemplateVersions",
    "Effect": "Allow",
    "Action": "ec2:DescribeLaunchTemplateVersions",
    "Resource": "*"
}
```

## ec2:DeleteLaunchTemplate
<a name="permissions-for-launch-templates-delete"></a>

**중요**  
보안 주체에게 리소스를 삭제할 수 있는 권한을 부여할 때는 주의해야 합니다. 시작 템플릿을 삭제하면 그 시작 템플릿에 의존하는 AWS 리소스에 오류가 발생할 수도 있습니다.

시작 템플릿을 삭제하려면 보안 주체에게 IAM 정책에서 `ec2:DeleteLaunchTemplate` 권한이 있어야 합니다. 가능하면 태그 기반 조건 키를 사용하여 사용 권한을 제한합니다.

예를 들어 다음 IAM 정책 문에서는 템플릿에 지정된 태그(*`purpose`*=*`testing`*)가 있는 경우에만 보안 주체에게 시작 템플릿을 삭제할 수 있는 권한을 부여합니다.

```
{
    "Sid": "IAMPolicyForDeletingLaunchTemplates",
    "Action": "ec2:DeleteLaunchTemplate",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/purpose": "testing"
        }
    }
}
```

또는 ARN을 사용하여 IAM 정책이 적용되는 시작 템플릿을 식별할 수 있습니다.

시작 템플릿에는 다음과 같은 ARN이 있습니다.

```
"Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/lt-09477bcd97b0d310e"
```

여러 ARN을 목록으로 묶어 지정하거나 `Condition` 요소 없이 `Resource` 값 `"*"`를 지정하여 보안 주체가 계정의 모든 시작 템플릿을 삭제하도록 허용할 수 있습니다.

## 버전 관리 권한 제어
<a name="permissions-for-launch-template-versions"></a>

신뢰할 수 있는 관리자에게는 다음 예와 유사한 IAM 정책을 사용하여 시작 템플릿의 버전을 생성 및 삭제하고 시작 템플릿의 기본 버전을 변경할 수 있는 액세스 권한을 부여할 수 있습니다.

**중요**  
보안 주체에게 시작 템플릿 버전을 생성하거나 시작 템플릿을 수정할 수 있는 권한을 부여할 때는 주의해야 합니다.  
시작 템플릿 버전을 생성하면 Amazon EC2가 사용자를 대신하여 `Latest` 버전으로 인스턴스를 시작할 수 있는 AWS 리소스에 영향을 줍니다.
시작 템플릿을 수정하면 `Default`인 버전을 변경할 수 있으므로 Amazon EC2가 사용자를 대신하여 이 수정된 버전으로 인스턴스를 시작할 수 있는 AWS 리소스에 영향을 줍니다.
또한 `Latest` 또는 `Default` 시작 템플릿 버전과 상호 작용하는 AWS 리소스(예: EC2 Fleet 및 스팟 플릿)를 처리하는 방법에 주의해야 합니다. `Latest` 또는 `Default`에 다른 시작 템플릿 버전이 사용되는 경우 AWS 리소스와 사용자 상호 작용이 없기 때문에 Amazon EC2는 플릿의 목표 용량을 충족하기 위해 새 인스턴스를 시작할 때 완료해야 할 작업에 대한 권한을 다시 확인하지 않습니다. 사용자에게 `CreateLaunchTemplateVersion` 및 `ModifyLaunchTemplate` API를 호출할 수 있는 권한을 부여하면 플릿이 인스턴스 프로파일(IAM 역할에 대한 컨테이너)이 포함된 다른 시작 템플릿 버전을 가리키는 경우에도 사용자에게 사실상 `iam:PassRole` 권한이 부여됩니다. 따라서 사용자는 `iam:PassRole` 권한이 없더라도 잠재적으로 시작 템플릿을 업데이트하여 IAM 역할을 인스턴스에 전달할 수 있습니다. 시작 템플릿 버전을 생성하고 관리할 수 있는 사람에게 권한을 부여할 때 주의를 기울이면 이러한 위험을 관리할 수 있습니다.

### ec2:CreateLaunchTemplateVersion
<a name="permissions-for-launch-template-versions-create"></a>

시작 템플릿의 새 버전을 생성하려면 보안 주체에게 IAM 정책에서 시작 템플릿에 대한 `ec2:CreateLaunchTemplateVersion` 권한이 있어야 합니다.

예를 들어 다음 IAM 정책 문에서는 버전이 지정된 태그(*`environment`*=*`production`*)를 사용하는 경우에만 보안 주체에게 시작 템플릿 버전을 생성할 수 있는 권한을 부여합니다. 또는 하나 이상의 시작 템플릿 ARN을 지정하거나 `Condition` 요소 없이 `Resource` 값 `"*"`를 지정하여 보안 주체가 계정에 있는 모든 시작 템플릿의 버전을 생성하도록 허용할 수 있습니다.

```
{
    "Sid": "IAMPolicyForCreatingLaunchTemplateVersions",
    "Action": "ec2:CreateLaunchTemplateVersion",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/environment": "production"
        }
    }
}
```

### ec2:DeleteLaunchTemplateVersion
<a name="permissions-for-launch-template-versions-delete"></a>

**중요**  
보안 주체에 리소스를 삭제할 수 있는 권한을 부여할 때는 항상 주의해야 합니다. 시작 템플릿 버전을 삭제하면 그 시작 템플릿 버전에 의존하는 AWS 리소스에 오류가 발생할 수도 있습니다.

시작 템플릿 버전을 삭제하려면 보안 주체에게 IAM 정책에서 시작 템플릿에 대한 `ec2:DeleteLaunchTemplateVersion` 권한이 있어야 합니다.

예를 들어 다음 IAM 정책 문에서는 버전이 지정된 태그(*`environment`*=*`production`*)를 사용하는 경우에만 보안 주체에게 시작 템플릿 버전을 삭제할 수 있는 권한을 부여합니다. 또는 하나 이상의 템플릿 ARN을 지정하거나 `Condition` 요소 없이 `Resource` 값 `"*"`를 지정하여 보안 주체가 계정에 있는 모든 시작 템플릿의 버전을 삭제하도록 허용할 수 있습니다.

```
{
    "Sid": "IAMPolicyForDeletingLaunchTemplateVersions",
    "Action": "ec2:DeleteLaunchTemplateVersion",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/environment": "production"
        }
    }
}
```

### ec2:ModifyLaunchTemplate
<a name="permissions-for-launch-templates-update"></a>

시작 템플릿과 연결된 `Default` 버전을 변경하려면 보안 주체에게 IAM 정책에서 시작 템플릿에 대한 `ec2:ModifyLaunchTemplate` 권한이 있어야 합니다.

예를 들어 다음 IAM 정책 문에서는 시작 템플릿이 지정된 태그(*`environment`*=*`production`*)를 사용하는 경우에만 보안 주체에게 시작 템플릿을 수정할 수 있는 권한을 부여합니다. 또는 하나 이상의 시작 템플릿 ARN을 지정하거나 `Condition` 요소 없이 `Resource` 값 `"*"`를 지정하여 보안 주체가 계정에 있는 모든 시작 템플릿을 수정하도록 허용할 수 있습니다.

```
{
    "Sid": "IAMPolicyForModifyingLaunchTemplates",
    "Action": "ec2:ModifyLaunchTemplate",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/environment": "production"
        }
    }
}
```

## 시작 템플릿의 태그에 대한 액세스 제어
<a name="permissions-for-launch-templates-tags"></a>

리소스가 시작 템플릿인 경우 조건 키를 사용하여 태그 지정 권한을 제한할 수 있습니다. 예를 들어 다음 IAM 정책은 지정된 계정과 리전의 시작 템플릿에서 `temporary` 키가 있는 태그만 제거하도록 허용합니다.

```
{
    "Sid": "IAMPolicyForDeletingTagsOnLaunchTemplates",
    "Action": "ec2:DeleteTags",
    "Effect": "Allow",
    "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/*",
    "Condition": {
        "ForAllValues:StringEquals": {
            "aws:TagKeys": ["temporary"]
        }
    }
}
```

Amazon EC2 리소스에 적용할 수 있는 태그 키 및 값을 제어하는 데 사용할 수 있는 조건 키에 대한 자세한 내용은 [특정 태그에 대한 액세스 제어](supported-iam-actions-tagging.md#control-tagging)를 참조하세요.