Spark:如何不在 Spark 应用程序中显式使用 aws 凭证

Spark: how to not use aws credentials explicitly in Spark application

在我的 Spark 应用程序中,我通过命令行参数传入了 aws 凭据。

spark.sparkContext.hadoopConfiguration.set("fs.s3.awsAccessKeyId", awsAccessKeyId)
spark.sparkContext.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", awsSecretAccessKey)
spark.sparkContext.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")

但是,在集群模式下,在节点之间显式传递凭据是一个巨大的安全问题,因为这些凭据是以文本形式传递的。

如何让我的应用程序使用 IAmRole 或其他不需要 Spark 应用程序中这两行代码的正确方法:

spark.sparkContext.hadoopConfiguration.set("fs.s3.awsAccessKeyId", awsAccessKeyId)
spark.sparkContext.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", awsSecretAccessKey)

您可以在 hadoop conf 的 core-site.xml 中添加以下配置,但不能在您的代码库中添加它

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
  <name>fs.s3n.awsAccessKeyId</name>
  <value>my_aws_access_key_id_here</value>
  </property>
  <property>
  <name>fs.s3n.awsSecretAccessKey</name>
  <value>my_aws_secret_access_key_here</value>
  </property>
</configuration>

要在 运行 spark 或 conf/spark-env.sh

之前 export HADOOP_CONF_DIR=~/Private/.aws/hadoop_conf 使用上述文件

对于 IAM 角色,spark 1.6 中已经存在漏洞 https://issues.apache.org/jira/browse/SPARK-16363