如何在Google Cloud Composer中保护sendGrid API密钥安全

问题描述

Google Cloud Composer airflow DAG完成后,我需要发送通知电子邮件。我已经找到了解决方案,并按照Google文档中的建议使用了sendGrid。

但是问题在于,由于将API密钥分配给了环境变量,因此可以看到谁有权访问云编写器。当我在本地系统python程序中使用相同的密钥时,它正在发送邮件,这就是我不理解该锥子的地方。因为如果某人拥有此API密钥或某人共享了该API密钥,则不是特定于项目的,任何人都可以使用此密钥发送邮件

有人可以帮助我如何保护sendGrid API密钥。

解决方法

在相关堆栈thread1thread2中分析并收集社区贡献者的证据我建议您重新考虑通用方法,并使用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}}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...