使用 IAM 权限控制启动模板的访问权限 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 IAM 权限控制启动模板的访问权限

您可以使用 IAM 权限来控制用户可以执行哪些启动模板操作,例如查看、创建或删除启动模板。

授予用户创建启动模板和启动模板版本的权限后,您无法使用资源级权限来限制其可在启动模板中指定的资源。因此,请确保仅为相应的管理员授予创建启动模板和启动模板版本的权限。

您必须向将使用启动模板的任何人授予创建和访问启动模板中所指定资源所需的权限。例如:

  • 要从共享的私有亚马逊机器映像(AMI)启动实例,用户必须拥有 AMI 的启动权限。

  • 要使用现有快照的标签创建 EBS 卷,用户必须具有快照的读取权限以及创建和标记卷的权限。

ec2:CreateLaunchTemplate

要在控制台中或使用 API 创建启动模板,主体必须具有 IAM policy 中的 ec2:CreateLaunchTemplate 权限。尽可能使用标签来帮助您控制对账户中启动模板的访问权限。

例如,以下 IAM policy 声明仅在模板使用指定标签(purpose=testing)时才向主体授予创建启动模板的权限。

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

创建启动模板的主体可能需要一些相关权限,例如:

  • ec2:CreateTags – 要在 CreateLaunchTemplate 操作期间将标签添加到启动模板,CreateLaunchTemplate 调用者必须具有 IAM policy 中的 ec2:CreateTags 权限。

  • ec2:RunInstances – 要从其创建的启动模板启动 EC2 实例,主体还必须具有 IAM policy 中的 ec2:RunInstances 权限。

对于应用标签的资源创建操作,用户必须具有 ec2:CreateTags 权限。以下 IAM policy 语句使用 ec2:CreateAction 条件键,只允许用户在 CreateLaunchTemplate 上下文中创建标签。用户无法标记现有启动模板或任何其他资源。有关更多信息,请参阅 在创建过程中授予标记资源的权限

{ "Sid": "IAMPolicyForTaggingLaunchTemplatesOnCreation", "Action": "ec2:CreateTags", "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateLaunchTemplate" } } }

创建启动模板的 IAM 用户不会自动获得使用其创建的启动模板的权限。与任何其他主体一样,启动模板创建者需要通过 IAM policy 获得权限。如果 IAM 用户想要从启动模板启动 EC2 实例,则他们必须拥有 ec2:RunInstances 权限。在授予这些权限时,您可以指定用户只能使用带有特定标签或特定 ID 的启动模板。您还可以通过指定 RunInstances 调用的资源级权限,控制 AMI 和使用启动模板的任何人都可以在启动实例时引用和使用的其他资源。有关示例策略,请参阅 启动模板

ec2:DescribeLaunchTemplates

要列出账户中的启动模板,主体必须在 IAM policy 中具有 ec2:DescribeLaunchTemplates 权限。由于 Describe 操作不支持资源级权限,因此必须无条件地指定这些权限,并且策略中资源元素的值必须为 "*"

例如,以下 IAM policy 语句授予主体列出账户中所有启动模板的权限。

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

ec2:DescribeLaunchTemplateVersions

查看启动模板的主体还应具有 ec2:DescribeLaunchTemplateVersions 权限以检索构成启动模板的整组属性。

要列出账户中的启动模板版本,主体必须在 IAM policy 中具有 ec2:DescribeLaunchTemplateVersions 权限。由于 Describe 操作不支持资源级权限,因此必须无条件地指定这些权限,并且策略中资源元素的值必须为 "*"

例如,以下 IAM policy 语句授予主体列出账户中所有启动模板版本的权限。

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

ec2:DeleteLaunchTemplate

重要

在授予主体删除资源的权限时请谨慎操作。删除启动模板可能会导致依赖该启动模板的 Amazon 资源出现故障。

要删除启动模板,主体必须在 IAM policy 中具有 ec2:DeleteLaunchTemplate 权限。在可能的情况下,使用基于标签的条件键来限制权限。

例如,以下 IAM policy 声明仅在模板使用指定标签(purpose=testing)时才向主体授予删除启动模板的权限。

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

或者,您可以使用 ARN 来识别 IAM policy 适用的启动模板。

启动模板具有以下 ARN。

"Resource": "arn:aws:ec2:region:account-id:launch-template/lt-09477bcd97b0d310e"

您可以通过将多个 ARN 括在列表中来指定它们,也可以指定 Resource 值 "*"(不带 Condition 元素),以允许主体删除账户中的任何启动模板。

控制版本控制权限

对于受信任的管理员,您可以使用类似于以下示例的 IAM policy,授予创建和删除启动模板版本以及更改启动模板默认版本的访问权限。

重要

授予主体创建启动模板版本或修改启动模板的权限时,请谨慎行事。

  • 创建启动模板版本时,会影响允许 Amazon EC2 代表您使用 Latest 版本启动实例的任何 Amazon 资源。

  • 修改启动模板版本时,可以更改哪个版本为 Default,并会因此影响允许 Amazon EC2 代表您使用此修改后的版本启动实例的任何 Amazon 资源。

您还需要谨慎处理与 LatestDefault 启动模板版本交互的 Amazon 资源,例如 EC2 实例集和竞价型实例集。将不同的启动模板版本用于 Latest 或 Default 时,Amazon EC2 不会在启动新实例以满足实例集的目标容量时重新检查要完成的操作的权限,因为没有用户与 Amazon 资源交互。向用户授予调用 CreateLaunchTemplateVersion 和 ModifyLaunchTemplate API 的权限,即是同时授予用户将实例集指向包含实例配置文件(IAM 角色的容器)的不同启动模板版本的 iam:PassRole 权限。这意味着即使用户没有 iam:PassRole 权限,也可以更新启动模板以将 IAM 角色传递给实例。您可以通过谨慎授予创建和管理启动模板版本的权限来管理这种风险。

ec2:CreateLaunchTemplateVersion

要创建启动模板的新版本,主体必须具有 IAM policy 中启动模板的 ec2:CreateLaunchTemplateVersion 权限。

例如,以下 IAM policy 声明仅在版本使用指定标签(environment=production)时才向主体授予创建启动模板版本的权限。或者,您可以指定一个或多个启动模板 ARN,也可以指定 Resource 的值为 "*"(不带 Condition 元素),以允许主体创建账户中任何启动模板的版本。

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

ec2:DeleteLaunchTemplateVersion

重要

与往常一样,在授予委托人删除资源的权限时,您应该谨慎操作。删除启动模板版本可能会导致依赖该启动模板版本的 Amazon 资源出现故障。

要删除启动模板版本,主体必须具有 IAM policy 中启动模板的 ec2:DeleteLaunchTemplateVersion 权限。

例如,以下 IAM policy 声明仅在版本使用指定标签(environment=production)时才向主体授予删除启动模板版本的权限。或者,您可以指定一个或多个启动模板 ARN,也可以指定 Resource 的值为 "*"(不带 Condition 元素),以允许主体删除账户中任何启动模板的版本。

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

ec2:ModifyLaunchTemplate

要更改与启动模板关联的 Default 版本,主体必须具有 IAM policy 中启动模板的 ec2:ModifyLaunchTemplate 权限。

例如,以下 IAM policy 声明仅在启动模板使用指定标签(environment=production)时才向主体授予修改启动模板的权限。或者,您可以指定一个或多个启动模板 ARN,也可以指定 Resource 的值为 "*"(不带 Condition 元素),以允许主体修改账户中的任何启动模板。

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

控制对启动模板上标签的访问权限

当资源为启动模板时,您可以使用条件键限制标记权限。例如,以下 IAM policy 允许仅从指定账户和区域的启动模板中移除带有 temporary 键的标签。

{ "Sid": "IAMPolicyForDeletingTagsOnLaunchTemplates", "Action": "ec2:DeleteTags", "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["temporary"] } } }

有关可用于控制可应用于 Amazon EC2 资源的标签键和值的条件键的更多信息,请参阅 控制对特定标签的访问