ElasticBeanstalk日志访问权限异常:多次返回Access Denied错误
刚碰到过几乎一模一样的问题!你描述的这些报错——打开Logs标签页直接弹出An error occurred retrieving logs: Access Denied,请求最新100行日志时EB事件里出现Failed retrieveEnvironmentInfo activity. Reason: Access Denied,同时还有部分日志拉取成功的INFO记录——核心原因就是IAM权限配置不完整,EB的服务角色或者你用来操作的IAM身份缺少了日志检索相关的关键权限。
问题根源拆解
Elastic Beanstalk要拉取实例日志,需要完成几个关键操作:获取环境信息、访问EC2实例、读取S3里的日志文件(或者CloudWatch日志),如果对应的IAM角色/用户没有这些权限,就会出现权限拒绝,同时因为部分基础操作能完成,所以会看到那两条INFO日志。
具体修复步骤
检查EB服务角色的权限
找到你的EB环境关联的服务角色(默认是aws-elasticbeanstalk-service-role),优先推荐直接附加AWS托管的AWSElasticBeanstalkFullAccess策略,这样能覆盖所有EB操作的权限需求。如果要自定义最小权限,至少要包含以下权限:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticbeanstalk:RetrieveEnvironmentInfo", "ec2:DescribeInstances", "ec2:GetConsoleOutput", "s3:GetObject", "logs:GetLogEvents" ], "Resource": "*" } ] }这些权限分别对应:获取EB环境的日志相关信息、查看EC2实例详情、获取实例控制台输出、读取EB存储日志的S3对象、检索CloudWatch日志事件。
验证当前操作的IAM用户/角色权限
如果你是用个人IAM账号操作EB控制台,而不是依赖服务角色,那要确保你的用户策略里也包含elasticbeanstalk:RetrieveEnvironmentInfo权限,以及访问对应EC2、S3资源的权限。检查EC2实例的IAM角色
你的EB环境里的EC2实例需要有足够的权限把日志上传到S3或者CloudWatch,所以要确认实例关联的IAM角色(实例配置文件)附加了类似AWSElasticBeanstalkMulticontainerDockerInstanceRole的托管策略,或者自定义策略包含s3:PutObject、logs:CreateLogStream、logs:PutLogEvents这些推送日志的权限——毕竟如果实例根本推不上日志,EB也拉不到完整内容。等待权限生效并测试
IAM策略更新后一般需要1-2分钟生效,之后刷新EB控制台的Logs标签页,再尝试请求最新日志,应该就能正常访问了。
小提示
如果追求最小权限安全,可以把上面自定义策略里的Resource从*限定到你的EB环境对应的S3存储桶ARN、EC2实例ARN、CloudWatch日志组ARN,这样能进一步缩小权限范围。
内容的提问来源于stack exchange,提问作者neisantos

