如何通过Powershell或C#远程更新具有本地IP的Azure WebApp防火墙 [英] How to remotely update azure webapp firewall with local IP via powershell or C#

查看:51
本文介绍了如何通过Powershell或C#远程更新具有本地IP的Azure WebApp防火墙的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用本地PC IP地址通过Powershell或C#远程更新Azure WebApp防火墙以进行管理。

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

我可以让Visual Studio弹出窗口,询问我是否要将IP地址随机添加到防火墙,但大多数情况下,它只是失败,不会询问我,因此每当我的IP地址更改时,我都在寻找解决方案,而不是手动登录到Azure门户。

查找示例或指向说明要使用哪些库的文档的链接。

更新:我尝试了Tom Suns Answer,但是我们使用的是Web应用,而不是SQL服务器,因此它无法工作。

azure.WebApps.GetByResourceGroup(";resourcegroup";,&q;Webapp&q;)

返回Web应用,但我找不到以编程方式访问在此Web应用的"网络"下找到的&q;访问限制&q;。

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

我已尝试通过以下名称访问第二个部署槽,所有名称均返回NULL。这里假设Web应用程序名为‘webapp’,部署槽名为‘SLO1’

webapp-slot1 WebApp_插槽1 WebApp/插槽1

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

最后,Tom Sun的答案要求硬编码凭据存储在驱动器上。这远远不是最优的。我更喜欢弹出式用户界面,提示用户输入他们的用户名和密码,这是用旧版本的API,但我能找到的一切都说它不再是可能的。我可能不得不求助于Powershell。

推荐答案

我们可以通过Microsoft.Azure.Management.FluentMicrosoft.Azure.Management.ResourceManager.Fluent来实现,更多关于库的详细信息,请参考Packages.config。我们还可以从github中获得更多demo code。在编码之前,我们需要注册Azure AD应用程序并为其分配相应的角色,更多详细信息请参阅document。然后,我们可以从Azure AD App获取clientId、密钥(密钥)和租户。之后,我们可以使用以下格式创建Auth file

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:	omauth.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();

Packages.config

<?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>

这篇关于如何通过Powershell或C#远程更新具有本地IP的Azure WebApp防火墙的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆