如何解决激活 Storage Gateway 时的内部错误?

上次更新日期:2020 年 10 月 5 日

我尝试在 AWS Storage Gateway 上激活我的网关,但收到内部错误。我应该如何排查此问题?

简短描述

对 Storage Gateway 的请求会遍历两条网络路径。首先,客户端发送的激活请求通过端口 80 连接到网关的虚拟机 (VM) 或 Amazon Elastic Compute Cloud (Amazon EC2) 实例。其次,如果网关成功收到激活请求,则网关将与 Storage Gateway 终端节点通信以接收激活密钥。如果网关无法访问这些 Storage Gateway 终端节点,则服务会向客户端发出内部错误消息作为响应。

解决方法

如果使用公共终端节点激活网关

1.    验证您是否已打开了所需的端口。对于本地部署的网关,请检查本地防火墙上是否已打开这些端口。对于在 Amazon EC2 实例上部署的网关,请检查实例的安全组上是否已打开这些端口。要确认端口是否已打开,请从与网关位于同一子网中的服务器在公共终端节点上运行 telnet 命令。例如,以下 telnet 命令测试与端口 443 的连接:

telnet d4kdq0yaxexbo.cloudfront.net 443
telnet storagegateway.region.amazonaws.com 443
telnet dp-1.storagegateway.region.amazonaws.com 443
telnet proxy-app.storagegateway.region.amazonaws.com 443
telnet client-cp.storagegateway.region.amazonaws.com 443
telnet anon-cp.storagegateway.region.amazonaws.com 443

要确认网关本身可以访问终端节点,请访问网关的本地 VM 控制台(针对本地部署的网关)或网关实例的 SSH(针对在 Amazon EC2 上部署的网关)。然后,运行网络连接测试。确认测试返回 [PASSED]

注意:网关控制台的默认登录用户名为 admin,默认密码为 password

2.    确认没有 SSL 检查、深度数据包检查或可能修改从网关发送到公共终端节点的数据包的任何其他形式的防火墙安全措施。如果 SSL 证书根据激活终端节点的要求进行修改,则 SSL 握手将失败。要确认没有正在进行的 SSL 检查,请从与网关位于同一子网的计算机上,通过端口 443 在主激活终端节点 (anon-cp.storagegateway.region.amazonaws.com) 上运行 OpenSSL 命令:

注意:使用您的激活区域替换 region

$ openssl s_client -connect  anon-cp.storagegateway.region.amazonaws.com:443 -servername anon-cp.storagegateway.region.amazonaws.com

如果没有正在进行的 SSL 检查,则该命令将返回与以下示例类似的响应:

$ openssl s_client -connect anon-cp.storagegateway.us-east-2.amazonaws.com:443 -servername anon-cp.storagegateway.us-east-2.amazonaws.com
CONNECTED(00000003)
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = anon-cp.storagegateway.us-east-2.amazonaws.com
verify return:1
---
Certificate chain
 0 s:/CN=anon-cp.storagegateway.us-east-2.amazonaws.com
   i:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
 1 s:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
   i:/C=US/O=Amazon/CN=Amazon Root CA 1
 2 s:/C=US/O=Amazon/CN=Amazon Root CA 1
   i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
 3 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
   i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
---

如果存在正在进行的 SSL 检查,则响应会显示已更改的证书链,与以下示例类似:

$ openssl s_client -connect  anon-cp.storagegateway.ap-southeast-1.amazonaws.com:443 -servername anon-cp.storagegateway.ap-southeast-1.amazonaws.com
CONNECTED(00000003)
depth=0 DC = com, DC = amazonaws, OU = AWS, CN = anon-cp.storagegateway.ap-southeast-1.amazonaws.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 DC = com, DC = amazonaws, OU = AWS, CN = anon-cp.storagegateway.ap-southeast-1.amazonaws.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/DC=com/DC=amazonaws/OU=AWS/CN=anon-cp.storagegateway.ap-southeast-1.amazonaws.com
   i:/C=IN/O=Company/CN=Admin/ST=KA/L=New town/OU=SGW/emailAddress=admin@company.com
---

激活终端节点仅在识别到 SSL 证书时才接受 SSL 握手。这意味着网关到终端节点的出站流量必须不受任何 SSL 检查或网络中任何防火墙执行的深度数据包检查的影响。

3.    确认您的网关已正确同步时间。过长的时间偏移可能会导致 SSL 握手错误。使用网关的本地 VM 控制台检查网关的时间同步。时间偏移应不超过 60 秒。

注意:对于在 EC2 实例上托管的网关,系统时间管理选项不可用。确认实例可以通过 UDP 和 TCP 123 端口连接到 NTP 服务器池列表

0.amazon.pool.ntp.org
1.amazon.pool.ntp.org
2.amazon.pool.ntp.org
3.amazon.pool.ntp.org

如果使用 Amazon Virtual Private Cloud (Amazon VPC) 终端节点激活您的网关

1.    验证是否已在本地防火墙(针对本地部署的网关)或安全组(针对在 Amazon EC2 中部署的网关)中打开了所需的端口。将网关连接到 Storage Gateway VPC 终端节点所需的端口与将网关连接到公共终端节点时所需的端口不同。连接到 Storage Gateway VPC 终端节点需要以下端口:

  • TCP 443
  • TCP 1026
  • TCP 1027
  • TCP 1028
  • TCP 1031
  • TCP 2222

此外,检查附加到 Storage Gateway VPC 终端节点的安全组。连接到终端节点的默认安全组可能不允许使用所需的端口。创建一个新的安全组,允许来自您的网关 IP 地址范围的流量通过所需端口。然后,将该安全组连接到 VPC 终端节点。

注意:使用 Amazon VPC 控制台验证连接到 VPC 终端节点的安全组。从控制台查看您的 Storage Gateway VPC 终端节点,然后选择 Security Groups(安全组)选项卡。

要确认所需端口是否已打开,请从与网关位于同一子网的服务器在 Storage Gateway VPC 终端节点上运行 telnet 命令。您可以对未指定可用区的第一个 DNS 名称运行测试。例如,以下 telnet 命令使用 DNS 名称 vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 测试所需端口的连接:

telnet vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 443
telnet vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 1026
telnet vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 1027
telnet vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 1028
telnet vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 1031
telnet vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com 2222

2.    确认没有 SSL 检查、深度数据包检查或可能修改从网关发送到您的 Storage Gateway VPC 终端节点的数据包的任何其他形式的防火墙安全措施。如果 SSL 证书根据激活终端节点的要求进行修改,则 SSL 握手将失败。要确认没有正在进行的 SSL 检查,请从与网关位于同一子网的计算机上,在您的 Storage Gateway VPC 终端节点上运行 OpenSSL 命令。对每个所需端口运行命令:

$ openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:443 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com

$ openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:1026 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com

$ openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:1027 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com

$ openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:1028 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com

$ openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:1031 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com

$ openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:2222 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com

如果没有正在进行的 SSL 检查,则该命令将返回与以下示例类似的响应:

openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:1027 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com
CONNECTED(00000005)
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = anon-cp.storagegateway.us-east-1.amazonaws.com
verify return:1
---
Certificate chain
 0 s:CN = anon-cp.storagegateway.us-east-1.amazonaws.com
   i:C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
 1 s:C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
   i:C = US, O = Amazon, CN = Amazon Root CA 1
 2 s:C = US, O = Amazon, CN = Amazon Root CA 1
   i:C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
 3 s:C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
   i:C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority
---

如果存在正在进行的 SSL 检查,则响应会显示已更改的证书链,与以下示例类似:

openssl s_client -connect vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com:1027 -servername vpce-1234567e1c24a1fe9-62qntt8k.storagegateway.us-east-1.vpce.amazonaws.com
CONNECTED(00000005)
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 DC = com, DC = amazonaws, OU = AWS, CN = anon-cp.storagegateway.us-east-1.amazonaws.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/DC=com/DC=amazonaws/OU=AWS/CN=anon-cp.storagegateway.us-east-1.amazonaws.com
   i:/C=IN/O=Company/CN=Admin/ST=KA/L=New town/OU=SGW/emailAddress=admin@company.com
---

激活终端节点仅在识别到 SSL 证书时才接受 SSL 握手。这意味着从网关到您的 VPC 终端节点、经过所有所需端口的出站流量必须不受任何 SSL 检查或网络中任何防火墙执行的深度数据包检查的影响。

3.    确认您的网关已正确同步时间。过长的时间偏移可能会导致 SSL 握手错误。使用网关的本地 VM 控制台检查网关的时间同步。时间偏移应不超过 60 秒。

注意:对于在 EC2 实例上托管的网关,系统时间管理选项不可用。确认实例可以通过 UDP 和 TCP 123 端口连接到 NTP 服务器池列表
0.amazon.pool.ntp.org
1.amazon.pool.ntp.org
2.amazon.pool.ntp.org
3.amazon.pool.ntp.org

4.    激活之前,如果您将 Amazon EC2 上的 HTTP 代理在本地网关 VM 上配置使用端口 3128 的 Squid 代理,请确认以下事项:

  • 附加到 Amazon EC2 上的 HTTP 代理的安全组必须具有一个入站规则,允许在端口 3128 上传输来自网关 VM 的 IP 地址的 Squid 代理流量。
  • 连接到 Storage Gateway VPC 终端节点的安全组必须具有一些入站规则,允许在端口 1026-1028、1031、2222 和 443 上传输来自 Amazon EC2 上的 HTTP 代理的 IP 地址的流量。

如果在同一 VPC 中存在 Storage Gateway VPC 终端节点时使用公共终端节点激活您的网关

确认您的 Storage Gateway VPC 终端节点上未启用 Enable Private DNS Name(启用私有 DNS 名称)设置。如果已启用此设置,则无法激活从该 VPC 到公共终端节点的任何网关。请按照以下步骤禁用私有 DNS 名称选项:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择 Endpoints(终端节点)
  3. 选择您的 Storage Gateway VPC 终端节点。
  4. 选择 Actions(操作)
  5. 选择 Manage Private DNS Names(管理私有 DNS 名称)
  6. 对于 Enable Private DNS Name(启用私有 DNS 名称),取消选择 Enable for this Endpoint(为此终端节点启用)
  7. 选择 Modify Private DNS Names(修改私有 DNS 名称)来保存设置。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?