我看到了关于Kerberos身份验证的主题-https://github.com/mlflow/mlflow/issues/2678。那是在2020年。我们的团队试图通过spnego对kerberos进行身份验证。我们在nginx服务器上做了spnego,这很好——当我们对mlflow http uri进行curl时,会得到代码200。但是我们不能用mlflow环境变量来实现。
问题是,mlflow是否有一些功能可以通过spnego进行身份验证?或者它只有这些用于身份验证的环境变量和这样的方法:
- MLFLOW_TRACKING_USERNAME和MLFLOW_TRACKING_PASSWORD-用于HTTP基本身份验证的用户名和密码。若要使用基本身份验证,必须同时设置两个环境变量
- MLFLOW_TRACKING_TOKEN-用于HTTP承载身份验证的令牌。如果已设置,则基本身份验证优先
- MLFLOW_TRACKING_INSECURE_TLS-如果设置为true,则MLFLOW不会验证TLS连接,这意味着它不会验证https://跟踪URI的证书或主机名。不建议将此标志用于生产环境。如果设置为true,则不得设置MLFLOW_TRACKING_SERVER_CERT_PATH
- MLFLOW_TRACKING_SERVER_CERT_PATH-要使用的CA捆绑包的路径。设置requests.request函数的验证参数(请参阅https://requests.readthedocs.io/en/master/api/)。当您使用自签名服务器证书时,您可以使用该证书在客户端进行验证。如果设置了MLFLOW_TRACKING_INSECURE_TLS,则不得设置(false(
- MLFLOW_TRACKING_CLIENT_CERT_PATH-ssl客户端证书文件(.pem(的路径。设置requests.request函数的证书参数(请参阅https://requests.readthedocs.io/en/master/api/)。这可以用于使用(自签名(客户端证书
我查看了源代码。不,mlflow.utils.rest_utils.http_request
函数无论如何都不支持SPNEGO——它只能发送HTTP"Basic"或"Bearer"授权标头。
然而,将其更改为使用pyspnego生成"协商"标头应该相对容易,甚至可以使用请求gssapi,因为它已经在内部使用请求:
# For Linux:
import requests_gssapi
# For Windows:
#import requests_negotiate_sspi
def http_request(...):
...
if not auth_str:
# For Linux:
kwargs["auth"] = requests_gssapi.HTTPSPNEGOAuth()
# For Windows:
#kwargs["auth"] = requests_negotiate_sspi.HttpNegotiateAuth()
...