使用Bicep部署Azure Key Vault:是否需允许Azure服务绕过防火墙?
问题描述
我使用以下Bicep模板部署Azure Key Vault,网络配置要求防火墙仅允许指定子网和IP范围的连接:
resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = { name: vaultName location: location properties: { tenantId: subscription().tenantId enableRbacAuthorization: true publicNetworkAccess: null enabledForDeployment: false enabledForDiskEncryption: false enabledForTemplateDeployment: false enableSoftDelete: true softDeleteRetentionInDays: 30 sku: { name: 'standard' family: 'A' } networkAcls: { defaultAction: 'Deny' bypass: 'None' ipRules: [for ip in allowIps: { value:ip }] virtualNetworkRules: [ { id: allowSubnet } ] } } } resource key 'Microsoft.KeyVault/vaults/keys@2023-07-01' = { parent: kv name: guid(vaultName, 'ssh-key') properties: { keySize: 4096 keyOps: [ 'encrypt' 'decrypt' ] kty: 'RSA' rotationPolicy: { lifetimeActions: [ { trigger: { timeBeforeExpiry: 'P30D' } action: { type: 'notify' } } { trigger: { timeBeforeExpiry: 'P7D' } action: { type: 'rotate' } } ] attributes: { expiryTime: 'P1Y10D' } } } }
部署时触发错误:因bypass设为None,来自西欧Azure数据中心IP 20.61.103.227的KeyVault/ManagementPlane请求被防火墙拒绝。将bypass设置为'AzureServices'后部署成功,但有两个疑问:
- 是否必须允许可信Azure服务绕过防火墙?此配置是否安全?
- 我已通过VPN连接到白名单IP范围,为何仍无法正常部署?
解答
关于bypass: 'AzureServices'的必要性与安全性
- 必要性:是的,在通过ARM/Bicep部署Key Vault并同时创建密钥这类关联资源时,Azure管理平面(比如资源提供服务)需要向Key Vault发起请求来完成资源创建。当你设置
defaultAction: 'Deny'且bypass: 'None'时,这些管理平面的请求会被防火墙拦截,导致部署失败。除非你能精准将所有Azure管理平面的IP加入白名单(但这类IP范围动态变化,不现实),否则必须设置bypass: 'AzureServices'才能完成这类关联资源的部署操作。 - 安全性:
AzureServices仅允许微软可信的第一方服务绕过防火墙,并非所有Azure服务都能访问。这些服务经过微软严格管控,且结合你已启用的enableRbacAuthorization: true,即使服务能绕过防火墙,仍需通过RBAC权限验证才能操作Key Vault,安全性有保障。如果担心过度开放,可在部署完成后,临时将bypass改回None——但后续若通过管理平面操作Key Vault(比如修改密钥策略、轮换配置),可能再次遇到拦截,需临时改回AzureServices。
VPN连接白名单IP仍无法部署的原因
- 部署请求的源IP问题:通过Bicep/ARM部署时,请求并非来自你的VPN客户端IP,而是来自Azure资源管理器(ARM)的服务IP(也就是报错里的20.61.103.227这类地址)。你的VPN连接仅让你能访问Key Vault的数据平面(比如读取密钥),但管理平面的部署请求是由ARM服务发起的,不会走你的VPN通道,所以即使你的VPN IP在白名单里,也无法解决部署时的管理平面请求拦截问题。
- 额外验证点:如果部署完成后,你通过VPN访问Key Vault仍有问题,需检查:
- VPN连接是否正确路由到Key Vault所在的虚拟网络或白名单IP范围
- 子网的网络安全组(NSG)是否允许Key Vault的端口(443)流量
- 你的客户端IP是否确实在
allowIps列表中(可通过curl ifconfig.me确认当前出口IP)
内容的提问来源于stack exchange,提问作者baouss
相关产品推荐
相关产品推荐

