Web 应用程序代理是 YARN 的一部分。默认情况下,它将作为资源管理器 (RM) 的一部分运行,但可以配置为以独立模式运行。使用代理是为了降低通过 YARN 进行基于 Web 的攻击的可能性。
在 YARN 中,应用程序主控 (AM) 负责提供 Web UI 并将该链接发送到 RM。这会引发许多潜在问题。RM 以受信任用户的身份运行,访问该 Web 地址的人员会将其视为受信任的地址,并将其提供的链接视为受信任的地址,而实际上 AM 以不受信任用户的身份运行,它提供给 RM 的链接可能指向任何恶意或其他内容。Web 应用程序代理通过警告不拥有给定应用程序的用户他们正在连接到不受信任的网站来降低此风险。
除此之外,代理还尝试减少恶意 AM 对用户的影响。它主要通过从用户那里剥离 cookie 并用提供已登录用户用户名的单个 cookie 替换它们来实现此目的。这是因为大多数基于 Web 的身份验证系统将根据 cookie 识别用户。通过向不受信任的应用程序提供此 cookie,它会带来利用漏洞的可能性。如果 cookie 设计得当,这种可能性应该很小,但这只是为了减少潜在的攻击媒介。
当前代理实现未采取任何措施来阻止 AM 提供指向恶意外部网站的链接,也未采取任何措施来阻止恶意 JavaScript 代码运行。事实上,JavaScript 可用于获取 cookie,因此此时从请求中剥离 cookie 的好处最小。我们希望在未来解决上述攻击媒介,并使连接到 AM 的 Web UI 更加安全。
配置属性 | 说明 |
---|---|
yarn.web-proxy.address |
Web 代理的地址为 HOST:PORT,如果未给出,则代理将作为 RM 的一部分运行。 |
yarn.web-proxy.keytab |
WebAppProxy 的 Keytab,如果代理未作为 RM 的一部分运行。 |
yarn.web-proxy.principal |
代理的 Kerberos 主体,如果代理未作为 RM 的一部分运行。 |
可以使用以下命令启动独立的 Web 应用程序代理服务器。
$ yarn proxyserver
或者,用户可以使用以下命令将独立的 Web 应用程序代理服务器作为守护进程启动
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver