title | summary |
---|---|
TiCDC 客户端鉴权 |
介绍使用 TiCDC 命令行工具或通过 OpenAPI 访问 TiCDC 时,如何进行客户端鉴权。 |
从 v8.1.0 起,TiCDC 支持使用 mTLS(双向传输层安全性协议)或 TiDB 用户名密码进行客户端鉴权。
- mTLS 鉴权:在传输层进行安全控制,使 TiCDC 可以验证客户端身份。
- TiDB 用户名密码鉴权:在应用层进行安全控制,确保只有授权用户才能通过 TiCDC 节点登录。
这两种鉴权方式既可以单独使用,也可以结合使用,以满足不同的场景和安全需求。
注意:
为了保证网络访问的安全性,强烈建议仅在开启 TLS 加密传输的情况下,使用 TiCDC 客户端鉴权功能。如果不开启 TLS 加密传输,用户名和密码将会以明文的方式通过网络传输,这会带来严重的泄露风险。
-
在 TiCDC Server 中,将
security.mtls
配置为true
以开启 mTLS 鉴权:[security] # 控制是否开启 TLS 客户端鉴权,默认值为 false。 mtls = true
-
配置客户端证书。
使用 TiCDC 命令行工具时,你可以通过以下方式之一指定客户端证书。TiCDC 将按照以下顺序依次尝试读取客户端证书:
-
通过命令行参数
--cert
和--key
指定证书和私钥。如果服务端使用了自签名证书,还需要通过--ca
参数指定受信任的 CA 证书:cdc cli changefeed list --cert client.crt --key client.key --ca ca.crt
-
通过环境变量
TICDC_CERT_PATH
、TICDC_KEY_PATH
和TICDC_CA_PATH
指定证书、私钥和 CA 证书的路径:export TICDC_CERT_PATH=client.crt export TICDC_KEY_PATH=client.key export TICDC_CA_PATH=ca.crt
-
通过共享凭证文件
~/.ticdc/credentials
指定客户端证书。你可以使用cdc cli configure-credentials
命令修改此文件的配置。
使用 TiCDC OpenAPI 时,通过
--cert
和--key
指定客户端证书和私钥。如果服务端使用了自签名证书,还需要通过--cacert
指定受信任的 CA 证书。示例:curl -X GET http://127.0.0.1:8300/api/v2/status --cert client.crt --key client.key --cacert ca.crt
-
-
在 TiDB 中创建用户,并授权该用户从 TiCDC 所在节点登录的权限:
CREATE USER 'test'@'ticdc_ip_address' IDENTIFIED BY 'password';
-
在 TiCDC Server 中,配置
security.client-user-required
和security.client-allowed-user
以开启用户名和密码鉴权:[security] # 控制是否使用用户名和密码进行客户端鉴权,默认值为 false。 client-user-required = true # 指定可用于客户端鉴权的用户名,列表中不存在的用户的鉴权请求将被直接拒绝。默认值为 null。 client-allowed-user = ["test"]
-
指定步骤 1 创建的授权用户的用户名和密码。
使用 TiCDC 命令行工具时,你可以通过以下方式之一指定用户名和密码。TiCDC 将按照以下顺序依次尝试读取用户名和密码:
-
通过命令行参数
--user
和--password
指定用于鉴权的用户名和密码:cdc cli changefeed list --user test --password password
-
通过命令行参数
--user
指定用于鉴权的用户名,然后通过终端输入密码:cdc cli changefeed list --user test
-
通过环境变量
TICDC_USER
和TICDC_PASSWORD
指定用于鉴权的用户名和密码:export TICDC_USER=test export TICDC_PASSWORD=password
-
通过共享凭证文件
~/.ticdc/credentials
指定用于鉴权的用户名和密码。你可以使用cdc cli configure-credentials
命令修改此文件的配置。
使用 TiCDC OpenAPI 时,通过
--user <user>:<password>
指定用于鉴权的用户名和密码。示例:curl -X GET http://127.0.0.1:8300/api/v2/status --user test:password
-