设置管理认证
为了管理对您的 InfluxDB 集群的行政访问,将您的集群与 OAuth 2.0 身份提供者集成。使用您的身份提供者为所有需要访问 InfluxDB 集群管理权限的用户创建 OAuth2 账户。管理访问权限允许用户执行创建数据库和数据库令牌(提供对数据库的读取和写入访问)等操作。
InfluxData 已与以下身份提供者进行了测试,但任何满足要求的提供者都应工作
身份提供者可以与您的InfluxDB集群一起部署或在外部运行。如果您选择将您的提供者与InfluxDB集群一起部署,下面的过程应该在您初始的InfluxDB集群部署后进行。
身份提供者要求
要将身份提供者集成到您的InfluxDB集群中,它必须满足以下要求
- 支持OAuth 2.0
- 支持设备授权流程
身份提供者凭据
要访问OAuth2服务器,InfluxDB需要以下OAuth2连接凭据
- 客户端ID
- JWKS端点
- 设备授权端点
- 令牌端点
设置您的身份提供者
以下提供了设置说明
Keycloak
要将Keycloak用作您的身份提供者
创建Keycloak领域
请参阅Keycloak文档中的创建领域。
创建一个启用了设备流的Keycloak客户端
在Keycloak管理员控制台中,导航到客户端,然后点击创建客户端。
在常规设置配置步骤中
- 将客户端类型设置为OpenID Connect。
- 输入一个客户端ID,保存您的客户端ID以供以后使用。
- 可选:输入客户端的名称和描述。
- 点击下一步。
在功能配置步骤中,启用OAuth 2.0设备授权授予身份验证流程,然后点击下一步。
在登录设置步骤中,您无需进行任何更改。点击保存。
创建用户
请参阅Keycloak文档中的创建用户。
使用Keycloak查找用户ID
要使用Keycloak查找用户ID,请使用Keycloak管理员控制台或Keycloak REST API。
Keycloak管理员控制台
- 在Keycloak管理员控制台中,导航到您的领域
- 在左侧导航中选择用户。
- 选择您要查找ID的用户。
- 选择详细信息选项卡。用户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领域KEYCLOAK_USERNAME
:要检索的Keycloak用户名
配置InfluxDB集群以使用Keycloak
运行以下命令以获取包含您的Keycloak领域OpenID配置的JSON对象
curl https://KEYCLOAK_HOST/realms/KEYCLOAK_REALM/.well-known/openid-configuration
以下是在连接您的InfluxDB集群和行政工具到Keycloak时必要的JSON对象中的重要字段
- 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集群以使用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 Portal
中,选择左侧导航中的用户
。 - 选择您想要OID的用户,然后点击
下载用户
。
在下载的CSV文件中,用户OID在id
列中提供。
注册一个启用设备代码流的新应用程序
- 在
Microsoft Azure Portal
中,选择左侧导航中的应用程序注册
。 - 点击
新注册
并为处理身份验证请求的新应用程序输入名称。 - 点击
注册应用程序
。 复制并存储您的应用程序(客户端)ID
。 - 在您的已注册应用程序中,点击左侧导航中的
身份验证
。 - 在
高级设置
下,将允许公共客户端流
设置为是
。这启用了使用设备代码流登录到您的InfluxDB集群。
配置InfluxDB集群以使用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。
以下是在连接您的InfluxDB集群和行政工具到Keycloak时必要的JSON对象中的重要字段
- 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
:OAuth2用户的列表,用于授予对您的InfluxDB集群的管理访问权限。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领域KEYCLOAK_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
文件中提供以下字段的值
管理员
identityProvider
:身份提供者名称。 如果您使用Microsoft Entra ID(以前称为Azure Active Directory),则将名称设置为azure
。jwksEndpoint
:由您的身份提供者提供的JWKS端点。users
:OAuth2用户的列表,用于授予对您的InfluxDB集群的管理访问权限。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领域KEYCLOAK_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"
测试您的授权流程
为了测试您的身份提供者集成并确保管理员访问权限已正确授权,请运行任何 需要管理员身份验证 的 influxctl
命令——例如
influxctl token list
在执行之前,命令会指导您使用您的身份提供者进行授权。授权成功后,命令将运行并返回结果。
这个页面有帮助吗?
感谢您的反馈!