设置管理身份验证
为了管理对 InfluxDB 集群的管理访问权限,请将您的集群与 OAuth 2.0 身份提供商集成。使用您的身份提供商为所有需要管理访问 InfluxDB 集群的用户创建 OAuth2 帐户。管理访问权限允许用户执行诸如创建数据库和数据库令牌(提供对数据库的读写访问权限)之类的操作。
InfluxData 已经使用以下身份提供商进行了测试,但任何 满足要求的 提供商都应该可以工作
身份提供商可以与您的 InfluxDB 集群一起部署,也可以在外部运行。如果您选择与 InfluxDB 集群一起部署您的提供商,则应在您的初始 InfluxDB 集群部署之后完成下面概述的过程。
身份提供商要求
为了将身份提供商与您的 InfluxDB Clustered 集成,它必须满足以下要求
- 支持 OAuth 2.0
- 支持 设备授权流程 (Device Authorization Flow)
身份提供商凭据
为了访问 OAuth2 服务器,InfluxDB 需要以下 OAuth2 连接凭据
- 客户端 ID
- JWKS 端点
- 设备授权端点
- 令牌端点
设置您的身份提供商
提供了以下设置说明
Keycloak
要使用 Keycloak 作为您的身份提供商
创建 Keycloak realm
请参阅 Keycloak 文档中的 创建 realm。
创建启用设备流的 Keycloak 客户端
在 Keycloak 管理控制台 中,导航到 Clients,然后单击 Create Client。
在 常规设置 (General Settings) 配置步骤中
- 将 客户端类型 (Client type) 设置为 OpenID Connect。
- 输入 客户端 ID (Client ID),保存您的客户端 ID 以供稍后使用。
- 可选: 输入客户端的 名称 (Name) 和 描述 (Description)。
- 单击 Next。
在 功能 (Capability) 配置步骤中,启用 OAuth 2.0 设备授权授予 (OAuth 2.0 Device Authorization Grant) 身份验证流程,然后单击 Next。
在 登录设置 (Login settings) 步骤中,您无需更改任何内容。单击 Save。
创建用户
请参阅 Keycloak 文档中的 创建用户。
使用 Keycloak 查找用户 ID
要使用 Keycloak 查找用户 ID,请使用 Keycloak 管理控制台或 Keycloak REST API。
Keycloak 管理控制台
- 在 Keycloak 管理控制台中,导航到您的 realm
- 在左侧导航栏中选择 Users。
- 选择您要查找 ID 的用户。
- 选择 Details 选项卡。用户 ID 在此处列出。
Keycloak REST API
向 Keycloak REST API /users
端点发送 GET 请求,以获取特定用户的 ID。提供以下内容
- 查询参数
- username:要检索信息的用户名
curl https://KEYCLOAK_HOST/auth/admin/realms/KEYCLOAK_REALM/users?username=KEYCLOAK_USERNAME
替换以下内容
KEYCLOAK_HOST
:Keycloak 主机和端口 (host:port
)KEYCLOAK_REALM
:Keycloak realmKEYCLOAK_USERNAME
:要检索的 Keycloak 用户名
配置 InfluxDB Clustered 以使用 Keycloak
运行以下命令以检索包含您的 Keycloak realm 的 OpenID 配置的 JSON 对象
curl https://KEYCLOAK_HOST/realms/KEYCLOAK_REALM/.well-known/openid-configuration
以下是 JSON 对象中重要的字段,这些字段对于将您的 InfluxDB 集群和管理工具连接到 Keycloak 是必需的
- jwks_uri:在您的 InfluxDB 集群配置文件中使用。请参阅 配置您的集群以连接到您的身份提供商。
- device_authorization_endpoint:在您的
influxctl
配置文件 (profile.auth.oauth2.device_url
) 中使用 - token_endpoint:在您的
influxctl
配置文件 (profile.auth.oauth2.token_url
) 中使用
Microsoft Entra ID
要使用 Microsoft Entra ID 作为您的身份提供商
- 在 Microsoft Entra ID 中创建新租户
- 添加需要管理访问您的 InfluxDB 集群的用户
- 注册一个启用设备代码流的新应用程序
- 配置 InfluxDB Clustered 以使用 Microsoft Entra ID
在 Microsoft Entra ID 中创建新租户
请参阅 Microsoft Azure 文档中的 在 Microsoft Entra ID 中创建新租户。复制并存储您的 Microsoft Entra 租户 ID。
添加需要管理访问您的 InfluxDB 集群的用户
请参阅 Microsoft Azure 文档中的 添加或删除用户。
使用 Microsoft Entra ID 查找用户 ID
对于 Microsoft Entra ID,唯一用户 ID 是 Microsoft ObjectId (OID)。要下载用户 OID 列表
- 在 Microsoft Azure 门户 中,在左侧导航栏中选择 Users。
- 选择您想要 OID 的用户,然后单击 下载用户 (Download Users)。
在下载的 CSV 文件中,用户 OID 在 id
列中提供。
注册一个启用设备代码流的新应用程序
- 在 Microsoft Azure 门户 中,在左侧导航栏中选择 应用注册 (App Registrations)。
- 单击 新注册 (New Registration),然后输入新应用程序的名称以处理身份验证请求。
- 单击 注册应用程序 (Register Application)。复制并存储您的 应用程序(客户端)ID (Application (Client) ID)。
- 在您注册的应用程序中,在左侧导航栏中单击 身份验证 (Authentication)。
- 在 高级设置 (Advanced Settings) 下,将 允许公共客户端流 (Allow public client flows) 设置为 是 (Yes)。这启用了使用 设备代码流 (device code flow) 登录到您的 InfluxDB 集群。
配置 InfluxDB Clustered 以使用 Microsoft Entra ID
使用以下命令检索包含您的 Microsoft Entra 租户的 OpenID 配置的 JSON 对象
curl https://login.microsoftonline.com/AZURE_TENANT_ID/v2.0/.well-known/openid-configuration
将 AZURE_TENANT_ID
替换为您的 Microsoft Entra 租户 ID。
以下是 JSON 对象中重要的字段,这些字段对于将您的 InfluxDB 集群和管理工具连接到 Keycloak 是必需的
- jwks_uri:在您的 InfluxDB 集群配置文件中使用。请参阅 配置您的集群以连接到您的身份提供商。
- device_authorization_endpoint:在您的
influxctl
配置文件 (profile.auth.oauth2.device_url
) 中使用 - token_endpoint:在您的
influxctl
配置文件 (profile.auth.oauth2.token_url
) 中使用
配置您的集群以连接到您的身份提供商
要将您的 InfluxDB 集群连接到您的 OAuth2 提供商,请使用所需的凭据更新您的 AppInstance
资源。直接修改您的 AppInstance
资源,或者,如果使用 InfluxDB Clustered Helm chart,则更新您的 values.yaml
。
在您的 AppInstance
资源中为以下字段提供值
spec.package.spec.admin
identityProvider
:身份提供商名称。如果使用 Microsoft Entra ID(原 Azure Active Directory),请将名称设置为azure
。jwksEndpoint
:您的身份提供商提供的 JWKS 端点。users
:要授予管理访问您的 InfluxDB 集群的 OAuth2 用户列表。ID 由您的身份提供商提供。
以下是 Keycloak、Auth0 和 Microsoft Entra ID 的示例,但其他 OAuth2 提供商也应该可以工作
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
package:
spec:
admin:
identityProvider: keycloak
jwksEndpoint: |-
https://KEYCLOAK_HOST/auth/realms/KEYCLOAK_REALM/protocol/openid-connect/certs
users:
# All fields are required but `firstName`, `lastName`, and `email` can be
# arbitrary values. However, `id` must match the user ID provided by Keycloak.
- id: KEYCLOAK_USER_ID
firstName: Marty
lastName: McFly
email: mcfly@influxdata.com
替换以下内容
KEYCLOAK_HOST
:您的 Keycloak 服务器的主机和端口KEYCLOAK_REALM
:Keycloak realmKEYCLOAK_USER_ID
:要授予 InfluxDB 管理访问权限的 Keycloak 用户 ID
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
package:
spec:
admin:
identityProvider: auth0
jwksEndpoint: |-
https://AUTH0_HOST/.well-known/openid-configuration
users:
# All fields are required but `firstName`, `lastName`, and `email` can be
# arbitrary values. However, `id` must match the user ID provided by Auth0.
- id: AUTH0_USER_ID
firstName: Marty
lastName: McFly
email: mcfly@influxdata.com
替换以下内容
AUTH0_HOST
:您的 Auth0 服务器的主机和端口AUTH0_USER_ID
:要授予 InfluxDB 管理访问权限的 Auth0 用户 ID
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
package:
spec:
admin:
identityProvider: azure
jwksEndpoint: |-
https://login.microsoftonline.com/AZURE_TENANT_ID/discovery/v2.0/keys
users:
# All fields are required but `firstName`, `lastName`, and `email` can be
# arbitrary values. However, `id` must match the user ID provided by Auth0.
- id: AZURE_USER_ID
firstName: Marty
lastName: McFly
email: mcfly@influxdata.com
替换以下内容
AZURE_TENANT_ID
:Microsoft Entra 租户 IDAZURE_USER_ID
:要授予 InfluxDB 管理访问权限的 Microsoft Entra 用户 ID (请参阅 使用 Microsoft Entra ID 查找用户 ID)
在您的 values.yaml
中为以下字段提供值
admin
identityProvider
:身份提供商名称。如果使用 Microsoft Entra ID(原 Azure Active Directory),请将名称设置为azure
。jwksEndpoint
:您的身份提供商提供的 JWKS 端点。users
:要授予管理访问您的 InfluxDB 集群的 OAuth2 用户列表。ID 由您的身份提供商提供。
以下是 Keycloak、Auth0 和 Microsoft Entra ID 的示例,但其他 OAuth2 提供商也应该可以工作
admin:
# The identity provider to be used e.g. "keycloak", "auth0", "azure", etc
# Note for Azure Active Directory it must be exactly "azure"
identityProvider: keycloak
# The JWKS endpoint provided by the Identity Provider
jwksEndpoint: |-
https://KEYCLOAK_HOST/auth/realms/KEYCLOAK_REALM/protocol/openid-connect/certs
# The list of users to grant access to Clustered via influxctl
users:
# All fields are required but `firstName`, `lastName`, and `email` can be
# arbitrary values. However, `id` must match the user ID provided by Keycloak.
- id: KEYCLOAK_USER_ID
firstName: Marty
lastName: McFly
email: mcfly@influxdata.com
替换以下内容
KEYCLOAK_HOST
:您的 Keycloak 服务器的主机和端口KEYCLOAK_REALM
:Keycloak realmKEYCLOAK_USER_ID
:要授予 InfluxDB 管理访问权限的 Keycloak 用户 ID
admin:
# The identity provider to be used e.g. "keycloak", "auth0", "azure", etc
# Note for Azure Active Directory it must be exactly "azure"
identityProvider: auth0
# The JWKS endpoint provided by the Identity Provider
jwksEndpoint: |-
https://AUTH0_HOST/.well-known/openid-configuration
# The list of users to grant access to Clustered via influxctl
users:
# All fields are required but `firstName`, `lastName`, and `email` can be
# arbitrary values. However, `id` must match the user ID provided by Auth0.
- id: AUTH0_USER_ID
firstName: Marty
lastName: McFly
email: mcfly@influxdata.com
替换以下内容
AUTH0_HOST
:您的 Auth0 服务器的主机和端口AUTH0_USER_ID
:要授予 InfluxDB 管理访问权限的 Auth0 用户 ID
admin:
# The identity provider to be used e.g. "keycloak", "auth0", "azure", etc
# Note for Azure Active Directory it must be exactly "azure"
identityProvider: azure
# The JWKS endpoint provided by the Identity Provider
jwksEndpoint: |-
https://login.microsoftonline.com/AZURE_TENANT_ID/discovery/v2.0/keys
# The list of users to grant access to Clustered via influxctl
users:
# All fields are required but `firstName`, `lastName`, and `email` can be
# arbitrary values. However, `id` must match the user ID provided by Auth0.
- id: AZURE_USER_ID
firstName: Marty
lastName: McFly
email: mcfly@influxdata.com
替换以下内容
AZURE_TENANT_ID
:Microsoft Entra 租户 IDAZURE_USER_ID
:要授予 InfluxDB 管理访问权限的 Microsoft Entra 用户 ID (请参阅 使用 Microsoft Entra ID 查找用户 ID)
有关管理 InfluxDB 集群中用户的更多信息,请参阅 管理用户。
应用您的配置更改
使用 kubectl
或 helm
应用您的配置更改,并将您的 InfluxDB 集群连接到您的身份提供商。
kubectl apply \
--filename myinfluxdb.yml \
--namespace influxdb
helm upgrade \
influxdata/influxdb3-clustered \
-f ./values.yml \
--namespace influxdb
配置 influxctl
influxctl
CLI 允许您执行管理操作,例如创建数据库或数据库令牌。所有 influxctl
命令首先使用您的身份提供商进行授权。更新您的 influxctl
配置文件 以连接到您的身份提供商。
以下示例显示了如何为各种身份提供商配置 influxctl
[[profile]]
name = "default"
product = "clustered"
host = "cluster-host.com" # InfluxDB cluster host
port = "8086" # InfluxDB cluster port
[profile.auth.oauth2]
client_id = "KEYCLOAK_CLIENT_ID"
device_url = "https://KEYCLOAK_HOST/realms/KEYCLOAK_REALM/protocol/openid-connect/auth/device"
token_url = "https://KEYCLOAK_HOST/realms/KEYCLOAK_REALM/protocol/openid-connect/token"
[[profile]]
name = "default"
product = "clustered"
host = "cluster-host.com" # InfluxDB cluster host
port = "8086" # InfluxDB cluster port
[profile.auth.oauth2]
client_id = "AUTH0_CLIENT_ID"
client_secret = "AUTH0_CLIENT_SECRET"
device_url = "https://AUTH0_HOST/oauth/device/code"
token_url = "https://AUTH0_HOST/oauth/token"
[[profile]]
name = "default"
product = "clustered"
host = "cluster-host.com" # InfluxDB cluster host
port = "8086" # InfluxDB cluster port
[profile.auth.oauth2]
client_id = "AZURE_CLIENT_ID"
scopes = ["AZURE_CLIENT_ID/.default"]
device_url = "https://login.microsoftonline.com/AZURE_TENANT_ID/oauth2/v2.0/devicecode"
token_url = "https://login.microsoftonline.com/AZURE_TENANT_ID/oauth2/v2.0/token"
刷新您的管理令牌
为了准备迁移到生产环境,我们强烈建议撤销您集群的 admin 令牌,该令牌用于在 InfluxDB Clustered 安装过程的早期阶段与您的集群进行授权,并生成新的管理令牌。
有关详细说明,请参阅 撤销管理令牌。
测试您的授权流程
要测试您的身份提供商集成并确保管理访问权限已正确授权,请运行任何需要管理身份验证的 influxctl
命令,例如
influxctl token list
在执行之前,该命令会指示您使用您的身份提供商进行授权。成功授权后,命令将运行并成功返回结果。
此页面是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度或支持合同的客户 可以 联系 InfluxData 支持。