Azure CLI 的代理身份验证

Proxy authentication for Azure CLI

对于 Azure CLI,有没有办法使用代理身份验证?我们的代理服务器需要对所有请求进行身份验证,我没有看到任何相关文件。使用 HTTP_PROXY 环境变量,我可以指示 az cli 使用特定的代理服务器,但我无法将其定义为使用代理身份验证,或者如果有办法执行此操作,我不知道。我们的代理身份验证必须通过 NTLM 或 Kerberos 完成。

请相关团队检查是否可以配置az cli使用Kerberos代理认证?

答案的根源在于 Azure CLI 构建于 Python 之上。现在关于身份验证,Azure CLI 使用基于 AAD 的协议,该协议由源代码为 published here.

的 Python 的 ADAL 库处理

因此,如果对此感兴趣并且有人想查看线级详细信息,请在此处挖掘。

如前所述,Azure CLI 构建于 python 之上,原因之一是它具有广泛的跨平台范围,因为它在 Windows、Mac 中可用, Linux(可能还有其他端口可用)。

ADAL Python 基于流行的 Python HTTP 库。虽然可以配置代理(这不是 而不是 这里的问题),但企业想要的是一种在汇集请求时使用 Kerberos/NTLM 对请求进行身份验证的方法通过代理。因此,如果您深入研究 Python HTTP 库的文档,you can see named requests, whose proxy support can be configured inline or by environment vars(同样是 而不是 ASK)。

现在,当您深入研究代理请求时的身份验证时,该文档仅提及 HTTP 基本身份验证,而没有提及 Kerberos/NTLM 类型的身份验证。现在如果 与任何具有安全意识的企业合作过,这将很难得到例外。一些企业提出了这一要求,他们希望在离开边界之前在面向外部的代理上对所有 Azure CLI 请求进行身份验证(安全要求)。

当前的答案是没有支持的方法来执行此操作,除非实现了执行此操作的身份验证处理程序,以用于代理已到位的情况。如果我没记错的话,这个请求完全属于 Python HTTP 库所有者。

任何仍在寻找此问题答案的人都可以找到答案here

# Non-authenticated HTTP server:
HTTP_PROXY=http://10.10.1.10:1180

# Authenticated HTTP server:
HTTP_PROXY=http://username:password@10.10.1.10:1180

# Non-authenticated HTTPS server:
HTTPS_PROXY=http://10.10.1.10:1180

# Authenticated HTTPS server:
HTTPS_PROXY=http://username:password@10.10.1.10:1180

显然这不是最安全的方法,请注意 url 对任何特殊字符进行编码。

在我的例子中,我必须从变量字符串中删除协议“http|https”

# Non-authenticated HTTP server:
HTTP_PROXY=server.fqdn.int:8080

# Non-authenticated HTTPS server:
HTTPS_PROXY=server.fqdn.int:8080