管理 Chronograf 安全性
为了增强安全性,请配置 Chronograf 以使用 OAuth 2.0 进行身份验证和授权,并使用 TLS/HTTPS。(也提供使用用户名和密码进行基本身份验证。)
配置 Chronograf 以使用 OAuth 2.0 进行身份验证
配置 Chronograf 以使用 OAuth 2.0 提供程序和 JWT(JSON Web 令牌)对用户进行身份验证,并启用基于角色的访问控制。
(有关 OAuth 和 JWT 的更多详细信息,请参阅 RFC 6749 和 RFC 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 签名。
生成高熵伪随机字符串。
例如,要使用 OpenSSL 执行此操作,请运行以下命令
openssl rand -base64 256 | tr -d '\n'
设置环境变量
TOKEN_SECRET=<mysecret>
InfluxDB Enterprise 集群: 如果您在高可用性配置中运行多个 Chronograf 服务器,请在每台服务器上设置 TOKEN_SECRET
环境变量,以确保用户可以保持登录状态。
JWKS 签名验证(可选)
如果 OAuth 提供程序使用 RS256 签名实现了 OpenID Connect,则需要使用 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 身份验证
按照步骤在 GitHub 上注册新的 OAuth 应用程序,以获取您的客户端 ID 和客户端密钥。在 GitHub 应用程序注册页面上,输入以下值
- 主页 URL:完整的 Chronograf 服务器名称和端口。例如,要在本地使用默认设置运行应用程序,请将此 URL 设置为
https://127.0.0.1:8888
。 - 授权回调 URL:主页 URL 加上回调 URL 路径
/oauth/github/callback
(例如,https://127.0.0.1:8888/oauth/github/callback
)。
- 主页 URL:完整的 Chronograf 服务器名称和端口。例如,要在本地使用默认设置运行应用程序,请将此 URL 设置为
使用 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
如果您尚未这样做,请使用您的令牌密钥设置 Chronograf 环境
export TOKEN_SECRET=Super5uperUdn3verGu355!
或者,使用等效的命令行选项设置环境变量
有关命令行选项和环境变量的详细信息,请参阅GitHub OAuth 2.0 身份验证选项。
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 身份验证
按照 获取 OAuth 2.0 凭据 中的步骤获取所需的 Google OAuth 2.0 凭据,包括 Google 客户端 ID 和客户端密钥,方法是
验证 Chronograf 是否可使用完全限定域名公开访问,以便 Google 可以正确地将用户重定向回应用程序。
为 Google OAuth 2.0 凭据和用于访问 Chronograf 的 公共 URL 设置 Chronograf 环境变量
export GOOGLE_CLIENT_ID=812760930421-kj6rnscmlbv49pmkgr1jq5autblc49kr.apps.googleusercontent.com export GOOGLE_CLIENT_SECRET=wwo0m29iLirM6LzHJWE84GRD export PUBLIC_URL=https://127.0.0.1:8888
如果您尚未这样做,请使用您的令牌密钥设置 Chronograf 环境
export TOKEN_SECRET=Super5uperUdn3verGu355!
或者,可以使用其对应的命令行选项设置上面讨论的环境变量
有关 Chronograf 命令行选项和环境变量的详细信息,请参阅Google OAuth 2.0 身份验证选项。
可选的 Google 域
配置 Google 身份验证以将对 Chronograf 的访问限制为特定域。设置 GOOGLE_DOMAINS
环境变量或 --google-domains
命令行选项。使用逗号分隔多个域。例如,要仅允许来自 biffspleasurepalace.com
和 savetheclocktower.com
的访问,请按如下所示设置环境变量
export GOOGLE_DOMAINS=biffspleasurepalace.com,savetheclocktower.com
配置 Auth0 身份验证
有关 Auth0 实现的详细信息,请参阅 OAuth 2.0。
设置您的 Auth0 帐户以获取必要的凭据。
- 从 Auth0 用户仪表板中,单击 创建应用程序。
- 选择 常规 Web 应用程序 作为应用程序类型,然后单击 创建。
- 在 设置 选项卡中,将 令牌端点身份验证 设置为 无。
- 将 允许的回调 URL 设置为
https://www.example.com/oauth/auth0/callback
(将example.com
替换为您的 Chronograf 实例的PUBLIC_URL
) - 将 允许的注销 URL 设置为
https://www.example.com
(将example.com
替换为您的 Chronograf 实例的PUBLIC_URL
)
根据您的 Auth0 客户端凭据设置 Chronograf 环境变量
AUTH0_DOMAIN
(Auth0 域)AUTH0_CLIENT_ID
(Auth0 客户端 ID)AUTH0_CLIENT_SECRET
(Auth0 客户端密钥)PUBLIC_URL
(公共 URL,在上面的回调 URL 和注销 URL 中使用)
如果您尚未这样做,请使用您的令牌密钥设置 Chronograf 环境
export TOKEN_SECRET=Super5uperUdn3verGu355!
或者,可以使用其对应的命令行选项设置上面讨论的环境变量
Auth0 组织(可选)
Auth0 可以根据操作员的要求进行自定义,因此它没有“组织”的官方概念。Chronograf 中使用轻量级 app_metadata
密钥支持组织,该密钥可以自动或手动插入 Auth0 用户配置文件中。
要将用户分配给组织,请将 organization
密钥添加到用户 app_metadata
字段,其值对应于用户的组织。例如,您可以通过将 app_metadata
设置为 {"organization": "time-travelers"}
将用户 Marty McFly 分配给“time-travelers”组织。这可以通过操作员手动完成,也可以通过使用 Auth0 规则 或 预用户注册 Auth0 Hook 自动完成。
接下来,您需要将 Chronograf AUTH0_ORGS
环境变量设置为允许组织的逗号分隔列表。例如,如果您有一组用户的 organization
密钥设置为 biffs-gang
,另一组用户的 organization
密钥设置为 time-travelers
,您可以使用以下环境变量允许两者访问:AUTH0_ORGS=biffs-gang,time-travelers
。
--auth0-organizations
命令行选项也可用,但它仅限于单个组织,并且不接受像其环境变量等效项那样的逗号分隔列表。
配置 Heroku 身份验证
按照 此处 发布的指南,获取 Heroku 的客户端 ID 和应用程序密钥。
根据您的 Heroku 客户端凭据设置 Chronograf 环境变量
export HEROKU_CLIENT_ID=<client-id-from-heroku> export HEROKU_SECRET=<client-secret-from-heroku>
如果您尚未这样做,请使用您的令牌密钥设置 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 身份验证
按照 Okta 文档中的步骤创建 Okta Web 应用程序:实施授权码流。
在 常规设置 部分中,找到 允许的授权类型 列表,并且仅选择 代表用户操作的客户端: 授权码 选项。
在 登录 部分中,将 *登录重定向 URI 和 启动登录 URI 设置为
https://127.0.0.1:8888/oauth/okta/callback
(Chronograf 的默认回调 URL)。设置以下 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=https://127.0.0.1:8888 TOKEN_SECRET=secretsecretsecret GENERIC_SCOPES=openid,profile,email
如果您尚未这样做,请使用您的令牌密钥设置 Chronograf 环境
export TOKEN_SECRET=Super5uperUdn3verGu355!
配置 GitLab 身份验证
在您的 GitLab 个人资料中,创建新的 OAuth2 身份验证服务。
- 为您的应用程序提供名称,然后输入您的可公开访问的 Chronograf URL,并将
/oauth/gitlab/callback
路径作为您的 GitLab 回调 URL。(例如,http://<your_chronograf_server>:8888/oauth/gitlab/callback
。) - 单击 提交 以保存服务详细信息。
- 确保您的应用程序具有 openid 和 read_user 范围。
- 为您的应用程序提供名称,然后输入您的可公开访问的 Chronograf URL,并将
复制提供的 应用程序 ID 和 密钥 并设置以下环境变量
在下面的示例中,请注意 URL 中使用了
gitlab-server-example.com
和chronograf-server-example.com
。这些应替换为用于访问每个服务的实际 URL。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 身份验证
创建 Azure Active Directory 应用程序。请注意以下信息:
<APPLICATION-ID>
、<TENANT-ID>
和<APPLICATION-KEY>
。您将需要这些信息来定义您的 Chronograf 环境。请务必在 Azure 应用程序设置中注册回复 URL。这应与来自 Chronograf 的调用 URL 匹配。否则,您将收到一条错误消息,指出未为应用程序注册任何回复地址。例如,如果 Chronograf 配置的
GENERIC_NAME
值为 AzureAD,则回复 URL 将为https://127.0.0.1:8888/oauth/AzureAD/callback
。在 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=https://127.0.0.1:8888
注意:如果您已配置 TLS/SSL,请修改
PUBLIC_URL
以确保您使用的是 HTTPS。
配置 Bitbucket 身份验证
- 完成 在 Bitbucket Cloud 上使用 OAuth 的说明,并包括以下信息
- 回调 URL:https://127.0.0.1:8888/oauth/bitbucket/callback
- 权限:帐户读取、电子邮件
运行以下命令以在
/etc/default/chronograf
中为 Bitbucket 设置 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=https://127.0.0.1:8888 export GENERIC_NAME=bitbucket
配置 Chronograf 以使用任何 OAuth 2.0 提供程序
Chronograf 可以配置为与任何 OAuth 2.0 提供程序一起使用,包括上面定义的那些提供程序,方法是使用以下通用配置选项。此外,通用提供程序实现了 OpenID Connect (OIDC),如 Active Directory Federation Services (AD FS) 所实现的那样。
使用通用配置时,需要以下部分或全部环境变量(或相应的命令行选项)(具体取决于您的 OAuth 2.0 提供程序)
GENERIC_CLIENT_ID
:提供程序颁发的应用程序客户端标识符GENERIC_CLIENT_SECRET
:提供程序颁发的应用程序客户端密钥GENERIC_AUTH_URL
:提供程序的授权端点 URLGENERIC_TOKEN_URL
:Chronograf 客户端用来获取访问令牌的提供程序令牌端点 URLUSE_ID_TOKEN
:启用 OpenID id_token 处理JWKS_URL
:客户端用来验证 RSA 签名的提供程序 JWKS 端点GENERIC_API_URL
:Chronograf 用来请求用户数据的提供程序 OpenID UserInfo 端点 URLGENERIC_API_KEY
:OpenID UserInfo 的 JSON 查找密钥(已知 Microsoft Azure 需要,值为userPrincipalName
)GENERIC_SCOPES
:您的 Chronograf 实例所需的用户数据范围,例如用户电子邮件和 OAuth 提供程序组织- 多个值必须以空格分隔,例如
user:email read:org
- 这些可能因 OAuth 2.0 提供程序而异
- 默认值:
user:email
- 多个值必须以空格分隔,例如
PUBLIC_URL
:用于从 Web 浏览器访问 Chronograf 的完整公共 URL,即 Chronograf 的托管位置- Chronograf 使用,例如,构造回调 URL
TOKEN_SECRET
:用于验证 OAuth 状态 响应。(见上文)
可选环境变量
以下环境变量(和相应的命令行选项)也可用于可选用途
GENERIC_DOMAINS
:电子邮件地址必须包含的电子邮件域。GENERIC_NAME
:与PUBLIC_URL
结合使用的回调 URL 中的值,例如<PUBLIC_URL>/oauth/<GENERIC_NAME>/callback
- 此值也用于 Chronograf 登录按钮的文本中
- 默认值为
generic
- 因此,例如,如果
PUBLIC_URL
是https://127.0.0.1:8888
并且GENERIC_NAME
是其默认值,则回调 URL 将为https://127.0.0.1:8888/oauth/generic/callback
,并且 Chronograf 登录按钮将显示使用 Generic 登录
- 使用 Chronograf 时,在添加用户或创建组织映射时,应在“提供程序”字段中提供此值。
示例:带有 AD FS 的 OIDC
有关服务器配置的详细步骤,请参阅 使用 AD FS 2016 启用 OpenID Connect。
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 错误故障排除
ERRO[0053]
ERRO[0053] 错误指示未找到指定用户的主电子邮件。用户必须具有主电子邮件。
ERRO[0053] Unable to get OAuth Group malformed email address, expected "..." to contain @ symbol
配置身份验证持续时间
默认情况下,用户身份验证使用存储在 Web 浏览器中的 Cookie 保持有效 30 天。要配置不同的授权持续时间,请使用 AUTH_DURATION
环境变量设置持续时间。
示例
要将身份验证持续时间设置为 1 小时,请使用以下 shell 命令
export AUTH_DURATION=1h
持续时间使用 Go (golang) 时间持续时间格式,因此最大的时间单位是 h
(小时)。因此,要将其更改为 45 天,请使用
export AUTH_DURATION=1080h
要要求每次关闭浏览器时重新进行身份验证,请将 AUTH_DURATION
设置为 0
。这会使 Cookie 成为瞬态 Cookie(也称为“内存中”)。
配置 Chronograf 以使用用户名和密码进行身份验证
可以将 Chronograf 配置为通过用户名和密码(“基本身份验证”)对用户进行身份验证。启用基本身份验证访问以将对 Chronograf 的 HTTP 请求限制为选定的用户。
OAuth 2.0 是首选的身份验证方法。仅在 OAuth 2.0 集成不可行的情况下使用基本身份验证。
使用基本身份验证时,所有用户都具有超级管理员状态;Chronograf 授权规则不会强制执行。有关更多信息,请参阅跨组织超级管理员状态。
要启用基本身份验证,请使用 --htpasswd
标志或使用 HTPASSWD
环境变量运行 chronograf。
chronograf --htpasswd <path to .htpasswd file>
.htpasswd
文件包含用户及其密码,应使用密码文件实用程序(如 apache2-utils
)创建。有关如何使用基本身份验证限制访问的更多信息,请参阅 NGINX 文档,了解使用 HTTP 基本身份验证限制访问。
配置 TLS(传输层安全性)和 HTTPS
Chronograf 中支持 TLS(传输层安全性)加密协议,以提供服务器身份验证、数据机密性和数据完整性。使用 TLS 可保护服务器和 Web 浏览器之间的流量,并启用 HTTPS 的使用。
InfluxData 建议使用 HTTPS 与 Chronograf 应用程序安全通信。如果您未使用 TLS 终止代理,则可以使用 TLS 连接运行 Chronograf 服务器。
Chronograf 包括用于配置 TLS(传输层安全性)证书和密钥文件的命令行和环境变量选项。使用 TLS 加密协议可提供服务器身份验证、数据机密性和数据完整性。配置后,用户可以使用 HTTPS 安全地与您的 Chronograf 应用程序通信。
HTTPS 有助于防止恶意代理窃取 JWT 并将其用于欺骗服务器上的有效用户。
为 Chronograf 配置 TLS
Chronograf 服务器具有命令行和环境变量选项,用于指定证书和密钥文件。服务器从这些文件中读取和解析公钥/私钥对。这些文件必须包含 PEM 编码的数据。
所有 Chronograf 命令行选项都具有对应的环境变量。
要配置 Chronograf 以支持 TLS,请执行以下操作
使用
TLS_CERTIFICATE
环境变量或--cert
CLI 选项指定证书文件。使用
TLS_PRIVATE_KEY
环境变量或--key
CLI 选项指定密钥文件。如果 TLS 证书和密钥都在同一文件中,请使用
TLS_CERTIFICATE
环境变量(或--cert
CLI 选项)指定它们。(可选) 要指定允许的 TLS 密码套件,请使用
TLS_CIPHERS
环境变量或--tls-ciphers
CLI 选项。Chronograf 支持 Gocrypto/tls
包中的所有密码套件,并且默认情况下允许所有密码套件。(可选) 要指定允许的最小和最大 TLS 版本,请使用
TLS_MIN_VERSION
和TLS_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
。
此页面是否有帮助?
感谢您的反馈!