问题描述
Google Cloud Composer airflow DAG完成后,我需要发送通知电子邮件。我已经找到了解决方案,并按照Google文档中的建议使用了sendGrid。
但是问题在于,由于将API密钥分配给了环境变量,因此可以看到谁有权访问云编写器。当我在本地系统python程序中使用相同的密钥时,它正在发送邮件,这就是我不理解该锥子的地方。因为如果某人拥有此API密钥或某人共享了该API密钥,则不是特定于项目的,任何人都可以使用此密钥发送邮件。
有人可以帮助我如何保护sendGrid API密钥。
解决方法
在相关堆栈thread1和thread2中分析并收集社区贡献者的证据我建议您重新考虑通用方法,并使用JSON文件存储凭据或其他敏感信息系统认证数据,方法是在相应的气流connection中指定密钥文件路径。
- 将API密钥保存在JSON文件中,并将其存储在Airflow环境的Cloud中
存储桶(即
extra__google_cloud_platform__key_path
); - 按照Cloud Storage ACL限制访问JSON文件 您的安全考虑;
- 在Airflow中创建一个新连接,然后在 Conn Type 字段中, 选择 Google Cloud Platform 选项,然后在 Keyfile Path 中,输入JSON密钥文件所在位置的本地文件路径;
自从建立了气流连接以来,您可以通过特定DAG代码中的预定义from airflow.contrib.hooks.gcp_api_base_hook import GoogleCloudBaseHook
gcp_hook = GoogleCloudBaseHook(gcp_conn_id="<your-conn-id>")
key_path = gcp_hook._get_field("extra__google_cloud_platform__key_path")
查询参数在GoogleCloudBaseHook操作符中引用加密的API密钥:
{{1}}