我想在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"
}
}
}
]
}
答案 0 :(得分:19)
不幸的是,这还不可用,至少不是你可能正在寻找的自动方式 - 你的用例有两个方面:
最近引入的Resource-Level Permissions for EC2 and RDS Resources最终允许将Amazon EC2 API操作实际约束到特定实例,从而从这个角度启用您的用例,例如:
- 允许用户在较大的多用户EC2环境中对有限的资源进行操作。
- [...]
- 控制哪些用户可以终止哪些实例。
Example IAM Policies功能显示了如何Allow a user all actions on an Amazon DynamoDB table whose name matches the user name,展示了政策变量${aws:username}
的使用(详见IAM Policy Variables Overview):
{
"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返回的响应元素 服务。
请参阅我对Logs for actions on amazon s3 / other AWS services的相关答案,了解一些细节和初步限制。
我不知道任何自包含的解决方法 - 在合作环境中,您可以通过应用相应的监控和自动化来近似您想要的内容,如下所示:
1)您需要强制用户仅使用某种标记方案运行EC2实例,例如owner=<username>
2)如果采用该计划,您可以应用基于${aws:username}
的政策,如上所述。基于标签的轻微变化 - 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之类的内容来强制执行在启发式基础上的策略,即一旦检测到没有所需标签的实例,负责的任何人都会收到通知,并可以尝试通过查询用户或关闭实例来强制执行此操作(当然也可以自动完成)