特定用户无法在AWS私有子网启动EC2实例的权限问题
问题原因及解决方案
问题原因
在私有子网启动EC2实例时,你应该是给实例指定了关联IAM角色ABC-CDE-webserver,而公有子网启动的实例没关联这个角色,所以能正常创建。AWS的安全机制要求:当用户需要将IAM角色传递给EC2实例(让实例拥有该角色的权限)时,必须明确拥有iam:PassRole权限,否则会触发权限拒绝错误。你的现有策略里完全没包含这个权限,所以才会报错。
调整后的IAM策略
需要在原策略中添加一条新的权限声明,允许对目标角色执行iam:PassRole操作,同时通过Condition限制只能将该角色传递给EC2服务,最小化权限范围:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:DescribeInstances", "ec2:Describe*", "ec2:CreateSnapshot", "ec2:CreateImage", "ec2:CreateKeyPair", "ec2:CreateTags", "ec2:RunInstances", "ec2:DescribeSecurityGroups", "ec2:DescribeImages", "ec2:StartInstances", "ec2:DescribeVpcs", "ec2:CreateSecurityGroup", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DescribeKeyPairs" ], "Resource": "*" }, { "Sid": "AllowPassRoleToEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNT_ID:role/ABC-CDE-webserver", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } } ] }
注意:把上面的ACCOUNT_ID替换成你的AWS账号ID(12位数字)。
额外说明
添加Condition是为了确保这个iam:PassRole权限只能用于EC2服务,不能被用来给其他AWS服务传递该角色,遵循最小权限原则,提升安全性。
内容的提问来源于stack exchange,提问作者Santosh Baruah
相关产品推荐
相关产品推荐

