不幸的是,这还不可用,至少不是以您可能正在寻找的自动方式 - 您的用例有两个方面:
资源级权限
最近引入的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 操作目前不受资源级权限的约束。我们计划在 2013 年剩余时间内增加对其他 API 的支持。
值得注意的是,它也缺少ec2:Describe*
您似乎正在寻找的动作。
审计追踪
但是,AWS 尚未公开发布任何类型的审计功能(由于Amazon IAM的工作方式,该功能必须在内部可用),这意味着无法找出哪个特定 IAM 用户创建了特定资源。
更新
正如预期的那样,AWS 同时发布了AWS CloudTrail,这是一个 Web 服务,可以记录您账户的 AWS API 调用并将日志文件发送给您:
记录的信息包括 API 调用者的身份、API 调用的时间、API 调用者的源 IP 地址、请求参数以及 AWS 服务返回的响应元素。
有关一些详细信息和初始限制,请参阅我对日志的相关回答,了解有关亚马逊 s3/其他 AWS 服务的操作。
部分解决方法
我不知道任何自包含的解决方法 - 在合作环境中,您可以通过应用相应的监控和自动化来近似您想要的内容,如下所示:
1)您需要强制用户只使用某种标记方案运行 EC2 实例,例如owner=<username>
2) 有了该方案,您可以应用${aws:username}
如上所述的基于策略,resp。基于标签的轻微变化 - AWS 安全博客有一篇全面的文章Resource-level Permissions for EC2 – Controlling Management Access on specific Instances说明了这种方法 - 您的策略可能如下所示:
{
"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 Monkey之类的东西来启发式地执行策略,即一旦检测到没有所需标签的实例,负责的人会收到通知,并可以尝试通过询问用户或关闭实例来强制执行此操作(当然这也可以自动完成)。