IAM策略匹配失败:EC2 Instance Connect OpenTunnel授权异常排查
排查EC2 Instance Connect Endpoint隧道连接的IAM权限问题
配置的IAM策略语句
{ "Action": "ec2-instance-connect:OpenTunnel", "Condition": { "IpAddress": { "ec2-instance-connect:privateIpAddress": "<EC2_IP>" }, "NumericEquals": { "ec2-instance-connect:remotePort": "22" }, "NumericLessThanEquals": { "ec2-instance-connect:maxTunnelDuration": "3600" } }, "Effect": "Allow", "Resource": "arn:aws:ec2:us-east-1:<AWS_ACCT_NO>:instance-connect-endpoint/<EICE_ID>", "Sid": "EC2InstanceConnect" }
连接时报错信息
awscli.customizations.ec2instanceconnect.websocket - ERROR - {"ErrorCode":"AccessDeniedException","Message":"User: arn:aws:sts::<AWS_ACCT_NO>:assumed-role/<ROLE>/<USER> is not authorized to perform: ec2-instance-connect:OpenTunnel on resource: arn:aws:ec2:us-east-1:<AWS_ACCT_NO>:instance-connect-endpoint/<EICE_ID> because no identity-based policy allows the ec2-instance-connect:OpenTunnel action"}
CloudTrail记录的请求参数
"requestParameters": { "instanceConnectEndpointId": "<EICE_ID>", "maxTunnelDuration": "3600", "remotePort": "22", "privateIpAddress": "<EC2_IP>" }
排查方向
- 确认策略的关联对象:检查这条IAM策略是否正确附加到报错信息中的
<ROLE>角色或对应用户上,若策略未关联到当前使用的身份,会直接触发权限拒绝。 - 验证资源ARN的准确性:核对策略中Resource字段的ARN,确保区域、账号ID、EICE ID与实际资源完全一致,无拼写或格式错误。
- 检查Condition参数的匹配逻辑:
- 确认
<EC2_IP>是纯IP格式(如10.0.0.5),未添加多余引号,且与CloudTrail中记录的请求参数完全一致。 - 尝试将
remotePort和maxTunnelDuration的字符串值("22"、"3600")改为纯数值(22、3600),避免数值类型不匹配导致Condition失效。
- 确认
- 排查策略冲突或权限边界:查看该身份是否有其他附加的IAM策略(尤其是带
Deny效果的),或是否设置了权限边界(Permission Boundary)限制了ec2-instance-connect:OpenTunnel操作。 - 重新进行IAM模拟:在IAM策略模拟器中,选择正确的角色/用户,指定
ec2-instance-connect:OpenTunnel操作和对应资源ARN,手动添加所有Condition参数并填入与CloudTrail一致的值,重新运行模拟确认结果。 - 检查角色信任关系:若用户通过扮演角色访问,确认角色的信任策略允许该用户扮演,且无额外条件(如IP限制)导致权限被拦截。
内容的提问来源于stack exchange,提问作者Dancrumb
相关产品推荐
相关产品推荐

