了解Azure云服务防火墙

时间:2016-04-26 02:46:10

标签: azure azure-web-roles azure-worker-roles azure-cloud-services

我试图了解默认情况下Azure云服务(Web /工作者角色)的防火墙规则是什么,我很困惑。

基于多个来源(包括此链接http://download.microsoft.com/download/C/A/3/CA3FC5C0-ECE0-4F87-BF4B-D74064A00846/AzureNetworkSecurity_v3_Feb2015.pdf),云服务默认阻止入站连接,无论是工作角色还是Web角色。要打开入站连接,我需要在.cscfg中为EndPoints元素指定参数。

但是,我从未这样做过,但我的网络角色和工作人员角色接受inboud连接,甚至是UDP连接到工作人员角色。

我错过了什么?

更新:我道歉,我正在查看错误的文件。由于原因我无法解释我混合.csdef和.cscfg。现在它看起来像愚蠢的问题:)

2 个答案:

答案 0 :(得分:2)

您是对的 - Web和辅助角色需要定义端点,以允许外部流量传递到您的角色实例。

关于您当前可以访问现有Web /工作者实例的事实:默认情况下,为您的Web角色创建端口80的端点,如果您启用了RDP,则也会启用。

请注意,有端口映射会发生:也就是说,您指定外部端口(可能是...端口8000),然后映射到您的代码正在侦听的实际端口(可能是...端口80 )。

并且还要注意,如果您将其中一个端口用于一个角色,则必须为不同的角色提供不同的端口。给定角色的所有实例可以以负载平衡的方式使用相同的端口。但是......如果您在Web角色外部使用端口8000设置Web服务器,并且您定义了另一个Web角色(或者可能是工作者角色),则不能将端口8000用于该角色。

如果您不想直接编辑配置文件,角色端点将在Visual Studio中的云服务项目中公开。

答案 1 :(得分:1)

大卫的大部分答案都包括在内,详细说明为什么它有效: https://azure.microsoft.com/nl-nl/documentation/articles/cloud-services-role-enable-remote-desktop/

看看csdef文件,那里有一个导入部分

<Imports>
  <Import moduleName="<import-module>"/>
</Imports>

RDP的模块是“RemoteAccess”,并且会有一个“RemoteAccessForwarder”,所有插件/模块都在此目录中的Azure SDK中(用你的azure SDK版本替换v2.9)

C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins

导入此模块会导致在运行时将以下配置添加到csdef文件中:

<?xml version="1.0" ?>
<RoleModule 
  xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"
  namespace="Microsoft.WindowsAzure.Plugins.RemoteAccess">
  <Startup priority="-1">
    <Task commandLine="RemoteAccessAgent.exe" executionContext="elevated" taskType="background" />
    <Task commandLine="RemoteAccessAgent.exe /blockStartup" executionContext="elevated" taskType="simple" />
  </Startup>
  <ConfigurationSettings>
    <Setting name="Enabled" />
    <Setting name="AccountUsername" />
    <Setting name="AccountEncryptedPassword" />
    <Setting name="AccountExpiration" />
  </ConfigurationSettings>
  <Endpoints>
    <InternalEndpoint name="Rdp" protocol="tcp" port="3389" />
  </Endpoints>
  <Certificates>
    <Certificate name="PasswordEncryption" storeLocation="LocalMachine" storeName="My" permissionLevel="elevated" />
  </Certificates>
</RoleModule>

这将为RDP连接打开端口3389,因此Endpoint位于.csdef文件中,但是通过导入。

另外看一下“RemoteForwarder”,它充当网关,因此只需要在外面打开一个端口(3389),只有一个实例会监听它。然后,RemoteForwarder将RDP连接转发到正确的机器。更多信息: https://blogs.msdn.microsoft.com/avkashchauhan/2011/12/06/how-does-remote-desktop-works-in-windows-azure/