设置网关服务器

本文介绍了如何允许对托管 Shotgun 站点的访问,同时满足您工作室实施的 Internet 限制策略。

适用对象和假设

本文档适用于系统和 Shotgun 管理员。

假定读者基本了解代理、网络和 HTTP 协议。

Disclaimer

本文档作为手册提供给我们的客户,以帮助他们设置网关服务器。尽管我们可以提供一些帮助,但网关服务器由客户负责安排,而不是由 Shotgun 实施。

此外,我们在本文档中提供了外部资源的链接,请在参考时做出自己的最佳判断。

使用网关服务器在线访问 Shotgun

网关服务器允许用户有权访问其托管 Shotgun 站点,而无权访问 Internet 的其余部分。它将过滤的请求转发至 Shotgun 端点,但阻止所有其他请求。这意味着,当用户请求 *.shotgunstudio.com 时,请求将会通过。但是,如果用户请求未授权的站点,请求将不会通过。

SGCS_-_Shotgun_Ecosystem___Gateway.png

为什么使用网关服务器?

  • 您希望将自己的网络与 Internet 隔离,但仍允许用户访问您的 Shotgun 托管实例;
  • 您希望使用已弃用的连接/加密协议连接到 Shotgun(执行此操作的风险自负)。

我们建议您使用网关服务器,而不是为 Shotgun 设置代理服务器。使用网关服务器:

  • 您不必将可能会随时间变化的复杂 IP 范围添加到白名单中;
  • 您仍然可以受益于每个 Shotgun 托管站点中包含的所有 Web 加速功能;
  • 与 S3 代理解决方案相比,使用 Amazon S3 时的性能更高;
  • 与 S3 代理解决方案相比,使用全部播放和全部上传时的性能更高。

快速入门

实施网关服务器有三个主要步骤。

  1. 实施水平分割域名系统 (DNS)。
  2. 使用 HAProxy 设置网关服务器。
  3. 配置用户环境以使用您的网关。

步骤 0:准备

为了正确配置网关服务器,您将需要以下信息:

步骤 1:水平分割 DNS

水平分割 DNS 允许根据查询来源为查询提供不同的响应(在这种情况下,为 URL 解析)。对于您工作室中的人员,您的水平分割 DNS 将您的 Shotgun URL 解析为内部 IP 地址(网关服务器),而不是解析为 Shotgun 公用 IP。

网关服务器将所有请求转发到 Shotgun IP。网关服务器具有不受限制的访问权限,可以将请求向外传送到 Internet,但所有美工人员看到的只是内部服务器,因此将访问范围仅限制于 Shotgun Internet 资源。

按照此类配置设置 DNS 需要一些基本的 IT 技能。此处是如何进行相关设置的一些示例:

如果您还没有 DNS 服务器,可能希望订购或专门指定一台服务器来执行此任务。此文章中的示例针对的是 Linux 系统。

步骤 2:将 HAProxy 配置为 Shotgun 网关

为了实施网关服务器,我们建议您使用 HAProxyHAProxy 是一个可靠、简单和高性能的 TCP/HTTP 负载平衡器,使用它可以轻松地实施网关服务器。我们建议至少使用版本 1.6。有关 HAProxy 的硬件要求,请参见此处

在附录 2 中提供了 HAProxy 配置文件示例。

步骤 3:配置用户的环境

如果您要使用自签名证书,则以下步骤适用。

如果您的网络配置允许您使用受信任证书(您需要与受信任提供商联系),我们强烈建议您这样做。

注意:使用不受信任的自签名证书存在安全风险(请参见 wikipedia.org/wiki/Self-signed_certificate#Security_issues),应仅在没有备选方案时使用。

对于所有用户

更新您的路由器或您的用户的计算机来公布此新 DNS 服务器。

对于浏览器用户

将证书颁发机构添加到您的密钥链,否则 Chrome 会警告证书不安全

对于 Python API 用户

将证书颁发机构添加到您的密钥链或设置 SHOTGUN_API_CACERTS

对于 REST API 用户

将证书颁发机构添加到您的密钥链,或者将其传递到请求或您使用的库

Toolkit 用户 将证书颁发机构添加到您的密钥链或设置 SHOTGUN_API_CACERTS
检查事项 toolkit.ini 可能具有一个 shotgun_api_cacerts 设置,因此不需要环境变量。

其他检查事项:

  • toolkit.ini 可能具有一个 shotgun_api_cacerts 设置,因此不需要环境变量。

后续步骤

您的 Shotgun 站点实施的 IP 访问限制

如果您设置网关服务器,则可能希望您的 Shotgun 站点仅接受来自您工作室 IP 的请求。有关更多详细信息,请参见 Shotgun 帮助中心中的“IP 白名单”

常见问题解答

网关服务器是否会使美工人员的设置变得复杂?

不会,网关服务器不会更改美工人员的 Internet 访问权限。如果美工人员当前已被允许以受限方式浏览特定站点,他们仍可以这样。从美工人员的角度来看,察觉不到变化。

所有 URL 将像以前一样继续有效。这同样适用于电子邮件和 Shotgun 生成的电子邮件中的 URL。

网关服务器是否会影响站点的速度?

不会,速度将会与直接访问一样。由于网关进行的连接缓存,速度甚至可能会更快。

是否可以监控转发内容?

可以,您可以记录通过转发代理路由的所有通信。可以从外部角度监控活动、跟踪哪些 IP 正在使用 Shotgun、发出了多少请求等。但是,由于通过 HTTPS 传输的通信会加密,因此请求的内容将会加密。

使用网关服务器时,其他工具是否可以运行?

可以,所有其他工具将继续运行。其中包括 Toolkit、Shotgun API、RV 等。

为什么 tank.shotgunstudio.com 也需要转发?

Tank.shotgunstudio.com 是 Toolkit 应用商店。Toolkit 没有它也可以运行,但还必须转发对该站点的调用,才能成功完成 Toolkit 更新。

附录 1 - 水平分割 DNS (Ubuntu)

以下步骤已在 Debian 上完成。对于不同的平台,步骤和配置文件的位置可能会有所不同。

sudo apt-get install bind9

打开 /etc/bind/named.conf 并配置 named。下面是 bind9 的一个最小 DNS 配置文件。

options { 
    directory "/var/cache/bind"; 
    # tells the dns that zones it doesn't understand should be handled by another DNS 
    forwarders { 
        8.8.8.8; # Google's DNS. 
         //you can add here other DNS servers 
    }; 
    dnssec-validation auto; 
    dnssec-enable yes; 
    auth-nxdomain no;    # conform to RFC1035 
    listen-on-v6 { any; }; 
}; 
logging { 
    channel bind.query.log { 
        file "/var/log/dns.query.log" versions 600 size 30m; 
        print-time yes; 
        print-category yes; 
        print-severity yes; 
        severity debug 3; 
    }; 
    // IF YOU DO NOT HAVE SYSLOG, REMOVE THIS. 
    channel default_syslog { 
        print-time yes; 
        print-category yes; 
        print-severity yes; 
        syslog daemon; 
        severity info; 
    }; 
    channel default_log { 
        file "/var/named/log/default" versions 3 size 20m; 
        print-time yes; 
        print-category yes; 
        print-severity yes; 
        severity info; 
    }; 
    channel client_security_log { 
        file "/var/named/log/client_security" versions 3 size 20m; 
        print-time yes; 
        print-category yes; 
        print-severity yes; 
        severity info; 
    }; 
    // IF YOU DO NOT HAVE SYSLOG, PLEASE REMOVE `default_syslog;` FROM LINES BELLOW 
    category default  { default_syslog; default_log; }; 
    category config   { default_syslog; default_log; }; 
    category dispatch { default_syslog; default_log; }; 
    category network  { default_syslog; default_log; }; 
    category general  { default_syslog; default_log; }; 
    category client   { default_syslog; client_security_log; };        
    category security { default_syslog; client_security_log; }; 
    category queries { bind.query.log; }; 
}; 
# Defines a zone we want to answer DNS query for 
zone "shotgunstudio.com" { 
    type master; 
    file "/etc/bind/db.shotgunstudio.com"; 
}; 

打开 /etc/bind/db.shotgunstudio.com 并为 shotgunstudio.com 粘贴此 bind9 区域的最小配置文件(将 mysite 替换为您的工作室 URL):

$TTL    1
# This is the SOA header. I lifted this from somewhere and put very small TTL
@       IN      SOA     ns.shotgunstudio.com. root.shotgunstudio.com. (
                  4     ; Serial
                  5     ; Refresh
                  5     ; Retry
                  5     ; Expire
                  5 )   ; Negative Cache TTL

@       IN              NS              ns.shotgunstudio.com.
ns.shotgunstudio.com.      IN      A       192.168.1.174 ;A Server IP...
# This is where we are mapping our internal site to our HAProxy server address
mysite.shotgunstudio.com.  IN      A       192.168.1.174 ;Another Server IP

 

附录 2 - 将 HAProxy 配置为网关

安装 haproxy。Docker 用户可以使用最新版本的 haproxy:alpine 容器:https://hub.docker.com/_/haproxy/

apt-get install haproxy

打开 /etc/haproxy/haproxy.cfg 并配置 haproxy。下面是 haproxy 1.6 的一个配置示例。将 <> 之间的部分替换为您自己的信息,包括 <> 符号。

global
 maxconn 4096
 pidfile /tmp/haproxy-queue.pid
  
defaults
 log global
 timeout connect 300000
 timeout client 300000
 timeout server 300000

# handle external ip changes
resolvers external_dns
nameserver dns1 <external_dns_ip>:53
resolve_retries 3
timeout retry 1s
hold valid 10s # in case someone enters SG address without https listen http_redirect
bind <internal_ip_address_1>:80 mode http redirect scheme https code 301 if !{ ssl_fc } listen shotgun_proxy
bind <internal_ip_address_1>:443 mode tcp server app1 <your_site_name>.shotgunstudio.com:443 listen shotgun_s3_proxy
bind <internal_ip_address_2>:443 mode tcp server app1 sg-media-usor-01.s3-accelerate.amazonaws.com:443

listen shotgun_tank_proxy
bind <internal_ip_address_3>:443
 mode tcp
 server app1 tank.shotgunstudio.com:443

启动服务

sudo service haproxy start

如果您因任何原因需要重新加密通信,可以将代理模式从 tcp 切换至 http 并使用自签名证书以便解密旧 TLS 通信并对其进行重新加密。请注意,需要将用于生成自签名证书的 CA 添加到每个客户端系统,以便信任新证书。此外,还要注意,通信加密/重新加密可能为您的工作室带来安全风险,因此请格外谨慎。

关注

0 评论

登录写评论。