AWS Lambda发邮件IAM策略配置问题:TFSEC与EC2权限报错
问题原因与解决方案
为什么添加Condition后报错?
你用的lambda:FunctionArn条件键不适用于Lambda执行角色的权限策略。这个条件是用来限制「谁能调用Lambda函数」的身份策略,而Lambda执行角色是Lambda服务自身用来调用EC2等其他服务的身份,当Lambda去调用EC2时,这个条件不会生效,相当于EC2的权限被条件过滤掉了,所以才会报权限不足的错误。
正确的解决方法(满足TFSEC要求+权限正常)
要解决TFSEC的「Resource不能用*」告警,同时保证Lambda权限正常,需要拆分EC2权限,用更精准的资源ARN替代*,同时去掉无效的Condition:
修改后的IAM策略代码
resource "aws_iam_role_policy" "lambda_sendmail_policy" { name = "lambda-sendmail" role = aws_iam_role.lambda_sendmail_role.id policy = jsonencode({ "Version" : "2012-10-17", "Statement" : [ # 1. EC2描述类权限:用账号+区域的精准资源替代* { "Sid" : "EC2DescribePermissions", "Effect" : "Allow", "Action" : [ "ec2:DescribeInstances", "ec2:DescribeNetworkInterfaces" ], "Resource" : "arn:aws:ec2:us-east-1:${local.accountid}:*" }, # 2. EC2网络接口操作权限:指定具体的资源类型ARN { "Sid" : "EC2NetworkInterfacePermissions", "Effect" : "Allow", "Action" : [ "ec2:CreateNetworkInterface", "ec2:AttachNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource" : [ "arn:aws:ec2:us-east-1:${local.accountid}:network-interface/*", "arn:aws:ec2:us-east-1:${local.accountid}:subnet/${var.subnet_ids}", "arn:aws:ec2:us-east-1:${local.accountid}:security-group/${var.security_group_ids}" ] }, # 3. 日志权限:缩小到当前Lambda的日志组/流,更严格 { "Effect" : "Allow", "Action" : [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource" : [ "arn:aws:logs:us-east-1:${local.accountid}:log-group:/aws/lambda/${var.appenv}-${var.lambda_appname}:*", "arn:aws:logs:us-east-1:${local.accountid}:log-stream:/aws/lambda/${var.appenv}-${var.lambda_appname}:*" ] }, # 4. X-Ray权限:用账号级资源替代*,规避TFSEC告警 { "Effect" : "Allow", "Action" : [ "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource" : "arn:aws:xray:us-east-1:${local.accountid}:*" } ] }) }
关键说明
- 拆分EC2权限为描述类和操作类,分别用精准资源ARN替代*,满足TFSEC的合规要求。
- 日志权限进一步缩小到当前Lambda专属的日志组和日志流,比原配置更安全。
- 移除无效的
lambda:FunctionArnCondition,让EC2权限正常生效。 - 如果不需要
autoscaling:CompleteLifecycleAction权限,可直接删除该条目,缩小权限范围。
内容的提问来源于stack exchange,提问作者Maxamis4
相关产品推荐
相关产品推荐

