了解 Azure 云服务防火墙
Understanding Azure cloud services firewall
我试图了解默认情况下 Azure 云服务(Web/Worker 角色)的防火墙规则是什么,但我很困惑。
基于多个来源,包括此 link http://download.microsoft.com/download/C/A/3/CA3FC5C0-ECE0-4F87-BF4B-D74064A00846/AzureNetworkSecurity_v3_Feb2015.pdf,云服务的入站连接默认被阻止,无论是辅助角色还是网络角色。要打开入站连接,我需要为 .cscfg.
中的 EndPoints
元素指定参数
然而,我从来没有这样做过,但是我的网络角色和辅助角色接受输入连接,甚至是辅助角色的 UDP 连接。
我错过了什么?
更新:抱歉,我看错了文件。由于我无法解释的原因,我混合了 .csdef 和 .cscfg。现在看起来是个愚蠢的问题:)
您是对的 - Web 和辅助角色需要定义端点,以允许外部流量传递到您的角色实例。
关于您当前可以访问现有 web/worker 个实例的事实:默认情况下,会为您的 Web 角色创建端口 80 的端点,如果您启用了 RDP,它也会启用。
请注意会发生端口映射:也就是说,您指定外部端口(可能...端口 8000),然后它会映射到您的代码侦听的实际端口(可能...端口 80).
另请注意,如果您将其中一个端口用于一个角色,则必须为不同的角色提供不同的端口。给定角色的所有实例都可以以负载平衡的方式使用相同的端口。但是...如果您在 Web 角色外部使用端口 8000 设置 Web 服务器,并且您定义了另一个 Web 角色(或者可能是辅助角色),则不能为该角色使用端口 8000。
角色端点在云服务项目中公开,在 Visual Studio 内,以防您不想直接编辑配置文件。
David 涵盖了大部分答案,详细说明了为什么它有效:
https://azure.microsoft.com/nl-nl/documentation/articles/cloud-services-role-enable-remote-desktop/
看看csdef文件,里面有导入部分
<Imports>
<Import moduleName="<import-module>"/>
</Imports>
RDP的模块是"RemoteAccess",会有一个"RemoteAccessForwarder",所有plugins/modules都在这个目录下的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,因此端点位于 .csdef 文件中,但通过导入。
再看看"RemoteForwarder",它作为网关,所以只需要在外面打开1个端口(3389),只有1个实例会监听这个。然后 RemoteForwarder 会将 RDP 连接转发到正确的机器。更多信息:
https://blogs.msdn.microsoft.com/avkashchauhan/2011/12/06/how-does-remote-desktop-works-in-windows-azure/
我试图了解默认情况下 Azure 云服务(Web/Worker 角色)的防火墙规则是什么,但我很困惑。
基于多个来源,包括此 link http://download.microsoft.com/download/C/A/3/CA3FC5C0-ECE0-4F87-BF4B-D74064A00846/AzureNetworkSecurity_v3_Feb2015.pdf,云服务的入站连接默认被阻止,无论是辅助角色还是网络角色。要打开入站连接,我需要为 .cscfg.
中的EndPoints
元素指定参数
然而,我从来没有这样做过,但是我的网络角色和辅助角色接受输入连接,甚至是辅助角色的 UDP 连接。
我错过了什么?
更新:抱歉,我看错了文件。由于我无法解释的原因,我混合了 .csdef 和 .cscfg。现在看起来是个愚蠢的问题:)
您是对的 - Web 和辅助角色需要定义端点,以允许外部流量传递到您的角色实例。
关于您当前可以访问现有 web/worker 个实例的事实:默认情况下,会为您的 Web 角色创建端口 80 的端点,如果您启用了 RDP,它也会启用。
请注意会发生端口映射:也就是说,您指定外部端口(可能...端口 8000),然后它会映射到您的代码侦听的实际端口(可能...端口 80).
另请注意,如果您将其中一个端口用于一个角色,则必须为不同的角色提供不同的端口。给定角色的所有实例都可以以负载平衡的方式使用相同的端口。但是...如果您在 Web 角色外部使用端口 8000 设置 Web 服务器,并且您定义了另一个 Web 角色(或者可能是辅助角色),则不能为该角色使用端口 8000。
角色端点在云服务项目中公开,在 Visual Studio 内,以防您不想直接编辑配置文件。
David 涵盖了大部分答案,详细说明了为什么它有效: https://azure.microsoft.com/nl-nl/documentation/articles/cloud-services-role-enable-remote-desktop/
看看csdef文件,里面有导入部分
<Imports>
<Import moduleName="<import-module>"/>
</Imports>
RDP的模块是"RemoteAccess",会有一个"RemoteAccessForwarder",所有plugins/modules都在这个目录下的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,因此端点位于 .csdef 文件中,但通过导入。
再看看"RemoteForwarder",它作为网关,所以只需要在外面打开1个端口(3389),只有1个实例会监听这个。然后 RemoteForwarder 会将 RDP 连接转发到正确的机器。更多信息: https://blogs.msdn.microsoft.com/avkashchauhan/2011/12/06/how-does-remote-desktop-works-in-windows-azure/