【问题标题】:spark aws S3a ARN (Amazon Resource Name) IAM rolespark aws S3a ARN(亚马逊资源名称)IAM 角色
【发布时间】:2019-01-03 13:39:44
【问题描述】:

我正在使用 spark 2.3.0 和 Hadoop 2.7(但如果需要我可以升级)

我希望使用 ARN(亚马逊资源名称)IAM 角色访问 S3 文件 https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html

我已经看过这个How to access s3a:// files from Apache Spark?,但没有关于 IAM 访问的问题

public class test {

    public static void main(String[] args) {
        SparkSession sc = new SparkSession.Builder()
                .appName("test")
                .config("spark.master", "local[*]") //for example
                .config("spark.hadoop.fs.s3a.access.key", "****")
                .config("spark.hadoop.fs.s3a.secret.key", "****")
                // .config("spark.hadoop.fs.s3a.arn_role","arn:aws:iam::***:role/******"")
                .getOrCreate();

        sc.read().format("csv").load("s3a://toto/****.csv").printSchema();

    }
}

我没有找到任何选项或配置

我也在寻找在 spark 提交上带有 args 的解决方案,但不在配置文件中(这需要动态)

你有什么想法吗?

【问题讨论】:

  • 如果您已经为其提供访问密钥,IAM 会给您带来哪些好处?角色不是已经与这些键绑定了吗?
  • 不,那些不是角色的密钥,它们是可以扮演角色的私钥。就像您在 CLI 中执行的操作一样:aws s3 ls --profile myProfile(在 .aws/config 文件中解析配置文件 role_arn)

标签: amazon-web-services apache-spark hadoop amazon-s3 amazon-iam


【解决方案1】:

对 IAM 代入角色的显式支持是 S3A 代码 HADOOP-15141 中的一项非常新的功能,但仍不完全稳定 HADOOP-15583,因此您不会通过升级获得任何收益。

2.8 HADOOP-12537的会话凭证支持是什么

在这里,您需要以某种方式获取您的 IAM 角色的临时凭证(也许是 AWS CLI?如果没有,AWS SDK 的一点点可以让您做到这一点。想象一下 this codethis 的混合。

assumeRole 代码为您提供会话凭证集(访问密钥、秘密密钥、会话令牌),然后您需要在 spark 上下文中设置它,并将凭证提供者切换为临时提供者,如here 所述。

然后,您应该能够通过该 IAM 角色中的 spark 工作,直到会话到期(现在已延长至持续几个小时;直到 2018 年 3 月,它们只持续了几分钟)。

Hadoop 3.1+ 中的完整 IAM 角色支持让您可以声明 IAM 角色和任何额外的策略,并让连接器自动让您登录,然后定期刷新会话令牌。您不会拥有它,因此您的 spark 作业的持续时间不会超过您在启动时获得的凭据的生命周期。

【讨论】:

  • 更新:HADOOP-14556 将完全按照您的意愿行事:自动承担客户端角色,获取凭据并将其与您的工作一起传递。您长期存在的秘密永远不会进入集群。它还将假定角色限制为特定 s3a:// URL 绑定到的特定 bucket/s3guard DDB 表。
【解决方案2】:

如果您在 ec2 上运行 spark 并希望使用 IAM 角色,则无需更改代码,只需在 IAM 控制台中创建一个角色并分配给您的 ec2。在该实例上运行的所有内容都会继承角色权限。

如果您在 EMR 上运行,请在调用 EMR 集群 API 的 lambda 脚本中创建角色并指定角色 arn,通过 lambda 环境参数访问角色 arn。

【讨论】:

  • 不,它没有在 EC2 上运行,它供本地使用,但感谢您的建议
  • 在这种情况下,角色与组绑定,属于该组的用户将继承组的权限,您不需要角色的arn。
  • 我已经更新了这个问题。我真的需要通过 ARN,否则我没有权限,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 2015-02-03
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多