我正在使用Apache Spark应用程序,该应用程序是通过Airflow任务提交给AWS EMR集群的。
在Spark应用程序逻辑中,我需要从AWS S3中读取文件并从AWS RDS中读取信息。例如,为了从Spark应用程序连接到PostgreSQL上的AWS RDS,我需要提供数据库的用户名/密码。
现在,我正在寻找最佳和安全的方法,以将这些凭据保存在安全的地方,并将其作为参数提供给我的Spark应用程序。请建议在哪里存储这些凭据,以确保系统安全-作为env vars,在Airflow中的某个地方还是在什么地方?
答案 0 :(得分:1)
在Airflow中,您可以创建变量来存储此信息。可以从UI中列出,创建,更新和删除变量(管理->变量)。然后,您可以从您的代码中访问它们,如下所示:
from airflow.models import Variable
foo = Variable.get("foo")
答案 1 :(得分:1)
Airflow
通过提供可以Connection
SQLAlchemy
model(其中密码仍保持隐藏状态<)的accessed from WebUI,使我们在凭据管理方面得到了精美的报道。 / em>)
您可以control the salt
Airflow
用来加密密码,同时在其后端元数据库中存储Connection
细节。
它还为您提供extra
参数,用于存储Hiveserver2
的非结构化/特定于客户的内容such as {"use_beeline": true}
config
除了WebUI,您还可以编辑Connection
个via CLI
(Airflow
的几乎所有功能都是如此)
最后,如果您的用例涉及dynamically creating / deleting a Connection
,则可以通过利用基础SQLAlchemy
Session
来实现。您可以从cli.py
请注意,Airflow
将所有Connection
都视为相等,而与their type
无关(类型只是对最终用户的提示)。 Airflow
仅在basis of conn_id
上区分它们