首页 > 解决方案 > Spark凭证链排序 - S3 Exception Forbidden

问题描述

我在 EC2 实例上运行 Spark 2.4。我假设一个 IAM 角色并在 sparkSession.sparkContext.hadoopConfiguration 中设置密钥/秘密密钥/令牌,并将凭证提供程序设置为“org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider”。

当我尝试从 s3 读取数据集(使用 s3a,它也在 hadoop 配置中设置)时,我收到一条错误消息

com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:403,AWS 服务:Amazon S3,AWS 请求 ID:7376FE009AD36330,AWS 错误代码:空,AWS 错误消息:禁止

读取命令:

val myData = sparkSession.read.parquet("s3a://myBucket/myKey")

我反复检查了 S3 路径,它是正确的。我假定的 IAM 角色对 S3 存储桶具有正确的权限。在这一点上我唯一能想到的是 spark 有某种隐藏的凭证链排序,即使我在 hadoop 配置中设置了凭证,它仍然从其他地方获取凭证(我的实例配置文件???)。但我无法诊断。

任何帮助表示赞赏。很高兴提供更多细节。

标签: amazon-web-servicesapache-sparkamazon-s3

解决方案


  1. spark-submit 将获取您的环境变量并将它们设置为 fs.s3a 访问 +secret + 会话密钥,覆盖您已经设置的任何内容。
  2. 如果您只想使用 IAM 凭证,只需设置fs.s3a.aws.credentials.providercom.amazonaws.auth.InstanceProfileCredentialsProvider; 这将是唯一使用的

进一步阅读:S3A 故障排除


推荐阅读