问题描述
如何使用本地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.Fluent和Microsoft.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防火墙的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!