使用Secret Stores来保护Flux访问
作者:Nate Isley / 产品,开发者
2019年10月22日
导航至
多数据源 Flux在时序分析中打开无限可能,但与所有数据访问一样,新的通信可能会为不良分子打开潜在攻击向量。为了保护您的敏感凭据,请使用InfluxDB的集成密钥存储和Flux的新密钥库。
保守王国之钥的秘密
如果您跟随我的多数据源Flux之旅,您已经看到了通过结合多个数据存储和时间序列分析引入的激动人心的可能性。然而,如果您仔细查看我的SQL Flux脚本,您可能会注意到一些令人不安的事情——Flux连接外部数据存储时避免了用户名和密码,并以明文形式出现。
开发时的简单数据访问方法是可接受的,但当涉及到敏感的生产数据存储时,我们所有人都必须警惕保护我们的信息。Flux通过集成密钥存储来帮助您保守王国之钥的秘密。
InfluxDB Cloud 2的密钥存储
我们的InfluxDB Cloud 2服务集成了行业领先的Vault密钥存储库,为每位客户提供安全的密钥存储。用户可以使用我们全面文档化的API存储密钥、列出密钥和删除密钥。例如,以下curl命令使用组织ID和所有访问令牌来插入和检索密钥。
将密钥放入您的密钥存储库
>curl --data '{"myuser_password": "my_password_value"}' --request PATCH --url https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/orgs/<My_Org_ID>/secrets --header 'Authorization: Token <All_Access_Token>'
列出组织中的所有密钥
>curl --request GET --url https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/orgs/<My_Org_ID>/secrets --header 'Authorization: Token <All_Access_Token>'
在Flux中使用密钥
我的SQL.to()博客使用了这段Flux代码来执行SQL插入操作
// Store result in Postgres
|> sql.to(driverName: "postgres", dataSourceName: "postgresql://127.0.0.1?sslmode=disable", table: "adjustment_billing")
本地可以使用,但生产示例会使用用户名/密码结合Flux写入远程数据库
// Store result in remote Postgres database
|> sql.to(driverName: "postgres", dataSourceName: "postgresql://myuser:[email protected]:5432/nisley?sslmode=disable", table: "sensor_billing")
没有密钥,用户名和密码将硬编码为明文。幸运的是,我们可以利用Cloud 2的Vault来保护敏感信息。这里,我将完整的鱼缸供应商账单脚本重构成使用密钥存储库中的实际密码(myuser_password)
import "sql"
import "influxdata/influxdb/secrets"
myuser_secret = secrets.get(key: "myuser_password")
from(bucket: "tank-health")
|> range(start: -1w)
|> filter(fn: (r) => r._measurement == "water_sensor" and r.type == "adjustment")
|> group(columns: ["type", "device_id"], mode:"by")
|> count(column: "change")
|> rename(columns: {change: "adjustment_actions"})
|> keep(columns: ["device_id", "adjustment_actions"])
|> sql.to(driverName: "postgres", dataSourceName: "postgresql://myuser:" + myuser_secret + "@127.0.0.1:5432/nisley?sslmode=disable", table: "adjustment_billing")
InfluxDB的通用API和OSS
如果您使用的是OSS而非Cloud 2进行本地开发,请勿担心!我们的一项核心原则是在所有产品和服务中开发一个通用的API。上述API示例适用于任何本地InfluxDB 2 OSS URL
从本地OSS构建中获取密钥
>curl --request GET --url https://127.0.0.1:9999/api/v2/orgs/<My_Org_ID>/secrets --header 'Authorization: Token <All_Access_Token>'
请注意,InfluxDB 2 OSS的底层键值存储目前是BoltDB。BoltDB不是以密钥键值存储为主,因此请记住,如果有人可以访问该机器,则不应认为值是安全的。
一起探索Flux
通过注册InfluxDB Cloud 2或使用最新的OSS InfluxDB 2 alpha,加入我们探索Flux中的新密钥包。如果您对Flux有任何问题或功能请求,请访问Flux社区论坛并告知我们!