宣布:基于时间的、可撤销的、租用的 InfluxDB 动态访问凭证

导航至

本文由 Glenn Gillen 撰写,最初发布于 Ockam 博客,经许可在此重发。

InfluxDB Cloud 的自动化令牌管理

今天,我们兴奋地宣布了 InfluxDB 云插件 Ockam Orchestrator。通过使用此插件,使用 InfluxDB 云的客户可以使用 Ockam 自动为需要连接到 InfluxDB 云的任何客户端授予唯一可识别的、最小权限的、时间有限的凭证,从而提高他们的安全态势。

管理大规模访问的问题

对于规模庞大的客户而言,管理数千个不同客户的客户端访问凭证可能是一项挑战。向每个客户端颁发唯一凭证可能是一个如此繁重的运营负担,以至于我们看到一些公司选择使用一个在整个客户端服务和设备之间共享的单一凭证。但这种权衡带来的风险增加:那些数千个客户中的任何一个都可能泄露整个机队的相同秘密。这也增加了当其中一个凭证泄露时的补救运营负担:你现在需要紧急制定如何撤销和部署新凭证给整个机队的计划。相反,行业最佳实践会建议定期审计和轮换这些凭证以降低业务风险。这种定期撤销和轮换导致持续的运营复杂性,随着客户端数量的增加而不断增加。

Ockam Orchestrator 的 InfluxDB 插件是一个即插即用的解决方案,适用于任何 InfluxDB 客户端。它允许组织定义一个标准化策略,该策略定义了适用于其用例的唯一可识别的、最小权限的、时间有限的凭证。然后每个客户端可以请求自己的凭证,如果获得批准,则可以使用在任何现有 InfluxDB 凭证可用的地方。时间限制的性质意味着当租约期到期时,凭证将自动撤销,客户端可以请求新的以继续通信。

让我们看看现在可以做到的几个示例,以及如何实现它们。

Ockam 的初始设置

如果您之前已设置 Ockam,您可以跳过本节,直接查看下面的两个示例。

brew install build-trust/ockam/ockam

(如果您不使用 brew 进行软件包管理,我们文档中有针对其他系统的安装说明)

安装完成后,您需要将本地身份注册到 Ockam Orchestrator,运行以下命令并按照提供的说明操作

ockam enroll

大规模注册客户端

登录到您的InfluxDB Cloud仪表板,从您的组织设置页面获取集群URL(主机名)和组织ID,然后生成一个新的全部访问API令牌(加载数据 > API令牌 > 生成API令牌 > 全部访问API令牌)。将这三个值插入下面的相应环境变量中,以便我们稍后使用。


export INFLUXDB_ADMIN_TOKEN="infludb-cloud-token-here"
export INFLUXDB_ORG_ID="influxdb-org-id-here"
export INFLUXDB_ENDPOINT_URL="https://your-cluser-url-here"
export INFLUXDB_BUCKET="bucket-name-here"

接下来,我们将保存项目信息到一个JSON文件中,以便我们在注册客户端节点时使用。


ockam project information --output json default > project.json

现在是时候集成Ockam和InfluxDB Cloud了!我们将通过配置插件来使用我们之前导出的配置设置,此外还要定义每个未来的租赁请求应该被授予的默认权限集。


read -r -d '' INFLUXDB_LEASE_PERMISSIONS <<- EOF
[{"action": "write", 
  "resource": {
    "type": "buckets", 
    "name": "$INFLUXDB_BUCKET",
    "orgID": "$INFLUXDB_ORG_ID"
}}]
EOF

为了节省您解包所有这些内容的时间:这是一个InfluxDB权限定义(JSON格式),它只授予写入特定Org上特定存储桶的能力。具有此权限的客户端将无法读取任何数据、修改权限等。


ockam project addon configure influx-db \
  --endpoint-url $INFLUXDB_ENDPOINT_URL \
  --token $INFLUXDB_ADMIN_TOKEN \
  --org-id $INFLUXDB_ORG_ID \
  --permissions "$INFLUXDB_LEASE_PERMISSIONS" \
  --max-ttl 900

在客户端可以连接到项目之前,必须由授权实体为它生成一个注册令牌。


export VEHICLE_TOKEN=$( \
  ockam project enroll \
  --attribute service=connected-vehicle )

接下来,我们需要为我们的客户端创建一个新的身份,因为租赁的InfluxDB令牌将被颁发给这个身份。在生产环境中,您将在预期的客户端上运行以下三个步骤,在我们的例子中是连接的车辆,但出于演示目的,我们将从同一台机器上运行它们。


ockam identity create connected-vehicle

身份创建后,我们可以使用我们之前创建的JSON配置文件和保存在本节开头的enrolment token SENSOR_TOKEN对项目进行认证。


ockam project authenticate \
  --identity connected-vehicle \
  --project-path project.json \
  --token $VEHCILE_TOKEN

我们已经到达了关键时刻,是时候请求一个新的租赁了。


ockam lease create \
  --identity connected-vehiclez \
  --project-path project.json

在输出中,您将看到您创建的令牌以及它何时到期,这应该是从创建时间起的15分钟(我们在原始ockam插件配置命令中设置了最大TTL为900秒)。

授予临时读取访问权限

如果我们想授予我们的数据科学或运维团队中的某个人读取数据的权限怎么办?我们可以采取与上一个示例相同的方法,但只需更改权限和租赁超时。


read -r -d '' INFLUXDB_LEASE_PERMISSIONS <<- EOF
[{"action": "read", 
  "resource": {
    "type": "buckets", 
    "name": "$INFLUXDB_BUCKET",
    "orgID": "$INFLUXDB_ORG_ID"
}}]
EOF

这是与之前相同的权限定义,只是将写入权限替换为读取。

接下来,我们将配置插件,但这次我们将设置颁发的凭证的生存时间(TTL)为7天而不是15分钟。


ockam project addon configure influx-db \
  --endpoint-url $INFLUXDB_ENDPOINT_URL \
  --token $INFLUXDB_ADMIN_TOKEN \
  --org-id $INFLUXDB_ORG_ID \
  --permissions "$INFLUXDB_LEASE_PERMISSIONS" \
  --max-ttl 604800

与之前一样,我们将生成一个令牌,允许这个人注册,然后创建并注册他们。


export USER_TOKEN=$( \
  ockam project enroll \
  --attribute service=data-user)

ockam identity create alice

ockam project authenticate \
  --identity alice \
  --project-path project.json \
  --token $USER_TOKEN

现在,每次这个人需要请求查询InfluxDB Cloud的访问权限时,他可以通过运行以下命令请求一组新的凭证:


ockam lease create \
  --identity alice \
  --project-path project.json

唯一、时间有限、最小权限访问

希望您已经从这些示例中看到,只需几分钟您就可以完成完整的Ockam配置过程,并为您InfluxDB Cloud客户端实施一个改进的凭证管理策略。一种通过颁发每个客户端唯一的凭证来降低您风险的方法。凭证的权限和持续时间都是根据您客户端的需求来定的。并且这些凭证可以作为所有现有InfluxDB客户端用例的无缝替代。

开始使用

如果您尚未遵循本指南中的示例,您可以通过遵循我们的文档中的说明免费开始使用 Ockam。如果您想具体讨论此问题或其他潜在的 Ockam 用例,团队非常乐意与您交谈。或者,您可以加入我们,加入不断壮大的开发者社区,这些开发者希望通过构建设计安全的应用程序来建立信任,在Build Trust Discord 服务器