了解 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/