azure - 由于防火墙,无法从 VM 到 Azure Blob 存储
问题描述
我有一个在连接到 Azure Blob 存储和 Azure SQL 的 Azure VM 中运行的 powershell 脚本。Blob 存储和 SQL 都受防火墙保护,Blob 存储是 VNet 的一部分。VM 位于其自己的 VNet 上。我在 azure storage 和 sql azure 中都插入了 VM 的 IP 地址。对 SQL Azure 的访问很好,但是当我尝试连接到 blob 存储时,我收到错误消息
“Get-AzStorageContainer:此请求无权执行此操作。HTTP 状态代码:403 - HTTP 错误消息:此请求无权执行此操作。错误代码:AuthorizationFailure”。
我正在使用连接字符串来访问 blob 存储。如果我从我的 PC 连接(其 IP 地址输入防火墙),我可以访问没有问题。如果我使用 azure 存储资源管理器中的连接字符串从 VM 访问 blob 存储,我会收到相同的错误消息。
如果我禁用 blob 存储上的防火墙,那么我可以使用 powershell 和存储资源管理器从 VM 正常访问它。
不确定这是否相关,但如果我Get-NetIPAddress | Format-Table
在 VM 上执行,我会得到一个报告的 Ipv6 ip 地址,而不是我在其他任何地方和防火墙中使用的 IPv4。
这可能是相关的,但不知道如何以一种或另一种方式证明它:Azure 存储帐户防火墙规则适用于表,但会破坏 blob 存储
任何人都可以提出这种奇怪行为的原因吗?如何在不禁用防火墙的情况下从 VM 可靠地访问 Blob 存储?
解决方案
不确定您是否说过“blob 存储是 VNet 的一部分。”。但在这种情况下,您可以在 VNet(位于 VM)内为 Azure 存储启用服务终结点,并将其子网添加到 blob 存储的虚拟网络中。无需将 VM 的 IP 地址添加到存储帐户的防火墙。
参考:http ://techtalk.cloud/azure-vnet-integration-service-endpoints-for-azure-storage/
更新
如果存储帐户和 VM 位于同一区域,则流量会通过 Azure 主干网络。我在不同区域的 VM 上进行了尝试,然后将 Azure VM 的静态公共 IP 列入存储帐户的防火墙,它成功了!
笔记
IP 网络规则对来自与存储帐户相同的 Azure 区域的请求没有影响。使用虚拟网络规则来允许相同区域的请求。
与存储帐户部署在同一区域的服务使用私有 Azure IP 地址进行通信。因此,您不能根据公共出站 IP 地址范围限制对特定 Azure 服务的访问。
推荐阅读
- kubernetes-helm - 使用 Helm 修改现有资源
- excel - 当我需要下一行的值时,如何修改此宏中的范围?
- python - Python:根据最大值传播过滤子列表
- keycloak - fromIndex < 0: -1
- c# - 如何在图表中获取 DataLabels 类型?
- spring-boot - 为 Kafka 创建的 Kubernetes 端点,但未反映在 POD 中
- go - grpc protobuf 用字符串创建新结构
- javascript - 如何拆分字符串,转换为数字和求和
- intellij-idea - IntelliJ 中的 Cucumber:选择测试项目不应该显示其数据吗?
- javascript - 如何使用 JQuery 显示自定义导航选项卡的内容?