Documentation

管理Chronograf安全性

为增强安全性,配置Chronograf以使用OAuth 2.0进行身份验证和授权,并使用TLS/HTTPS。 (也可以使用用户名和密码的基本身份验证。)

配置Chronograf以使用OAuth 2.0进行身份验证

在配置OAuth 2.0后,Chronograf管理员选项卡变得可见。您可以接着设置多个组织用户

配置Chronograf以使用OAuth 2.0提供程序和JWT(JSON Web Token)来验证用户并启用基于角色的访问控制。

(有关OAuth和JWT的更多详细信息,请参见RFC 6749RFC 7519。)

OAuth PKCE

Chronograf 1.9+ 中的 OAuth 配置使用 OAuth PKCE 来减轻在 OAuth 令牌交换过程中授权代码被截获的威胁。当前不支持 PKCE 的 OAuth 集成不受影响。

要禁用 OAuth PKCE 并恢复到之前的令牌交换,请使用 --oauth-no-pkce Chronograf 配置选项 或将 OAUTH_NO_PCKE 环境变量设置为 true

生成令牌密钥

要配置任何受支持的OAuth 2.0提供者以与Chronograf一起工作,您必须配置TOKEN_SECRET环境变量(或命令行选项)。Chronograf将使用此密钥为所有访问令牌生成JWT签名。

  1. 生成一个高熵伪随机字符串。

    例如,使用OpenSSL执行此操作,请运行以下命令:

    openssl rand -base64 256 | tr -d '\n'
    
  2. 设置环境变量:

    TOKEN_SECRET=<mysecret>
    

InfluxDB 企业集群: 如果您在高可用性配置中运行多个 Chronograf 服务器,请在每个服务器上设置 TOKEN_SECRET 环境变量,以确保用户可以保持登录状态。

JWKS 签名验证(可选)

如果OAuth提供者使用RS256签名实现OpenID连接,您需要通过USE_ID_TOKEN变量启用此功能,并提供一个JSON Web密钥集(JWKS)文档(持有证书链)以验证RSA签名。这个证书链会定期更新(当证书过期时),因此会根据需要从JWKS_URL获取。

示例:

export USE_ID_TOKEN=true
export JWKS_URL=https://example.com/adfs/discovery/keys

为您的OAuth提供者设置配置

要在Chronograf中启用OAuth 2.0授权和身份验证,您必须设置特定于您想要使用的OAuth 2.0身份验证提供程序的配置选项。

以下支持的认证提供者的配置步骤在下面的各节中提供:

如果您还没有,您必须先生成一个令牌密钥然后再继续。


配置 GitHub 认证

  1. 按照以下步骤注册一个新的OAuth应用在GitHub上获取你的客户端ID和客户端密钥。在GitHub应用注册页面,输入以下值:

    • 主页 URL: 完整的 Chronograf 服务器名称和端口。 例如,要以默认设置在本地运行应用程序,将此 URL 设置为 http://localhost:8888.
    • 授权回调 URL: 主页 URL 加上回调 URL 路径 /oauth/github/callback (例如, http://localhost:8888/oauth/github/callback).
  2. 使用GitHub提供的凭据设置Chronograf环境变量:

    export GH_CLIENT_ID=<github-client-id>
    export GH_CLIENT_SECRET=<github-client-secret>
    
    # If using Github Enterprise
    export GH_URL=https://github.custom-domain.com
    
  3. 如果您还没有,请使用您的令牌密钥设置Chronograf环境:

    export TOKEN_SECRET=Super5uperUdn3verGu355!
    

或者,使用等效的命令行选项设置环境变量:

有关命令行选项和环境变量的详细信息,请参见 GitHub OAuth 2.0 authentication options

GitHub 组织(可选)

要要求用户进行身份验证时必须加入 GitHub 组织,请将 GH_ORGS 环境变量设置为您组织的名称。

export GH_ORGS=biffs-gang

如果用户不是指定的 GitHub 组织的成员,则该用户将不被授予访问权限。
为了支持多个组织,请使用逗号分隔的列表。

export GH_ORGS=hill-valley-preservation-sociey,the-pinheads

首次登录时,确保授权访问您配置的组织。 OAuth 应用程序只能查看它已被授予访问权限的组织中的成员身份。

示例 GitHub OAuth 配置
# Github Enterprise base URL
export GH_URL=https://github.mydomain.com

# GitHub Client ID
export GH_CLIENT_ID=b339dd4fddd95abec9aa

# GitHub Client Secret
export GH_CLIENT_SECRET=260041897d3252c146ece6b46ba39bc1e54416dc

# Secret used to generate JWT tokens
export TOKEN_SECRET=Super5uperUdn3verGu355!

# Restrict to specific GitHub organizations
export GH_ORGS=biffs-gang

配置 Google 身份验证

  1. 按照获取OAuth 2.0凭证中的步骤获取所需的Google OAuth 2.0凭证,包括Google客户端ID和客户端密钥,

  2. 验证 Chronograf 是否可以通过完全合格的域名公开访问,以便 Google 可以正确地将用户重定向回应用程序。

  3. 设置用于访问 Chronograf 的 Google OAuth 2.0 凭据和 公共网址 的 Chronograf 环境变量:

    export GOOGLE_CLIENT_ID=812760930421-kj6rnscmlbv49pmkgr1jq5autblc49kr.apps.googleusercontent.com
    export GOOGLE_CLIENT_SECRET=wwo0m29iLirM6LzHJWE84GRD
    export PUBLIC_URL=http://localhost:8888
    
  4. 如果您还没有,请使用您的令牌密钥设置Chronograf环境:

    export TOKEN_SECRET=Super5uperUdn3verGu355!
    

或者,可以使用相应的命令行选项设置上述讨论的环境变量:

有关Chronograf命令行选项和环境变量的详细信息,请参见 Google OAuth 2.0 authentication options

可选的 Google 域名

配置Google身份验证以限制对Chronograf的访问,仅限特定域名。 设置GOOGLE_DOMAINS环境变量或--google-domains命令行选项。 使用逗号分隔多个域名。 例如,要仅允许来自biffspleasurepalace.comsavetheclocktower.com的访问,请按如下方式设置环境变量:

export GOOGLE_DOMAINS=biffspleasurepalace.com,savetheclocktower.com

配置Auth0身份验证

有关Auth0实现的详细信息,请参见 OAuth 2.0

  1. 设置您的 Auth0 账户以获取所需的凭据。

    1. From the Auth0 user dashboard, click Create Application.
    2. Choose Regular Web Applications as the type of application and click Create.
    3. In the Settings tab, set Token Endpoint Authentication to None.
    4. Set Allowed Callback URLs to https://www.example.com/oauth/auth0/callback (substituting example.com with the PUBLIC_URL of your Chronograf instance)
    5. Set Allowed Logout URLs to https://www.example.com (substituting example.com with the PUBLIC_URL of your Chronograf instance)
  2. 根据您的 Auth0 客户端凭据设置 Chronograf 环境变量:

    • AUTH0_DOMAIN(Auth0 域名)
    • AUTH0_CLIENT_ID (Auth0 客户端 ID)
    • AUTH0_CLIENT_SECRET(Auth0 客户端密钥)
    • PUBLIC_URL (公共网址,用于上面的回调网址和登出网址)
  3. 如果您还没有,请使用您的令牌密钥设置Chronograf环境:

    export TOKEN_SECRET=Super5uperUdn3verGu355!
    

或者,可以使用相应的命令行选项设置上述讨论的环境变量:

Auth0 组织(可选)

Auth0 可以根据运营商的要求进行自定义,因此它没有“组织”的官方概念。 组织在 Chronograf 中通过一个轻量级的 app_metadata 键进行支持,该键可以自动或手动插入到 Auth0 用户配置文件中。

要将用户分配到一个组织,请在用户的 app_metadata 字段中添加一个 organization 键,其值对应于用户所属的组织。 例如,您可以通过将 app_metadata 设置为 {"organization": "time-travelers"} 来将用户 Marty McFly 分配到“time-travelers”组织。 这可以通过操作员手动完成,也可以通过使用 Auth0 Rulepre-user registration Auth0 Hook 自动完成。

接下来,您需要将 Chronograf AUTH0_ORGS 环境变量设置为允许的组织的以逗号分隔的列表。例如,如果您有一组用户,其 organization 键设置为 biffs-gang,还有另一组用户,其 organization 键设置为 time-travelers,您可以通过这个环境变量允许对两个组织的访问:AUTH0_ORGS=biffs-gang,time-travelers

一个 --auth0-organizations 命令行选项也可用,但它仅限于单个组织,并且不接受像其环境变量等价物那样的以逗号分隔的列表。

配置 Heroku 认证

  1. 通过按照发布的指南获取Heroku的客户端ID和应用程序密钥 here

  2. 根据您的Heroku客户端凭据设置Chronograf环境变量:

    export HEROKU_CLIENT_ID=<client-id-from-heroku>
    export HEROKU_SECRET=<client-secret-from-heroku>
    
  3. 如果您还没有,请使用您的令牌密钥设置Chronograf环境:

    export TOKEN_SECRET=Super5uperUdn3verGu355!
    
Heroku 组织(可选)

要限制对特定 Heroku 组织成员的访问,请使用 HEROKU_ORGS 环境变量(或相关命令行选项)。多个值必须用逗号分隔。

例如,要允许来自 hill-valley-preservation-society 组织和 the-pinheads 组织的访问,使用以下环境变量:

export HEROKU_ORGS=hill-valley-preservation-sociey,the-pinheads

配置 Okta 认证

  1. 按照Okta文档中的步骤创建一个Okta网络应用程序: 实现授权码流程

  2. 常规设置部分,找到允许的授权类型列表,只选择代表用户的客户端: 授权码选项。

  3. 登录部分,设置 *登录重定向 URI初始化登录 URIhttp://localhost:8888/oauth/okta/callback(Chronograf 的默认回调 URL)。

  4. 设置以下 Chronograf 环境变量:

    GENERIC_NAME=okta
    
    # The client ID is provided in the "Client Credentials" section of the Okta dashboard.
    GENERIC_CLIENT_ID=<okta_client_ID>
    
    # The client secret is in the "Client Credentials" section of the Okta dashboard.
    GENERIC_CLIENT_SECRET=<okta_client_secret>
    
    GENERIC_AUTH_URL=https://dev-553212.oktapreview.com/oauth2/default/v1/authorize
    GENERIC_TOKEN_URL=https://dev-553212.oktapreview.com/oauth2/default/v1/token
    GENERIC_API_URL=https://dev-553212.oktapreview.com/oauth2/default/v1/userinfo
    PUBLIC_URL=http://localhost:8888
    TOKEN_SECRET=secretsecretsecret
    GENERIC_SCOPES=openid,profile,email
    
  5. 如果您还没有,请使用您的令牌密钥设置Chronograf环境:

    export TOKEN_SECRET=Super5uperUdn3verGu355!
    

配置 GitLab 认证

  1. 在您的 GitLab 个人资料中, 创建一个新的 OAuth2 认证服务

    1. Provide a name for your application, then enter your publicly accessible Chronograf URL with the /oauth/gitlab/callback path as your GitLab callback URL. (For example, http://<your_chronograf_server>:8888/oauth/gitlab/callback.)
    2. Click Submit to save the service details.
    3. Make sure your application has openid and read_user scopes.
  2. 复制提供的 应用程序ID密钥 并设置以下环境变量:

    在下面的例子中,请注意在网址中使用了 gitlab-server-example.comchronograf-server-example.com。 这些应该被替换为访问每个服务时使用的实际网址。

    GENERIC_NAME="gitlab"
    GENERIC_CLIENT_ID=<gitlab_application_id>
    GENERIC_CLIENT_SECRET=<gitlab_secret>
    GENERIC_AUTH_URL="https://gitlab.com/oauth/authorize"
    GENERIC_TOKEN_URL="https://gitlab.com/oauth/token"
    TOKEN_SECRET=<mytokensecret>
    GENERIC_SCOPES="api,openid,read_user"
    PUBLIC_URL="http://<chronograf-host>:8888"
    GENERIC_API_URL="https://gitlab.com/api/v3/user"
    

    等效的命令行选项为:

    --generic-name=gitlab
    --generic-client-id=<gitlab_application_id>
    --generic-client-secret=<gitlab_secret>
    --generic-auth-url=https://gitlab.com/oauth/authorize
    --generic-token-url=https://gitlab.com/oauth/token
    --token-secret=<mytokensecret>
    --generic-scopes=openid,read_user
    --generic-api-url=https://gitlab.com/api/v3/user
    --public-url=http://<chronograf-host>:8888/
    

配置 Azure Active Directory 认证

  1. 创建一个 Azure Active Directory 应用。 注意以下信息: ,和 。 您将需要这些来定义您的 Chronograf 环境。

  2. 请确保在您的Azure应用程序设置中注册一个回复网址。 这应该与来自Chronograf的调用网址匹配。 否则,您将收到一条错误消息,说明该应用程序未注册任何回复地址。 例如,如果Chronograf的GENERIC_NAME值配置为AzureAD,则回复网址将是http://localhost:8888/oauth/AzureAD/callback

  3. 在Azure AD中完成应用程序资源配置后,您现在可以使用Chronograf完成配置。 使用您Azure AD实例的元数据,继续导出以下环境变量:

    /etc/default/chronograf 中设置以下环境变量:

    GENERIC_TOKEN_URL=https://login.microsoftonline.com/<<TENANT-ID>>/oauth2/token
    TENANT=<<TENANT-ID>>
    GENERIC_NAME=AzureAD
    GENERIC_API_KEY=userPrincipalName
    GENERIC_SCOPES=openid
    GENERIC_CLIENT_ID=<<APPLICATION-ID>>
    GENERIC_AUTH_URL=https://login.microsoftonline.com/<<TENANT-ID>>/oauth2/authorize?resource=https://graph.windows.net
    GENERIC_CLIENT_SECRET=<<APPLICATION-KEY>>
    TOKEN_SECRET=secret
    GENERIC_API_URL=https://graph.windows.net/<<TENANT-ID>>/me?api-version=1.6
    PUBLIC_URL=http://localhost:8888
    

    注意:如果您已经配置了TLS/SSL,请修改 PUBLIC_URL 以确保您正在使用HTTPS。

配置 Bitbucket 认证

  1. 完成指示以 在 Bitbucket Cloud 上使用 OAuth,并包含以下信息:
  1. 运行以下命令为 Bitbucket 设置 Chronograf 环境变量在 /etc/default/chronograf:

    export TOKEN_SECRET=...
    export GENERIC_CLIENT_ID=...
    export GENERIC_CLIENT_SECRET=...
    export GENERIC_AUTH_URL=https://bitbucket.org/site/oauth2/authorize
    export GENERIC_TOKEN_URL=https://bitbucket.org/site/oauth2/access_token
    export GENERIC_API_URL=https://api.bitbucket.org/2.0/user
    export GENERIC_SCOPES=account
    export PUBLIC_URL=http://localhost:8888
    export GENERIC_NAME=bitbucket
    

配置Chronograf以使用任何OAuth 2.0提供者

Chronograf 可以配置为与任何 OAuth 2.0 提供者协同工作,包括上述定义的提供者,通过使用下面的通用配置选项。此外,通用提供者实现了由 Active Directory Federation Services (AD FS) 实现的 OpenID Connect (OIDC)。

在使用通用配置时,根据你的OAuth 2.0提供者,一些或所有以下环境变量(或相应的命令行选项)是必需的:

  • GENERIC_CLIENT_ID: 由提供者发放的应用客户端 标识符
  • GENERIC_CLIENT_SECRET: 由提供商发出的应用程序客户端 secret
  • GENERIC_AUTH_URL: 供应商的授权 endpoint URL
  • GENERIC_TOKEN_URL: 提供者的令牌 端点 URL,供 Chronograf 客户端获取访问令牌使用
  • USE_ID_TOKEN: 启用 OpenID id_token 处理
  • JWKS_URL: 提供者的 JWKS 端点,客户端用于验证 RSA 签名
  • GENERIC_API_URL: 提供者的 OpenID 用户信息端点 URL,供 Chronograf 请求用户数据使用
  • GENERIC_API_KEYOpenID UserInfo 的 JSON 查找键(已知在 Microsoft Azure 中是必需的,值为 userPrincipalName
  • GENERIC_SCOPES: 范围 用户数据所需的,用于您的 Chronograf 实例,例如用户邮箱和 OAuth 提供者组织
    • 多个值必须以空格分隔,例如 user:email read:org
    • 这些可能因 OAuth 2.0 提供者而异
    • 默认值: user:email
  • PUBLIC_URL: 用于从网页浏览器访问Chronograf的完整公共URL,即Chronograf托管的位置
    • 被Chronograf使用,例如,用于构建回调URL
  • TOKEN_SECRET: 用于验证OAuth state 响应。 (见上文)
可选环境变量

以下环境变量(及相应的命令行选项)也可供选择使用:

  • GENERIC_DOMAINS: 电子邮件地址必须包含的邮箱域名。
  • GENERIC_NAME: 在回调 URL 中与 PUBLIC_URL 一起使用的值,例如 /oauth//callback
    • 此值还用于 Chronograf 登录按钮的文本
    • 默认值为 generic
    • 因此,例如,如果 PUBLIC_URLhttps://localhost:8888 并且 GENERIC_NAME 是其默认值,则回调 URL 将是 https://localhost:8888/oauth/generic/callback,而 Chronograf 登录按钮将显示为 Log in with Generic
    • 在使用 Chronograf 时,此值应在添加用户或创建组织映射时提供在 Provider 字段中。
示例:与 AD FS 的 OIDC

请参阅 Enabling OpenID Connect with AD FS 2016 以了解服务器配置的详细步骤。

Chronograf的导出(例如在/etc/default/chronograf):

PUBLIC_URL="https://example.com:8888"
GENERIC_CLIENT_ID="chronograf"
GENERIC_CLIENT_SECRET="KW-TkvH7vzYeJMAKj-3T1PdHx5bxrZnoNck2KlX8"
GENERIC_AUTH_URL="https://example.com/adfs/oauth2/authorize"
GENERIC_TOKEN_URL="https://example.com/adfs/oauth2/token"
GENERIC_SCOPES="openid"
GENERIC_API_KEY="upn"
USE_ID_TOKEN="true"
JWKS_URL="https://example.com/adfs/discovery/keys"
TOKEN_SECRET="ZNh2N9toMwUVQxTVEe2ZnnMtgkh3xqKZ"

不要为 GENERIC_CLIENT_ID 使用特殊字符,因为 AD FS 可能会在特殊字符处拆分字符串,从而导致标识符不匹配。

排除 OAuth 错误

错误[0053]

A ERRO[0053] 错误表示未找到指定用户的主要电子邮件。 用户必须拥有一个主要电子邮件。

ERRO[0053] Unable to get OAuth Group malformed email address, expected "..." to contain @ symbol

配置身份验证持续时间

默认情况下,用户身份验证有效期为 30 天,使用存储在网页浏览器中的 cookie。要配置不同的授权持续时间,请使用 AUTH_DURATION 环境变量设置持续时间。

示例:

要将认证持续时间设置为1小时,请使用以下shell命令:

export AUTH_DURATION=1h

持续时间使用 Go (golang) 时间持续时间格式,因此最大的时间单位是 h(小时)。所以要将其更改为 45 天,使用:

export AUTH_DURATION=1080h

要在每次关闭浏览器时要求重新验证,请将 AUTH_DURATION 设置为 0。这会使 cookie 变为短暂的(即“在内存中”)。

配置Chronograf以使用用户名和密码进行身份验证

Chronograf可以配置为通过用户名和密码进行身份验证(“基本认证”)。
开启基本认证访问以限制对Chronograf的HTTP请求只允许选定用户。

OAuth 2.0 是首选的身份验证方法。只有在无法使用 OAuth 2.0 集成的情况下,才使用基本身份验证。

使用基本身份验证时,所有用户均具有超级管理员权限;不执行Chronograf授权规则。有关更多信息,请参见跨组织超级管理员权限

要启用基本身份验证,请使用 --htpasswd 标志运行 chronograf 或使用 HTPASSWD 环境变量。

chronograf --htpasswd <path to .htpasswd file>

..htpasswd文件包含用户及其密码,应该使用密码文件工具如apache2-utils创建。有关如何使用基本身份验证限制访问的更多信息,请参阅NGINX文档中的使用HTTP基本身份验证限制访问

配置 TLS(传输层安全性)和 HTTPS

TLS(传输层安全)加密协议在Chronograf中得到支持,以提供服务器身份验证、数据机密性和数据完整性。 使用TLS可以保护服务器与Web浏览器之间的流量,并启用HTTPS的使用。

InfluxData 建议使用 HTTPS 与 Chronograf 应用程序安全地进行通信。如果您没有使用 TLS 终止代理,您可以使用 TLS 连接运行 Chronograf 服务器。

Chronograf 包含命令行和环境变量选项,用于配置 TLS (传输层安全) 证书和密钥文件。 使用 TLS 加密协议可提供服务器身份验证、数据机密性和数据完整性。 配置后,用户可以使用 HTTPS 安全地与您的 Chronograf 应用程序进行通信。

HTTPS 有助于防止恶意代理窃取 JWT 并使用它来冒充服务器上的有效用户。

为Chronograf配置TLS

Chronograf 服务器具有命令行和环境变量选项来指定证书和密钥文件。 服务器从这些文件中读取和解析公钥/私钥对。 文件必须包含 PEM 编码的数据。

所有Chronograf命令行选项都有相应的环境变量。

要配置Chronograf以支持TLS,请执行以下操作:

  1. 使用 TLS_CERTIFICATE 环境变量或 --cert CLI 选项指定证书文件。

  2. 使用 TLS_PRIVATE_KEY 环境变量或 --key CLI 选项指定密钥文件。

    如果 TLS 证书和密钥在同一个文件中,请使用 TLS_CERTIFICATE 环境变量(或 --cert CLI 选项)指定它们。

  3. (可选) 要指定允许哪些 TLS 密码套件,请使用 TLS_CIPHERS 环境变量或 --tls-ciphers CLI 选项。 Chronograf 支持所有在 Go crypto/tls 中的密码套件,并默认允许所有密码套件。

  4. (可选) 要指定允许的最小和最大TLS版本,请使用 TLS_MIN_VERSIONTLS_MAX_VERSION 环境变量或 --tls-min-version--tls-max-version CLI选项。 默认情况下,允许的最小TLS版本是 tls1.2,最大版本是 无限制。

带有CLI选项的示例

chronograf \
  --cert=my.crt \
  --key=my.key \
  --tls-ciphers=TLS_RSA_WITH_AES_256_CBC_SHA,TLS_AES_128_GCM_SHA256 \
  --tls-min-version=tls1.2 \
  --tls-max-version=tls1.3

带环境变量的示例

TLS_CERTIFICATE=my.crt \
TLS_PRIVATE_KEY=my.key \
TLS_CIPHERS=TLS_RSA_WITH_AES_256_CBC_SHA,TLS_AES_128_GCM_SHA256 \
TLS_MIN_VERSION=tls1.2 \
TLS_MAX_VERSION=tls1.3 \
chronograf

带有环境变量的Docker示例

docker run \
  -v /host/path/to/certs:/certs \
  -e TLS_CERTIFICATE=/certs/my.crt \
  -e TLS_PRIVATE_KEY=/certs/my.key \
  -e TLS_CIPHERS=TLS_RSA_WITH_AES_256_CBC_SHA,TLS_AES_128_GCM_SHA256 \
  -e TLS_MIN_VERSION=tls1.2 \
  -e TLS_MAX_VERSION=tls1.3 \
  chronograf:1.10

使用自签名证书进行测试

要测试您的设置,您可以使用自签名证书。

不要在生产环境中使用自签名证书。

要使用 OpenSSL 创建一个包含证书和密钥的文件:

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout testing.pem -out testing.pem -subj "/CN=localhost" -days 365

接下来,设置环境变量 TLS_CERTIFICATE

export TLS_CERTIFICATE=$PWD/testing.pem

运行 Chronograf:

./chronograf
INFO[0000] Serving chronograf at https://[::]:8888       component=server

在第一条日志消息中,你应该看到 https 而不是 http



Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: