安全性

开发隧道是一种以安全为中心的开发人员隧道服务。 本文介绍如何保护开发隧道。

概述

默认情况下,托管和连接到隧道需要使用创建隧道的同一 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 组织中的管理员才能执行此操作。

其他问题

如果在查看此页面后,你还有更多问题,请参阅 “反馈和支持”。