Azure客户端IP地址

时间:2013-02-11 16:24:21

标签: powershell azure

我无法找到有关如何预测Azure视为您的IP地址的任何文档。

这是我所指的IP,红色:

Windows Azure Server SQL database server configuration panel

我正在尝试以编程方式实现CURRENT CLIENT IP ADDRESS xxx.xxx.xxx.xxx ADD TO ALLOWED IP ADDRESSES。

2 个答案:

答案 0 :(得分:1)

您的IP地址取决于您所在网络的NAT,除非您来自具有固定公共IP地址的计算机。除非客户端计算机从同一网络连接,并且您详细了解网络,否则您不太可能可靠地预测客户端IP地址。唯一的解决方案是添加一个从86.0.0.0到86.255.255.255的范围,并希望它覆盖你所连接的网络 - 但是很多'不受欢迎的人'也会在这个范围内出现。

客户端IP地址功能不应用于直接管理员访问以外的任何其他功能,可以根据需要手动设置。它也可以通过使用本地防火墙规则锁定,通过限制端口1433对特定本地网络计算机的访问。任何更一般的访问都应限于各种服务 - 例如OData样式,mobile services或使用某种port bridge,这可以通过VPN,VM和其他IaaS服务来实现。

我建议您首先考虑您的用例 - 直接SQL访问不是云计算的可行模式。存在许多更快,更安全且更易于管理的替代方案。此外,至少你正在进入一个痛苦的世界,试图让安全人员在他们的防火墙中为SQL端口挖洞。

答案 1 :(得分:1)

这对我有用:有一个“AutoDetectClientIP”管理API调用,它将现有的防火墙例外更新为调用方的IP地址。

但您需要访问对给定订阅,订阅ID,SQL Azure服务器名称和防火墙例外名称有效的管理证书。

public static bool SetFirewallRuleAutoDetect(string certFilename, string certPassword, string subscriptionId, string serverName, string ruleName)
{
    try
    {
       string url = string.Format("https://management.database.windows.net:8443/{0}/servers/{1}/firewallrules/{2}?op=AutoDetectClientIP",
                                  subscriptionId, 
                                  serverName, 
                                  ruleName);

       HttpWebRequest webRequest = HttpWebRequest.Create(url) as HttpWebRequest;

       webRequest.ClientCertificates.Add(new X509Certificate2(certFilename, certPassword));
       webRequest.Method = "POST";
       webRequest.Headers["x-ms-version"] = "1.0";
       webRequest.ContentLength = 0;

       // call the management api
       // there is no information contained in the response, it only needs to work
       using (WebResponse response = webRequest.GetResponse())
       using (Stream stream = webResponse.GetResponseStream())
       using (StreamReader sr = new StreamReader(stream))
       {
           Console.WriteLine(sr.ReadToEnd());
       }

       // the firewall was successfully updated
       return true;
   }
   catch
   {
       // there was an error and the firewall possibly not updated
       return false;
   }
}