跳至内容

如何限制访问权限,以使用户仅从已标记的 AMI 启动 Amazon EC2 实例?

1 分钟阅读
0

我想限制用户访问权限,以便用户仅从已标记的亚马逊机器映像(AMI)启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

解决方法

要限制访问权限,以便用户仅从已标记的 AMI 启动 EC2 实例,请执行以下操作之一:

  • 从现有实例创建 AMI。
  • 使用现有的 AMI,然后向 AMI 添加标签。

然后,创建自定义 AWS Identity and Access Management(AWS IAM)策略。IAM 政策使用标签条件限制用户的权限,使用户只能启动使用已标记 AMI 的实例。

在以下示例 IAM 策略中,使用了这些 Sid(语句 ID)值:

  • ReadOnlyAccess 允许用户使用 **Describe\ *** 查看您账户中的 EC2 资源,其中包括以 Describe 开头的所有 EC2 操作。ReadOnlyAccess 还允许用户获取实例的控制台输出控制台屏幕截图。Amazon CloudWatch 针对 DescribeAlarmsGetMetricStatistics 的权限允许在 Amazon EC2 控制台中显示有关实例的运行状况信息。IAM 针对 ListInstanceProfiles 的权限允许在 IAM 角色列表中显示现有的实例配置文件。启动实例时,配置实例详细信息页面上会显示 IAM 角色列表。但是,ListInstanceProfiles API 不允许用户将 IAM 角色附加到实例。
  • ActionsRequiredtoRunInstancesInVPC 会向用户授予执行 RunInstances API 的权限。您可以使用 us-east-1 AWS 区域中的任何实例、密钥对、安全组、卷、网络接口或子网。资源级权限指定每种资源的 ARN。
  • LaunchingEC2withAMIsAndTags 允许用户使用 AMI 启动实例。在 us-east-1 区域中,AMI 必须具有 Environment 标签,其值设置为 Produs-east-1 区域内的任何 AMI 的资源级权限均设置为 ARN。该条件与 EC2:ResourceTag/Environment 标签密钥和 Prod 密钥值的值相匹配。

针对 RunInstances API 操作所需的资源,以下 IAM 策略使用支持的资源级权限

注意:

  • 此策略允许用户在启动实例时列出角色。但是,用户只有在拥有 iam:PassRole 权限时才能启动带有附加角色的实例。
  • 此策略不允许用户创建新的安全组。除非用户拥有 CreateSecurityGroup EC2 权限,否则他们必须选择现有的安全组来启动 EC2 实例。EC2:CreateSecurityGroup API 操作仅授予创建安全组的访问权限。该操作不会添加或修改任何规则。要添加入站规则,用户必须拥有入站 AuthorizeSecurityGroupIngress EC2 API 操作和出站 AuthorizeSecurityGroupEgress EC2 API 操作的权限。
  • 此策略不允许用户附加实例名称或修改标签并将其附加到 EC2 实例资源。除非用户在创建实例时拥有 CreateTags 权限,否则用户必须将标签和名称留空。
{  "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"
        }
      }
    }
  ]
}
AWS 官方已更新 2 年前