如何枚举S3存储桶及对象?访问密钥异常问题求助
问题原因与解决办法
首先明确关键差异:生成预签名URL是本地计算签名,不需要向AWS服务发送请求,所以哪怕密钥无效、区域不匹配,都能生成URL(但实际访问这个URL会失败)。而ListBucketsAsync、ListObjectsV2Async这类API必须调用AWS服务接口,会被服务端验证密钥合法性,因此才会报错。
针对错误提示"The AWS Access Key Id you provided does not exist in our records",按以下步骤排查:
- 核对Access Key的正确性:仔细检查你复制的
accessKey值,有没有多打空格、漏字符或者大小写错误。AWS的Access Key ID是严格匹配的,哪怕一个字符错误,服务端都会识别为不存在。 - 确认密钥在AWS账户中存在且未被禁用:登录AWS控制台,进入IAM控制台→找到对应的用户→切换到「安全凭证」标签,查看Access Key列表,确认你使用的Key在列表里且状态为「活跃」。
- 检查区域配置是否正确:如果你的存储桶实际不在
USWest2区域,创建AmazonS3Client时指定错误区域可能导致请求路由到错误的服务节点,也可能触发类似密钥不存在的错误。确认存储桶所在区域,替换为对应的RegionEndpoint(比如RegionEndpoint.USEast1)。 - 排除临时凭证问题:如果使用的是临时访问密钥,仅靠
BasicAWSCredentials传入Access Key和Secret Key是不够的,还需要传入Session Token。但你的错误提示是密钥不存在,这个可能性较低,优先排查前面几点。
等密钥问题解决后,还需要确保IAM用户有对应权限:
- 调用
ListBucketsAsync需要s3:ListAllMyBuckets权限 - 调用
ListObjectsV2Async需要目标存储桶的s3:ListBucket权限
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

