如何根据标签隐藏 EC2 中的实例 - 使用 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"
    }
  }
}
]
}

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

资源级权限

最近引入的 EC2 和 RDS 资源的资源级权限最终允许将 Amazon 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}"
    }
  ]
}

警告

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

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

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

上面未列出的 EC2 操作将不受资源级别的约束 此时的权限。我们计划添加对其他 API 的支持 在2013年剩下的时间里。

值得注意的是,它也缺少您似乎正在寻找的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"
    }
  ]
}

3)请注意,这意味着如果用户忘记使用正确的标签启动实例,他将无法管理他的实例,因此此外,您可以使用Netflix的Conformity 猴子之类的东西在启发式的基础上执行策略,即一旦检测到没有所需标签的实例,任何负责人都会收到通知,并可以尝试通过询问用户或关闭来强制执行实例(当然也可以自动完成)。

相关内容

  • 没有找到相关文章

最新更新