设置网关服务器

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

适用对象和假设

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

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

免责声明

本文档作为手册提供给我们的客户,以帮助他们设置网关服务器。尽管我们可以提供一些帮助,但网关服务器由客户负责安排,而不是由 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 技能。以 Jensd 为例说明了如何设置父/子关系,请参见本文末尾的附录 1。

如果您还没有 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 添加到每个客户端系统,以便信任新证书。此外,还要注意,通信加密/重新加密可能为您的工作室带来安全风险,因此请格外谨慎。

关注