开发隧道是一项注重安全性的开发者隧道服务。 本文介绍如何确保开发隧道的安全。
概述
默认情况下,托管和连接到隧道需要使用相同的Microsoft、Microsoft Entra ID 或创建隧道的 GitHub 帐户进行身份验证。 隧道要求与 Azure 中托管的服务建立出站连接。 使用服务不需要入站连接。
域名
可以通过允许或拒绝对以下域的出站访问来控制对开发隧道的访问:
身份验证
github.comlogin.microsoftonline.com
开发隧道
global.rel.tunnels.api.visualstudio.com[clusterId].rel.tunnels.api.visualstudio.com[clusterId]-data.rel.tunnels.api.visualstudio.com*.[clusterId].devtunnels.ms*.devtunnels.ms
当前 [clusterId] 值的列表在 https://global.rel.tunnels.api.visualstudio.com/api/v1/clusters.
Web 转发
可以使用 HTTP(S)/WS(S) 协议的隧道端口直接通过提供的 Web 转发 URL(例如: https://tunnelid-3000.devtunnels.ms) 进行访问。
- 不安全的客户端连接始终自动升级到 HTTPS/WSS。
- HTTP 严格传输安全(HSTS)已启用,最大存续时间为一年。
- 服务支持的最低 TLS 版本为 1.2,TLS 1.3 是首选版本。
- TLS 终止是在服务入口中使用由 Microsoft CA 颁发的服务证书完成的。
- TLS 终止后,将进行标头重写。 对于许多 Web 应用程序开发方案,这是必需的。
防钓鱼保护
首次连接到 Web 转发 URL 时,用户会显示间隙防钓鱼页面。 在以下情况下将跳过页面:
- 请求使用了不同于
GET的方法。 - 请求
Accept标头不包含text/html - 请求包含
X-Tunnel-Skip-AntiPhishing-Page标头 - 请求包含
X-Tunnel-Authorization标头 - 用户已访问该页面并单击“继续”
隧道访问
默认情况下,隧道和隧道端口是专用的,只能供创建隧道的用户访问。
如果需要在没有身份验证的情况下访问隧道或隧道端口,则可以添加允许匿名访问控制条目(ACE)(使用 --allow-anonymous)。
隧道访问也可以扩展到当前Microsoft Entra 租户(使用 --tenant)或特定的 GitHub 组织(使用 --organization);对于后者,请参阅下面的 GitHub 组织访问 。
CLI 还可用于请求访问令牌,这些令牌授予对持有令牌(使用 devtunnel token)的任何人的有限访问权限。 这是一项高级功能,但在特定情况下非常有用。
目前,有四种类型的隧道访问令牌可用:
- “客户端访问令牌”允许持有者连接到隧道的任何端口。
- “主机访问令牌”允许持有者托管隧道并接受连接,但不对其进行任何其他更改。
- “管理端口访问令牌”允许持有者在隧道上添加和删除端口。
- “管理访问令牌”允许持有者对该隧道执行任何作,包括设置访问控制、托管、连接和删除隧道。
所有令牌都仅限于当前隧道;他们不会授予对当前用户 的任何其他隧道( 如果有)的访问权限。 令牌在一段时间后过期(目前为 24 小时)。 只能使用具有隧道管理范围访问权限的实际用户标识(而不仅仅是管理访问令牌)来刷新令牌。
大多数 CLI 命令可以接受 --access-token 参数,以适当的令牌替代登录。
Web 客户端可以在标头中传递令牌来授权对隧道 URI 的请求:
X-Tunnel-Authorization: tunnel <TOKEN>
小窍门
这对于非交互式客户端非常有用,因为它允许它们访问隧道,而无需启用匿名访问。 我们使用 X-Tunnel-Authorization 标头而不是标准 Authorization 标头来防止可能干扰特定于应用程序的授权。
请参阅 “管理开发隧道访问 ”部分,详细了解如何通过 CLI 管理隧道访问。
GitHub组织的访问权限
若要支持授予对 GitHub 组织所有成员的访问权限的隧道,请在组织中安装 Dev Tunnels GitHub 应用 。 这样,开发隧道服务即有权检查组织中用户的成员身份状态。 (开发隧道不要求对组织拥有存储库权限。)你可能需要是 GitHub 组织中的管理员才能执行此操作。
其他问题
如果在查看此页面后,你还有更多问题,请参阅 “反馈和支持”。