You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET桌面应用中通过REST API/.NET SDK增删Azure存储防火墙允许IP

Hey there! 我刚好有过类似的开发经验,给你分享两种可行的方案——用Azure .NET SDK或者直接调用REST API,都能实现存储账户防火墙IP的增删操作:

使用Azure .NET SDK实现(推荐)

这是最省心的方式,SDK会帮你处理身份验证、请求签名和资源序列化等细节,不用自己造轮子。

第一步:安装必要的NuGet包

先在项目里安装最新的Azure资源管理SDK和身份验证包:

Install-Package Azure.ResourceManager.Storage
Install-Package Azure.Identity

第二步:编写增删IP规则的代码

下面是完整的示例代码,包含获取现有规则、新增IP、删除指定IP,最后提交更新的流程:

using Azure.Identity;
using Azure.ResourceManager.Storage;
using Azure.ResourceManager.Storage.Models;

// 1. 初始化ArmClient(用DefaultAzureCredential适配本地开发和生产环境)
var armClient = new ArmClient(new DefaultAzureCredential());

// 2. 替换成你的订阅ID、资源组名、存储账户名
string subscriptionId = "你的订阅ID";
string resourceGroupName = "你的资源组名";
string storageAccountName = "你的存储账户名";

// 3. 获取目标存储账户的资源引用
var storageAccountResourceId = StorageAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, storageAccountName);
var storageAccount = armClient.GetStorageAccountResource(storageAccountResourceId);

// 4. 获取当前的网络规则配置
var currentNetworkRules = await storageAccount.GetNetworkRuleSetAsync();
var existingIpRules = currentNetworkRules.Value.Properties.IpRules.ToList();

// --- 新增IP规则示例 ---
// 添加单个IP地址
existingIpRules.Add(new IpRule("203.0.113.10", Action.Allow));
// 添加IP范围
existingIpRules.Add(new IpRule("192.168.0.0/24", Action.Allow));

// --- 删除IP规则示例 ---
// 根据IP地址/范围删除指定规则
existingIpRules.RemoveAll(rule => rule.IpAddressOrRange == "192.168.0.0/24");

// 5. 构建更新参数(注意:必须保留原有其他规则,比如虚拟网络规则,否则会被清空)
var updateParams = new StorageAccountNetworkRuleSetUpdate
{
    IpRules = existingIpRules,
    // 保留原有的默认动作和虚拟网络规则
    DefaultAction = currentNetworkRules.Value.Properties.DefaultAction,
    VirtualNetworkRules = currentNetworkRules.Value.Properties.VirtualNetworkRules
};

// 6. 提交更新,等待操作完成
await storageAccount.UpdateNetworkRuleSetAsync(WaitUntil.Completed, updateParams);

权限说明

确保你的应用程序拥有足够的权限:比如分配Storage Account Contributor角色,或者自定义包含Microsoft.Storage/storageAccounts/networkRuleSets/write操作的权限。

使用REST API实现

如果不想依赖SDK,也可以直接调用Azure Resource Manager的REST API来操作。

请求详情

  • 请求方法:PUT
  • 请求URL:
    https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/networkRuleSets/default?api-version=2023-01-01
    
  • 请求头:需要携带Azure AD颁发的Bearer令牌
  • 请求体:必须包含所有现有规则(否则会覆盖清空),示例如下:
    {
      "properties": {
        "defaultAction": "Deny",
        "ipRules": [
          {
            "value": "203.0.113.10",
            "action": "Allow"
          },
          {
            "value": "192.168.0.0/24",
            "action": "Allow"
          }
        ],
        "virtualNetworkRules": [] // 这里保留原有的虚拟网络规则,没有的话留空数组
      }
    }
    

.NET调用示例

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using Azure.Identity;

var subscriptionId = "你的订阅ID";
var resourceGroupName = "你的资源组名";
var storageAccountName = "你的存储账户名";
var apiVersion = "2023-01-01";

// 获取Azure AD令牌
var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] { "https://management.azure.com/.default" }));

// 构建HTTP请求
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);

var requestUrl = $"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}/networkRuleSets/default?api-version={apiVersion}";

// 构造请求体(注意保留所有现有规则)
var requestBody = new
{
    properties = new
    {
        defaultAction = "Deny",
        ipRules = new[]
        {
            new { value = "203.0.113.10", action = "Allow" },
            new { value = "192.168.0.0/24", action = "Allow" }
        },
        virtualNetworkRules = new object[] { }
    }
};

var jsonContent = JsonSerializer.Serialize(requestBody);
var content = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");

// 发送请求并验证结果
var response = await client.PutAsync(requestUrl, content);
response.EnsureSuccessStatusCode();

关键注意事项

  • 不管用SDK还是REST API,更新时必须包含所有现有规则,否则未提及的规则会被自动清空
  • 确保存储账户已经启用SMB over Internet,否则即使添加了IP规则,客户也无法通过互联网访问SMB

内容的提问来源于stack exchange,提问作者Illbegood73

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:12:13