如何限制访问权限以仅从添加标签的 AMI 启动 Amazon EC2 实例?

上次更新时间:2019 年 7 月 8 日

我想限制用户访问权限,使其仅可从添加标签的 Amazon 系统映像 (AMI) 启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。我该如何限制访问权限以使用 AMI 标签启动 EC2 实例?

解决方法

要限制用户访问权限以使用标记的 AMI 启动 EC2 实例,请基于现有实例创建 AMI 或使用现有 AMI,然后将标签添加到 AMI。之后,使用标签条件自定义 IAM 策略,该标签条件将用户权限限制为仅启动使用标记 AMI 的实例。

在此 IAM 策略示例中,有三个语句 ID (Sid):

  • Sid ReadOnlyAccess 允许用户使用 Describe* 查看您账户中的任何 EC2 资源,其中包括以 Describe 开头的所有 EC2 操作。Sid ReadOnlyAccess 还允许用户获取 EC2 实例的控制台输出和屏幕截图。有关更多信息,请参阅 GetConsoleOutputGetConsoleScreenshotDescribeAlarmsGetMetricStatistics 的 CloudWatch 权限允许在 Amazon EC2 控制台中显示有关 EC2 实例的基本运行状况信息。ListInstanceProfiles 的 IAM 权限允许在启动 EC2 实例时于“Configure Instance Details”页面的 IAM 角色列表中显示现有实例配置文件。但是,ListInstanceProfiles API 不允许用户将 IAM 角色附加到 EC2 实例。
  • Sid ActionsRequiredtoRunInstancesInVPC 向用户授予以下权限:通过为每个资源指定 ARN 以使用资源级权限,使用 us-east-1 区域中的任何实例、密钥对、安全组、卷、网络接口或子网执行 RunInstances API。
  • Sid LaunchingEC2withAMIsAndTags 允许用户使用 AMI 启动 EC2 实例,前提是 AMI 的 Environment 标签的值设置为 Prod,并且 AMI 位于 us-east-1 区域。对于 us-east-1 区域中的任何 AMI,资源级权限设置为 ARN,且条件与 EC2:ResourceTag/Environment 标签键的值和键值 Prod 匹配。

此策略允许用户在启动 EC2 实例时列出角色,但用户将无法启动附加有角色的实例,除非他们具有 iam:PassRole 权限。此策略不允许用户创建新的安全组。除非用户具有 EC2 CreateSecurityGroup 权限,否则必须选择现有安全组来启动 EC2 实例。EC2:CreateSecurityGroup API 操作授予仅创建一个安全组的权限(此操作不会添加或修改任何规则)。要添加入站规则,用户必须具有执行入站 EC2 AuthorizeSecurityGroupIngress API 操作和出站 EC2 AuthorizeSecurityGroupEgress API 操作的权限。

以下 IAM 策略对 RunInstances API 操作所需的资源使用资源级权限。有关 RunInstances 所需资源的更多信息,请参阅 RunInstances 的资源级权限

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ActionsRequiredtoRunInstancesInVPC",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:AccountId:instance/*",
        "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
        "arn:aws:ec2:us-east-1:AccountId:security-group/*",
        "arn:aws:ec2:us-east-1:AccountId:volume/*",
        "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
        "arn:aws:ec2:us-east-1:AccountId:subnet/*"
      ]
    },
    {
      "Sid": "LaunchingEC2withAMIsAndTags",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Environment": "Prod"
        }
      }
    }
  ]
}

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?