安全性
开发隧道是一种以安全为中心的开发人员隧道服务。 本文介绍如何保护开发隧道。
概述
默认情况下,托管和连接到隧道需要使用创建隧道的同一 Microsoft、Microsoft Entra ID 或 GitHub 帐户进行身份验证。 隧道需要建立到 Azure 中托管的服务的出站连接。 使用服务不需要入站连接。
域
可以通过允许或拒绝对以下域的出站访问来控制对开发隧道的访问:
身份验证
github.com
login.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 应用 。 这为 Dev Tunnels 服务授予检查用户在该组织中的成员身份状态的权限。 (Dev Tunnels 不需要对组织拥有存储库权限。可能需要是 GitHub 组织中的管理员才能执行此操作。
其他问题
如果在查看此页面后,你还有更多问题,请参阅 “反馈和支持”。