如何通过 powershell 或 C# 使用本地 IP 远程更新 azure webapp 防火墙

2024-04-17

如何使用本地 PC IP 地址远程更新我的 azure webapp 防火墙,以便通过 powershell 或 C# 进行管理。

我已经查看了文档,但我只能从实际服务器本身找到如何操作,而不能远程操作。

我可以让 Visual Studio 弹出并询问我是否要随机将 IP 地址添加到防火墙,但大多数时候它只是失败并且不会询问我,所以我正在寻找除手动登录 azure 之外的解决方案每当我的 IP 地址发生变化时。

寻找示例或文档链接来显示要使用的库。

更新:我尝试了 Tom Sun 的答案,但是我们使用的是 Web 应用程序而不是 SQL 服务器,所以它不起作用。

azure.WebApps.GetByResourceGroup("resourcegroup","webapp")

返回网络应用程序,但我无法找到以编程方式访问该网络应用程序的网络下找到的“访问限制”的方法。

我也只能访问此 Web 应用程序的主部署槽。我需要为每个部署槽单独设置防火墙(可以通过 azure Web 界面完成)。

我尝试通过以下名称访问第二个部署槽,全部返回 null。假设 Web 应用程序名为“webapp”,部署槽名为“slo1”

网络应用程序插槽1 webapp_slot1 网络应用程序/slot1

我也尝试过 GetByID 而不是 GetByResourceGroup,但是我找不到任何关于他的 ID 是什么以及在哪里可以找到它的示例。我已经尝试了几乎所有可以在 azure Web UI 上找到的 ID。

最后,Tom Sun 的答案要求将硬编码凭据存储在驱动器上。这远非最佳。我更喜欢一个弹出式 UI,提示用户输入用户名和密码,这在旧版本的 API 中曾经是可能的,但我能找到的所有内容都表明它不再是了。我可能不得不求助于 powershell。


我们可以这样做Microsoft.Azure.管理.Fluent https://www.nuget.org/packages/Microsoft.Azure.Management.Fluent/ and Microsoft.Azure.Management.ResourceManager.Fluent https://www.nuget.org/packages/Microsoft.Azure.Management.ResourceManager.Fluent/,有关库的更多详细信息,请参阅packages.config。我们还可以获得更多演示代码 https://github.com/Azure/azure-libraries-for-net/blob/master/Samples/Sql/ManageSqlFirewallRules.cs来自github https://github.com/Azure/azure-libraries-for-net/tree/master/Samples。在编码之前我们需要注册一个Azure AD应用程序并为其分配相应的角色,更多详细信息请参阅document https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal#create-an-active-directory-application。然后我们可以从Azure AD应用程序中获取clientId、密钥(密钥)和租户。之后我们可以创建授权文件 https://github.com/Azure/azure-libraries-for-net/blob/master/AUTH.md#auth-file-formats具有以下格式

subscription=########-####-####-####-############
client=########-####-####-####-############
tenant=########-####-####-####-############
key=XXXXXXXXXXXXXXXX
managementURI=https\://management.core.windows.net/
baseURL=https\://management.azure.com/
authURL=https\://login.windows.net/
graphURL=https\://graph.windows.net/

演示代码:

 var credFile = @"File Path"; // example: c:\tom\auth.txt
            var resourceGroup = "resource group";
            var azureSQLServer = "Azure sql server name"; //just name of the Azure sql server such as tomdemo
            var firewallRull = "firewall rull name";//such as myFirewallRull
            var firewallRuleIPAddress = "x.x.x.x";//your Ip address
            var credentials = SdkContext.AzureCredentialsFactory.FromFile(credFile);
            var azure = Azure
                .Configure()
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Authenticate(credentials)
                .WithDefaultSubscription();

            var sqlServer = azure.SqlServers.GetByResourceGroup(resourceGroup, azureSQLServer);
            var newFirewallRule = sqlServer.FirewallRules.Define(firewallRull)
                .WithIPAddress(firewallRuleIPAddress)
                .Create();

包配置

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.AppService.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Batch.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Cdn.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Compute.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.ContainerInstance.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.ContainerRegistry.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.CosmosDB.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Dns.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Graph.RBAC.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.KeyVault.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Network.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Redis.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.ResourceManager.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Search.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.ServiceBus.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Sql.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.Storage.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Azure.Management.TrafficManager.Fluent" version="1.3.0" targetFramework="net461" />
  <package id="Microsoft.Data.Edm" version="5.8.2" targetFramework="net461" />
  <package id="Microsoft.Data.OData" version="5.8.2" targetFramework="net461" />
  <package id="Microsoft.Data.Services.Client" version="5.8.2" targetFramework="net461" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net461" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.9" targetFramework="net461" />
  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.10" targetFramework="net461" />
  <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.3.1" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net461" />
  <package id="System.ComponentModel.EventBasedAsync" version="4.0.11" targetFramework="net461" />
  <package id="System.Dynamic.Runtime" version="4.0.0" targetFramework="net461" />
  <package id="System.Linq.Queryable" version="4.0.0" targetFramework="net461" />
  <package id="System.Net.Requests" version="4.0.11" targetFramework="net461" />
  <package id="System.Spatial" version="5.8.2" targetFramework="net461" />
  <package id="WindowsAzure.Storage" version="8.1.4" targetFramework="net461" />
</packages>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 powershell 或 C# 使用本地 IP 远程更新 azure webapp 防火墙 的相关文章

随机推荐