我想在 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 操作限制为特定实例,从而从该角度支持您的使用案例,例如:
IAM 策略
- 允许用户在更大的多用户 EC2 环境中对一组有限的资源进行操作。
- [...]
- 控制哪些用户可以终止哪些实例。
示例功能之一显示如何允许用户对名称与用户名匹配的 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 猴子之类的东西在启发式的基础上执行策略,即一旦检测到没有所需标签的实例,任何负责人都会收到通知,并可以尝试通过询问用户或关闭来强制执行实例(当然也可以自动完成)。