如何基于标记隐藏EC2中的实例 - 使用IAM?

use*_*877 14 instance amazon-ec2 amazon-web-services amazon-iam

我想在IAM中创建一个新用户,并允许他能够创建新的EC2实例,但只能查看/管理他创建的那些实例.

这可能与IAM有关吗?

这是我尝试的组策略:

{
"Statement": 
[
{
  "Effect": "Allow",
  "Action": 
  [
    "ec2:DescribeImages",
    "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups",
    "ec2:DescribeAvailabilityZones"
  ],
  "Resource": "*"
},

{
  "Effect": "Allow",
  "Action": 
  [
    "ec2:DescribeInstances","ec2:RunInstances", "ec2:TerminateInstances",
     "ec2:StartInstances", "ec2:StopInstances", "DescribeInstanceAttribute", "DescribeInstanceStatus"
  ],
  "Resource": "*",
  "Condition": 
  {
    "StringEquals": 
    {
      "ec2:ResourceTag/tag": "TheValueOfTheTag"
    }
  }

}
]
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*pel 19

不幸的是,这还没有,至少不是你可能正在寻找的自动方式 - 你的用例有两个方面:

资源级权限

近期出台的资源级别的权限EC2和RDS资源终于可以约束亚马逊EC2 API操作的具体实例确实,因此从这个角度,如使您的使用情况:

  • 允许用户在较大的多用户EC2环境中对有限的资源集进行操作.
  • [...]
  • 控制哪些用户可以终止哪些实例.

示例IAM策略设有一个展示如何允许用户在Amazon DynamoDB表,其名称的用户名相匹配的所有动作,展示了如何使用政策变量的${aws:username}(参见IAM策略变量概述了解详细信息):

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Action": ["dynamodb:*"],
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/${aws:username}"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

警告

此资源级权限尚不适用于所有API操作:

这是一个复杂而深远的功能,我们将分阶段推出.在第一阶段,对指定资源的以下操作现在支持资源级权限:

Instances - Reboot, Start, Stop, Terminate.
EBS Volumes - Attach, Delete, Detach.
Run Code Online (Sandbox Code Playgroud)

上面未列出的EC2操作目前不受资源级权限的约束.我们计划在2013年剩余时间内增加对其他API的支持.

值得注意的是,它缺乏ec2:Describe*你似乎正在寻找的行动.

审计跟踪

但是,AWS尚未公开发布任何类型的审核功能(由于Amazon IAM的工作方式,必须在内部提供),这意味着无法找出哪个特定IAM用户创建了特定资源.

更新

正如预期的那样,AWS同时发布了AWS CloudTrail,这是一种Web服务,可记录您帐户的AWS API调用并向您提供日志文件:

记录的信息包括API调用者的身份,API调用的时间,API调用者的源IP地址,请求参数以及AWS服务返回的响应元素.

有关一些细节和初始约束,请参阅我对amazon s3 /其他AWS服务上的操作日志的相关答案.

部分解决方法

我不知道任何自包含的解决方法 - 在合作环境中,您可以通过应用相应的监控和自动化来近似您想要的内容,如下所示:

1)您需要强制用户只使用某种标记方案运行EC2实例,例如 owner=<username>

2)如果采用该计划,您可以应用${aws:username}上述政策,相应的.基于标签的轻微变化 - AWS安全博客具有针对EC2的全面的资源级别权限 - 控制特定实例上的管理访问权限,说明了此方法 - 您的策略可能如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances",      
        "ec2:RebootInstances",
        "ec2:TerminateInstances"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/owner":"${aws:username}"
        }
      },
      "Resource": [
        "arn:aws:ec2:your_region:your_account_ID:instance/*"
      ],
      "Effect": "Allow"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

3)请注意,这意味着如果用户忘记使用正确的标签启动它们,他将无法管理他的实例,因此您可以使用类似Netflix的Conformity Monkey来启动策略. ,即一旦检测到没有所需标签的实例,负责人就会收到通知,并可以通过询问用户或关闭实例来尝试执行此操作(当然也可以自动完成).