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

标签 c# powershell azure azure-sql-database firewall

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

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

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

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

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

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

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

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

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

webapp-slot1 webapp_slot1 网络应用程序/slot1

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

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

最佳答案

我们可以用 Microsoft.Azure.Management.Fluent 来做到这一点和 Microsoft.Azure.Management.ResourceManager.Fluent ,有关库的更多详细信息,请参阅packages.config。我们还可以获得更多demo code来自github 。在编码之前我们需要注册一个Azure AD应用程序并为其分配相应的角色,更多详细信息请参阅document 。然后我们可以从Azure AD应用程序中获取clientId、 key ( key )和租户。之后我们可以创建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:\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();

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>

关于c# - 如何通过 powershell 或 C# 使用本地 IP 远程更新 azure webapp 防火墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46616782/

相关文章:

c# - 将 EF 代理对象转换为原始 POCO 对象的最佳方法是什么?

c# - 如何使用 JSON.NET 保存具有四个空格缩进的 JSON 文件?

arrays - 如何使这个 PowerShell 函数返回纯字符串,而不返回字符串数组?

c# - ExecuteNonQuery C# 和 SQL Server

powershell - JWT token 的安全 token 验证错误 -- HDInsight

powershell - 在Powershell脚本中添加换行符(换行符)

t-sql - 重命名 SQL Azure 数据库?

node.js - 如何开始从nodejs客户端到microsoft bot的对话

azure - Azure 服务总线如何识别重复消息?

c# - 在 ASP.NET Core 的 Controller 中注入(inject)接口(interface)的特定实现