【问题标题】:How can I tell airflow to authenticate on an external server?如何告诉气流在外部服务器上进行身份验证?
【发布时间】:2020-11-23 16:08:45
【问题描述】:

我在airflow 有以下任务,它就像一个魅力:

t = SparkSubmitOperator(
    task_id = 'some_id',
    application = '/path/to/app.py',
    name = 'airflow-spark',
    conf = {
        'spark.hadoop.fs.s3a.endpoint': 'https://some.url.com/',
        'spark.hadoop.fs.s3a.access.key': 'myuser',
        'spark.hadoop.fs.s3a.secret.key': 'my_super_secret_password',
    },
    dag = dag,
    )

您可以猜到,我的spark 作业需要在S3 服务器实例上进行身份验证才能检索数据。虽然这可行,但我不想将我的密码作为明文放在dag 中。如何在不使用明文密码的情况下通过S3 服务器进行身份验证?我尝试在airflow 中设置连接,这似乎正好适合这个用例,但是当我在任务中使用conn_id = 'my_connection' 时,它会尝试在服务器上运行 spark 作业。

【问题讨论】:

    标签: amazon-s3 pyspark airflow


    【解决方案1】:
    1. 如果您在 AWS 基础设施中运行气流,则可以使用 IAM 授予的容器/VM 权限作为访问者。
    2. 如果您可以定期更新配置,您可以在桌面上发布会话令牌并更新规范。您需要支持会话凭据 (2.8+) 的 hadoop 版本。
    3. 您还可以使用 JCEK 文件来存储凭据 - 然后将该文件放到所有 VM 上进行工作,并设置 hadoop/spark 配置以加载它。见https://hadoop.apache.org/docs/current/hadoop-aws/tools/hadoop-aws/index.html#Storing_secrets_with_Hadoop_Credential_Providers。这确实需要在共享存储上,例如 HDFS、挂载的 EBS 等,因为每个 spark worker 将在本地解析 jceks 路径以加载机密。

    最简单的是使用 IAM 权限。如果你在共享集群上运行,JCEKS 文件更好

    最后,Hadoop 3.3+ 允许 S3A 从具有完整凭据的用户那里动态生成会话/角色令牌,并通过 spark 作业传递这些令牌。如果您使用它,您可以在您的桌面/JCEKs 文件上拥有只有气流可以读取的凭据,并从这些文件中生成会话/角色凭据。有用,但设置起来比较棘手

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2021-07-26
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多