Amazon EC2 시작 템플릿에 필요한 IAM 권한
Amazon EC2 시작 템플릿에 필요한 IAM 권한 (IAM permissions required for Amazon EC2 launch templates)
IAM 권한으로 사용자가 시작 템플릿이나 시작 템플릿 버전을 나열·보기·생성·삭제할 수 있는지 제어할 수 있어요.
중요 리소스 수준 권한으로 사용자가 시작 템플릿이나 시작 템플릿 버전을 만들 때 시작 템플릿에 지정할 수 있는 리소스를 제한할 수는 없어요. 따라서 신뢰할 수 있는 관리자에게만 시작 템플릿과 시작 템플릿 버전을 만들 권한을 부여하세요.
시작 템플릿을 사용할 모든 사용자에게는 시작 템플릿에 지정된 리소스를 만들고 액세스하는 데 필요한 권한을 부여해야 해요. 예를 들어:
- 공유된 프라이빗 AMI(Amazon Machine Image)에서 인스턴스를 시작하려면 시작 템플릿 사용자가 AMI에 대한 시작 권한(launch permission)이 있어야 해요.
- 기존 스냅샷에서 태그 포함 EBS 볼륨을 만들려면 시작 템플릿 사용자가 스냅샷에 대한 읽기 액세스 권한과 볼륨을 만들고 태그를 지정할 권한이 있어야 해요.
목차 (Contents)
- ec2:CreateLaunchTemplate
- ec2:DescribeLaunchTemplates
- ec2:DescribeLaunchTemplateVersions
- ec2:DeleteLaunchTemplate
- 버전 관리 권한 제어하기
- 시작 템플릿의 태그 액세스 제어하기
ec2:CreateLaunchTemplate
콘솔이나 API로 시작 템플릿을 만들려면 보안 주체(principal)가 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 리소스 태그 지정 권한 부여하기'를 참고하세요.
{
"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와 기타 리소스를 제어할 수 있어요. 예시 정책은 '시작 템플릿(Launch templates)'을 참고하세요.
ec2:DescribeLaunchTemplates
계정에서 시작 템플릿을 나열하고 보려면 보안 주체가 IAM 정책의 ec2:DescribeLaunchTemplates 권한을 가지고 있어야 해요. Describe 작업은 리소스 수준 권한을 지원하지 않으므로 조건 없이 지정해야 하고 정책의 resource 요소 값은 "*"여야 해요.
예를 들어 다음 IAM 정책 문은 보안 주체에게 계정의 모든 시작 템플릿을 나열하고 볼 권한을 부여해요.
{
"Sid": "IAMPolicyForDescribingLaunchTemplates",
"Action": "ec2:DescribeLaunchTemplates",
"Effect": "Allow",
"Resource": "*"
}
ec2:DescribeLaunchTemplateVersions
시작 템플릿을 나열하고 보는 보안 주체는 시작 템플릿을 구성하는 전체 속성 집합을 검색하려면 ec2:DescribeLaunchTemplateVersions 권한도 있어야 해요.
계정에서 시작 템플릿 버전을 나열하고 보려면 보안 주체가 IAM 정책의 ec2:DescribeLaunchTemplateVersions 권한을 가지고 있어야 해요. Describe 작업은 리소스 수준 권한을 지원하지 않으므로 조건 없이 지정해야 하고 정책의 resource 요소 값은 "*"여야 해요.
예를 들어 다음 IAM 정책 문은 보안 주체에게 계정의 모든 시작 템플릿 버전을 나열하고 볼 권한을 부여해요.
{
"Sid": "IAMPolicyForDescribingLaunchTemplateVersions",
"Effect": "Allow",
"Action": "ec2:DescribeLaunchTemplateVersions",
"Resource": "*"
}
ec2:DeleteLaunchTemplate
중요 보안 주체에게 리소스를 삭제할 권한을 줄 때는 주의하세요. 시작 템플릿을 삭제하면 시작 템플릿에 의존하는 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 값 "*"를 지정해 보안 주체가 계정의 어떤 시작 템플릿이든 삭제할 수 있게 할 수 있어요.
버전 관리 권한 제어하기 (Control versioning permissions)
신뢰할 수 있는 관리자를 위해 다음 예시와 유사한 IAM 정책을 사용해 시작 템플릿 버전 생성·삭제와 시작 템플릿 기본 버전 변경 권한을 부여할 수 있어요.
중요 보안 주체에게 시작 템플릿 버전을 만들거나 시작 템플릿을 수정할 권한을 줄 때는 주의하세요.
- 시작 템플릿 버전을 만들면 Latest 버전으로 Amazon EC2가 사용자를 대신해 인스턴스를 시작하도록 허용하는 모든 AWS 리소스에 영향을 줘요.
- 시작 템플릿을 수정하면 어떤 버전이 Default인지 바뀔 수 있고, 따라서 수정된 버전으로 Amazon EC2가 사용자를 대신해 인스턴스를 시작하도록 허용하는 모든 AWS 리소스에 영향을 줘요.
EC2 Fleet과 Spot Fleet처럼 Latest 또는 Default 시작 템플릿 버전과 상호작용하는 AWS 리소스를 처리할 때도 주의해야 해요. Latest 또는 Default에 다른 시작 템플릿 버전이 사용되면 Amazon EC2는 플릿의 대상 용량을 충족하기 위해 새 인스턴스를 시작할 때 완료될 작업에 대한 사용자 권한을 다시 확인하지 않아요. AWS 리소스와 사용자 상호작용이 없기 때문이에요. 사용자에게 CreateLaunchTemplateVersion과 ModifyLaunchTemplate API를 호출할 권한을 부여하면, 사용자가 인스턴스 프로필(IAM 역할용 컨테이너)이 포함된 다른 시작 템플릿 버전으로 플릿을 가리키는 경우 효과적으로 iam:PassRole 권한도 부여하게 돼요. 즉 사용자가 iam:PassRole 권한이 없어도 시작 템플릿을 업데이트해 인스턴스에 IAM 역할을 전달할 수 있다는 뜻이에요. 시작 템플릿 버전을 만들고 관리할 수 있는 사람에게 권한을 줄 때 주의해 이 위험을 관리할 수 있어요.
ec2:CreateLaunchTemplateVersion
시작 템플릿의 새 버전을 만들려면 보안 주체가 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
중요 언제나처럼 보안 주체에게 리소스를 삭제할 권한을 줄 때는 주의하세요. 시작 템플릿 버전을 삭제하면 시작 템플릿 버전에 의존하는 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
시작 템플릿과 연결된 Default 버전을 변경하려면 보안 주체가 IAM 정책에서 시작 템플릿에 대한 ec2:ModifyLaunchTemplate 권한을 가지고 있어야 해요.
예를 들어 다음 IAM 정책 문은 시작 템플릿이 지정된 태그(environment=production)를 사용할 경우에만 보안 주체에게 시작 템플릿을 수정할 권한을 부여해요. 또는 시작 템플릿 ARN을 하나나 여러 개 지정하거나, Condition 요소 없이 Resource 값 "*"를 지정해 보안 주체가 계정의 어떤 시작 템플릿을 수정할 수 있게 할 수도 있어요.
{
"Sid": "IAMPolicyForModifyingLaunchTemplates",
"Action": "ec2:ModifyLaunchTemplate",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/environment": "production"
}
}
}
시작 템플릿의 태그 액세스 제어하기 (Control access to tags on launch templates)
조건 키를 사용해 리소스가 시작 템플릿일 때 태그 지정 권한을 제한할 수 있어요. 예를 들어 다음 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 리소스에 적용할 수 있는 태그 키와 값을 제어하는 데 사용할 수 있는 조건 키에 대한 자세한 내용은 '특정 태그 액세스 제어하기'를 참고하세요.