amazon-web-services - 在 IAM 中,我是否可以限制一组用户仅访问/启动/终止某些 EC2 AMI 或实例?

标签 amazon-web-services amazon-ec2 amazon-ami amazon-iam

标题说什么。

在主 AWS 账户中,我有几个个人账户,即 AWS Identity and Access Management (IAM)用户。我想将某些 IAM 用户分配到组并阻止他们终止某些 Amazon EC2 instances , 注销某些 Amazon Machine Images (AMIs) , 等等。

我不介意他们玩自己的东西,但我不希望他们碰我的东西。

那可能吗?

最佳答案

更新

AWS 刚刚宣布 Resource-Level Permissions for Amazon EC2 and Amazon RDS 来解决 EC2 和 RDS 中 IAM 支持的长期缺陷(与其他 AWS 服务相比,有关详细信息/背景,请参阅下面我的原始答案):

Today we are making IAM even more powerful with the introduction of resource-level permissions for Amazon EC2 and Amazon RDS. [...]

On the EC2 side, you can now construct and use IAM policies to control access to EC2 instances, EBS volumes, images, and Elastic IP addresses. [...]

Here are just a few of things that you can do:

  • Allow users to act on a limited set of resources within a larger, multi-user EC2 environment.
  • Set different permissions for "development" and "test" resources.
  • Control which users can terminate which instances.
  • Require additional security measures, such as MFA authentication, when acting on certain resources.


这解决了过多的安全问题,并支持很多新的用例。

此外,EC2 策略声明可以包括对 EC2 资源标签的引用,这允许使用相同的标签模型和架构来获取权限和计费报告。最后,还有一组扩展的条件标签 [...] 包括 ec2:Region、ec2:Owner 和 ec2:InstanceType,有关详细信息,请参阅 Condition Keys for Amazon EC2

解决方案

这是手头用例的 Example 3: Allow users to stop and start only particular instances 变体,它允许用户仅启动和停止 [和终止] 具有标签“department=dev”的实例:

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:StopInstances", 
        "ec2:StartInstances",
        "ec2:TeminateInstances"
      ],
      "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/department": "dev"
        }
      }
    }
   ]
}

警告

对资源级权限的支持仍然仅限于对指定资源执行的以下一组操作,其中不包括部分用例(例如取消注册 AMI)——显然,对这一复杂且影响深远的功能的基础的信心高到足以宣布他们计划在 2013 年剩余时间增加对其他 API 的支持(AWS 通常不会发布任何路线图):

  • Instances - Reboot, Start, Stop, Terminate.
  • EBS Volumes - Attach, Delete, Detach.


原答案

恐怕这不可能按照您想要的方式进行(以及与此相关的许多其他人,包括我自己)。

问题

您希望限制对特定服务资源的访问而不是其操作 - 虽然 AWS Identity and Access Management (IAM) 原则上支持两者,但并非每个 AWS 产品/服务都提供基于资源的限制;不幸的是 Amazon EC2 是其中之一,甚至作为这种差异的一个例子,请参阅 Integrating with Other AWS Products :

The following table summarizes whether you can grant IAM permissions that control access to a service's actions, resources, or both. For example, you can use IAM to control which Amazon EC2 actions users have access to, but you can't use IAM to control users' access to AMIs, volumes, instances, etc. [emphasis mine]



(部分)解决方法

根据其他帐户的需要,您可能仍然至少可以限制他们执行那些被认为具有破坏性的操作的能力 - 您可以通过 AWS Policy Generator 探索可用的操作,例如:
  • ec2:DeregisterImage - 明显效果,当用户/组被拒绝时
  • ec2:ModifyInstanceAttribute - 当用户/组被拒绝时,这将通过 Enabling Termination Protection for an Instance 提供帮助:

  • By default, you can terminate any instances you launch. If you want to prevent accidental termination of the instance, you can enable termination protection for the instance.



    也就是说,一旦您启用了终止保护,任何无权使用 ec2:ModifyInstanceAttribute 的人都无法终止这些实例。

    显然,分别受限制的帐户将无法再促进对自己资源的调用。

    此外,这不会阻止他们运行花哨的集群计算 8 个超大实例左右,从而产生相应的成本;)

    替代方法

    根据您的设置/环境,您可能希望改用整合账单,它本质上提供了一种将一个或多个 AWS 账户收集到另一个账户下的方法,这是为其他人使用的资源付费。

    虽然这主要是一个会计功能,但它也可用于分离关注的领域 - 例如,促进单独的开发和生产帐户以实现各自独立的操作是很常见的,尤其是关于 IAM 权限等。

    介绍性博客文章 New AWS Feature: Consolidated Billing 提供了一个很好的概述,这里是 AWS Consolidated Billing Guide 中关于您的明显用例的相关主题:

    The paying account is billed for all costs of the linked accounts. However, each linked account is completely independent in every other way (signing up for services, accessing resources, using AWS Premium Support, etc.). The paying account owner cannot access data belonging to the linked account owners (e.g., their files in Amazon S3). Each account owner uses their own AWS credentials to access their resources (e.g., their own AWS Secret Access Key). [emphasis mine]



    显然,此功能针对的是较大的客户,但根据您的情况,您可能仍然可以提出一种解决方案来根据需要分离您的 AWS 账户和资源。

    关于amazon-web-services - 在 IAM 中,我是否可以限制一组用户仅访问/启动/终止某些 EC2 AMI 或实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829506/

    相关文章:

    linux - 在 Amazon AMI Linux 上安装 GVIM

    php - 无法获取从 AMI 创建的实例的密码

    amazon-web-services - 如何通过其规则修复 checkov 失败的项目?

    node.js - 在 docker 容器中自动获取主机名的方法

    amazon-ec2 - Ping EC2实例

    amazon-ec2 - 无法从 EC2 实例连接到某些主机

    amazon-web-services - aws cloudfront api 端点响应 Forbidden(403)

    java - 类型不匹配 : cannot convert from AwsClientBuilder to AmazonCloudFormation

    .htaccess - 如何使用 .htaccess 将子域别名/重定向到另一个域子文件夹

    nginx - centos 仅将文件夹完全访问权限添加到特定组