我正在研究AWS托管的项目。该控制台可以被多个用户访问。我创建了一个IAM策略,该策略允许特定用户创建实例和卷,但他们不应访问或查看控制台中具有特定实例ID的现有实例。
我的自定义策略如下,但未按预期工作:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"ec2:RunInstances"
],
"Resource":"*"
},
{
"Effect":"Deny",
"Action":[
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:RebootInstances"
],
"Resource":"*",
"Condition":{
"StringEquals":{
"ec2:ResourceTag/Owner":"Admin"
}
}
}
]
}
如果字符串不等于aws:userid或aws:username,您尝试在操作ec2:DescribeInstances中使用“拒绝”效果,则将内联策略添加到附加到实例的角色上。
ec2:CreateVolume
授予创建Amazon EBS卷的权限。创建卷的行为与Amazon EC2实例无关。卷仅通过AttachVolume
命令与实例关联。
AttachVolume
授予启动new Amazon EC2实例的权限。它与现有实例无关。
因此,这两个权限都不会使用指定实例ID的条件。
要授予在管理控制台中查看Amazon EC2实例的权限,请使用ec2:RunInstances
。但是,用户将具有列出all实例或none的权限。无法限制ec2:DescribeInstances
调用返回的实例。
[如果您希望限制用户的此类信息,那么您将需要创建自己的“中间”代码来过滤信息(因此他们调用您的代码,该代码将检索所有实例,但仅返回某些实例),或者您可以为每个用户使用单独的AWS账户,以使他们看不到其他用户的资源。
如果您希望控制其他IAM用户无法看到其他IAM用户创建的实例,那么这是不可能的,因为describe instance api不接受资源级别权限。
但是您可以选择限制IAM用户对其他用户创建的实例执行操作(启动/停止/重新启动...等)。
DescribeInstances()
尝试使用此:
{“ Version”:“ 2012-10-17”,“声明”:[{“效果”:“允许”,“动作”:[“ ec2:StartInstances”,“ ec2:StopInstances”,“ ec2:RunInstances”,“ ec2:RebootInstances”],“ Resource”:“ arn:aws:ec2:::instance / ”,“条件”:{“ StringEquals”:{“ ec2:ResourceTag / Owner”:“ $ {aws:username}”}}},{“效果”:“允许”,“ Action”:“ ec2:DescribeInstances”,“资源”:“”}]}
确保您的实例具有必需的标记-键值对