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

导航至

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

InfluxDB Cloud 的自动化令牌管理

今天,我们很高兴地宣布 Ockam Orchestrator 的 InfluxDB 附加组件。通过使用该附加组件,使用 InfluxDB Cloud 的客户可以使用 Ockam 通过自动授予唯一可识别的、最小权限、限时凭证来提高其安全态势,以供任何需要连接到 InfluxDB Cloud 的客户端使用。

大规模管理访问权限的问题

对于大规模客户而言,管理数千个离散客户端的客户端访问凭证可能是一个挑战。为每个客户端颁发唯一凭证可能成为如此繁重的运营负担,以至于我们看到一些公司选择使用单个凭证,该凭证在所有客户端服务和设备之间共享。然而,这种权衡带来了风险的增加:数千个客户端中的任何一个都可能暴露整个舰队使用的相同密钥。当其中一个凭证暴露时,它还会增加补救的运营负担:您现在正争先恐后地找出如何撤销并一次性将新凭证部署到整个舰队。相反,行业最佳实践建议定期审计和轮换这些凭证,以降低业务风险。这种定期撤销和轮换导致持续的运营复杂性,而这种复杂性只会随着客户端数量的增长而继续增加。

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 格式),它仅授予对特定组织上的特定存储桶进行写入的能力。具有此权限的客户端将无法读取任何数据、修改权限等。


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 令牌。在生产环境中,您将在您预期的客户端(在本例中为联网车辆)上运行接下来的 3 个步骤,但为了演示目的,我们将从同一台机器上运行所有步骤


ockam identity create connected-vehicle

身份已创建,我们可以向我们的项目进行身份验证(使用我们之前创建的 JSON 配置文件)以及我们在本节开始时保存的注册令牌 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 addon configure 命令中将最大 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 服务器