AWS Step Functions中Lambda调用S3 get_object偶发AccessDenied问题求助
检查S3对象的版本控制与对象锁状态
如果目标桶开启了版本控制,Lambda(A)上传的对象可能生成了特定版本ID,若Lambda(B)调用get_object时未指定版本ID,可能因版本权限或锁定规则报错。同时查看Lambda(A)的上传代码,确认是否设置了ObjectLockMode、ObjectLockRetainUntilDate这类参数,部分对象可能因锁定策略导致读取权限受限。针对Lambda临时令牌延迟添加重试逻辑
Lambda执行依赖STS生成的临时令牌,批量并发场景下可能存在令牌同步延迟。给Lambda(B)的get_object操作添加指数退避重试,覆盖403错误场景:import boto3 from botocore.exceptions import ClientError import time s3_client = boto3.client('s3') def fetch_s3_object(bucket_name, object_key): max_retry = 3 delay = 1 for attempt in range(max_retry): try: return s3_client.get_object(Bucket=bucket_name, Key=object_key) except ClientError as e: if e.response['Error']['Code'] == 'AccessDenied' and attempt < max_retry - 1: time.sleep(delay) delay *= 2 continue raise验证S3桶策略与对象ACL
尽管Lambda权限策略已允许操作,但S3桶本身的桶策略可能存在Deny语句(比如基于请求来源、时间的限制),或者Lambda(A)上传时未设置正确的对象ACL。检查桶策略是否有冲突规则,同时确认上传代码是否添加了ACL='bucket-owner-full-control'(避免跨账户或权限继承问题)。排查存储类与复制配置
若Lambda(A)上传时使用了非标准存储类(如Glacier、Intelligent-Tiering),或桶开启了跨区域复制,极端并发下可能存在极小的同步延迟。确认是否使用这类存储类,必要时切换为Standard存储类,或检查复制任务的同步状态。测试Step Functions并发限制影响
批量20+流程并发执行时,Step Functions的并发阈值可能触发内部权限同步限制。尝试降低并发数测试,同时查看Step Functions的执行日志,排查是否有隐性的权限警告信息。
内容的提问来源于stack exchange,提问作者J Weller

