背景
一位企业主将一个根级别的 AWS 账户交给了我,该账户运行不同的 EC2 机器(staging/prod 等)。我想要做的只是创建具有受限访问权限的不同 IAM 账户。例如,现在我想创建一个仅具有运行、终止特定 EC2 实例权限的 IAM 账户。
我尝试过
我基本上遵循了指示这里。我创建了一个 IAM 组(名为),并创建了一个新的 IAM 账户,并为该组superAdmin
分配了一个新用户( )。user_1
然后我开始创建一个政策并将其附加到该superAdmin
组,该政策如下所示
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt15094*****",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"arn:aws:ec2:eu-west-1:%my-account-id%:instance/i-%instance-id%"
]
}
]
}
我确保资源遵循资源政策准确无误。(注:这些实例在爱尔兰运行,根据这是相同的eu-west-1
)
然后我调用此策略staging_access
并将其附加到user_1
(但也删除了所有其他策略):
问题
问题是,当我以 身份登录时user_1
,我看不到任何内容:
当我进入实例页面时,什么也没有显示:
更新
我注意到,如果我简单地将资源变成通配符,一切都会正常:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1509458879000",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"*"
]
}
]
}
有趣的是,即使我像下面这样将资源设置为所有 ec2 上的通配符:
"Resource": [
"arn:aws:ec2:*"
]
它仍然不起作用。这意味着访问控制台 UI 是一种不同的服务命名空间比 ec2。
答案1
您正在根据 EC2 实例 ID 定义策略。您需要添加更多权限,以便用户可以显示密钥对、卷、实例等内容。从命令行分配管理 EC2 实例的权限(可能非常严格)与访问 Amazon 管理控制台所需的权限之间存在差异。
另外,您的保单中有 % 字符。这真的包含在您的保单中吗?还是只是为了在您的问题中显示?
[更新]
控制资源访问的更好方法是使用标签。例如,要仅允许用户 XYZ 访问某些 EC2 实例,请标记这些实例。以下是使用标签的示例策略。此策略允许用户列出所有 EC2 实例,但仅允许对使用其用户名标记的实例执行所有 EC2 操作。
{
"Version" : "2012-10-17",
"Statement" :
[
{
"Effect" : "Allow",
"Action" : "ec2:*",
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"ec2:ResourceTag/UserName" : "${aws:username}"
}
}
},
{
"Effect" : "Allow",
"Action" : "ec2:Describe*",
"Resource" : "*"
},
{
"Effect" : "Deny",
"Action" :
[
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource" : "*"
}
]
}
答案2
解决答案
这不是我真正想要的答案,但它满足了我的需求。我创建了两个策略,并将两者应用于同一个用户
政策 1:给予他们“旁观者”访问一切的权限:
显示政策
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "***",
"Effect": "Allow",
"Action": [
"ec2:Describe*"
],
"Resource": [
"*"
]
}
]
}
政策 2:允许他们控制具体的我是
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "***",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"arn:aws:ec2:eu-west-1:%account-id%:instance/i-%instance-id%"
]
}
]
}