我正在尝试授予 IAM 组编辑我们的 EC2 安全组的权限,但如果不授予对 EC2 中所有内容的访问权限,我就无法使此功能正常工作。
我尝试过几个版本:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1392336685000",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
]
}
]
}
但是当我使用 IAM 用户登录时,我在安全组页面收到一条消息,提示“您无权执行此操作”。
我确实知道用户/组正在工作,因为如果我选择“Amazon EC2 完全访问权限”的 IAM 策略模板,则用户可以访问 EC2 中的所有内容。
我显然没有太多的 IAM 经验,如能得到任何帮助我将非常感激。
答案1
为了使其正常工作,您需要明确允许以下操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1392679134000",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateSecurityGroup",
"ec2:DeleteSecurityGroup",
"ec2:DescribeInstanceAttribute",
"ec2:DescribeInstanceStatus",
"ec2:DescribeInstances",
"ec2:DescribeNetworkAcls",
"ec2:DescribeSecurityGroups",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": [
"*"
]
}
]
}
上述 JSON 策略基本上规定用户只能访问上述内容。他们无法访问其他任何内容。其中包括 ec2 实例、S3、IAM、cloudfront 等。
答案2
如果您想将编辑限制到单个安全组,我认为您需要 2 个语句,以下语句对我有用:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1413232782000",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstanceAttribute",
"ec2:DescribeInstanceStatus",
"ec2:DescribeInstances",
"ec2:DescribeNetworkAcls",
"ec2:DescribeSecurityGroups"
],
"Resource": [
"*"
]
},
{
"Sid": "Stmt1413232782001",
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": [
"arn:aws:ec2:us-east-1:<accountid>:security-group/sg-<id>"
]
}
]
}
DescribeInstance 可能不需要,但就我而言,我需要它,所以没有使用它进行测试
答案3
Scott Moore 给出的答案在撰写本文时被选为正确答案,但这个答案已经不能解决问题了。这不是 Scott 的错,AWS 经常更改很多东西。
我们遵循了AWS 文档并创建了一个自定义策略,该策略在过去的 1.5 年左右一直运行良好,突然今天早上我们的客户在编辑安全组时开始遇到问题,因此我偶然发现了这个线程以尝试可能的解决方案。
我最终从头开始创建了一个自定义策略,因为今天早上 AWS IAM 策略方面似乎已经弃用了一些关键功能;因此,在我撰写本文时有效的策略是:-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeSecurityGroups",
"ec2:DescribeSecurityGroupRules",
"ec2:ModifySecurityGroupRules"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:UpdateSecurityGroupRuleDescriptionsEgress",
"ec2:UpdateSecurityGroupRuleDescriptionsIngress"
],
"Resource": "arn:aws:ec2:*:*:security-group/*"
}
]
}
这 :-
- 允许编辑/删除现有安全组内的现有规则。
- 允许在现有的安全组内创建新规则。
- 不允许创建新的安全组或删除现有的安全组。
问题从来没有集中在允许创建新的安全组或删除现有的安全组,因此这尚未添加到策略中,但如果读者有要求,可以添加。