0

我正在使用 Golang 中的 aws-sdk-go 包连接到 Amazon S3 以提供基于云的存储池。我有这个运作良好。我希望能够使用 Snowball 支持批量高速传输,因此我得到了一个 Snowball Edge 来在我的实验室中进行测试。我还没有弄清楚如何让它工作,而且 Snowball Edge 的文档似乎并不完整。此配置可能会受到订购 Snowball Edge 而不仅仅是 Snowball 的影响。

我发现 Edge 更成问题的原因是,普通的 Snowball 需要运行一个名为 snowballAdapter 的应用程序,它看起来处理了一些端口映射问题。但是,此应用程序似乎与 Edge 设备不兼容,因为它报告说它不适用于“Snowball Edge Manifest 文件”。

我查看了真实 AWS S3 和 nmap 报告中可用的端口:

nmap -v -sT -Pn s3.us-east-1.amazonaws.com
...
Scanning s3.us-east-1.amazonaws.com (52.216.161.53) [1000 ports]
Discovered open port 443/tcp on 52.216.161.53
Discovered open port 80/tcp on 52.216.161.53

而在 Snowball Edge 上,端口是:

nmap -v -sT -Pn 192.168.1.4
....
Scanning 192.168.1.4 [1000 ports]
Discovered open port 8080/tcp on 192.168.1.4
Discovered open port 22/tcp on 192.168.1.4
Discovered open port 9091/tcp on 192.168.1.4
Discovered open port 8443/tcp on 192.168.1.4
....
PORT     STATE SERVICE
22/tcp   open  ssh
8080/tcp open  http-proxy
8443/tcp open  https-alt
9091/tcp open  xmltec-xmlmail

所以,在我看来,问题可能是我必须让 aws 包使用端口 8443 用于 Snowball Edge,而不是 443 用于真正的 S3。连接到 S3 的代码非常简单:

creds := credentials.NewStaticCredentials(s3Config.S3AccessKey, s3Config.S3SecretAccessKey, s3Config.S3Token)
_, err := creds.Get()

if err != nil {
    return nil, nil, err
}

if len(baseFolder) > 0 {
    baseFolder = baseFolder + "/"
}

cfg := aws.NewConfig().WithRegion(s3Config.S3Region).WithCredentials(creds)
svc := s3.New(session.New(), cfg)

params := &s3.ListObjectsInput{
    Bucket:    aws.String(s3Config.S3BucketName),
    Prefix:    aws.String(baseFolder),
    Delimiter: aws.String("/"),
}

resp, err := svc.ListObjects(params)

所以,问题是,如何更改代码以指向 Snowball Edge?我尝试从 Amazon S3 终端节点映射到 /etc/hosts 中的 Snowball Edge。我明白为什么在发现端口不同后这不起作用。我尝试添加不同形式的“WithEndpoint("...host...") 但没有成功。或者,我是否走错了路,应该能够让 snowballAdapter 与 Snowball 一起工作边缘?

顺便说一句,所有 snowballEdge 命令都按预期工作,因此设备似乎工作正常,例如:

./snowballEdge list-access-keys

    {
      "AccessKeyIds" : [ "..." ]
    }

./snowballEdge get-secret-access-key --access-key-id ....

    [snowballEdge]
    aws_access_key_id = ...
    aws_secret_access_key = ...

而且,我使用了与设备关联的正确密钥,并且它确实配置了 S3 服务:

./snowballEdge list-services
{
  "ServiceIds" : [ "s3" ]
}
4

1 回答 1

0

Snowball Edge 与 AWS S3 完全不同。除了访问密钥和秘密访问密钥之外,它还需要一个端点和证书形式的附加凭证。真正的 AWS S3 具有证书颁发机构支持的有效证书,但 Snowball Edge 具有自签名证书。

可以使用以下命令创建配置:

cfg := aws.NewConfig().WithRegion(s3Config.S3Region).WithCredentials(creds).WithEndpoint(s3Config.S3Endpoint).WithHTTPClient(httpClient)
svc = s3.New(session.New(), cfg)

端点如下所示(您可以在上面的问题文本中看到 Snowball Edge 在端口 8443 上响应):

https://192.168.1.4:8443

证书需要像您在文件中一样格式化(包括所有换行符。看起来像这样(同样,您传入的字符串必须在每一行之后包含换行符):

-----BEGIN CERTIFICATE-----
MIIC7zCCAdegAwIBAgIJBJZB/gkBP0B5MA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMCzE3Mi4yMC4xLjE3NB4XDTE3MDQyODIwMTMwOFoXDTE5MDQxODIwMTMwOFow
FjEUMBIGA1UEAwwLMTcyLjIwLjEuMTcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCrLWlTfrSj9R1of5Z98EHYIEEPBgnWxnlrvA+ryAzPmiXbYomI4Tpl
PsuIA+7hGXG10H0zwlz0n22EUv4pE79toYcd3czOJUAHEuSelhtP7u91vM4GguFx
A00gosu04RFUD+BYNeaLTQfd7vdmQB3bY3KEbn7Dfrs/1MYFhKb8J77mgCuUbAPu
PNvwLoV+hBL+ndgs+bIu4MtXjUJDiigRZkacpMQaduDMqEq6seoc+JwrKNBjRBRu
3l/fcQoWf+g902oZJaXXnVGqqb7o2YAQFehUAbmCJfuKFSl5tu0B+3KvQQni7lK+
SV8WItdrPumS98BBlt6NpzgC5fTwCmapAgMBAAGjQDA+MAwGA1UdEwQFMAMBAf8w
HQYDVR0OBBYEFMAvKzKgKI+izqPX6DJjJz/0fELtMA8GA1UdEQQIMAaHBKwUAREw
DQYJKoZIhvcNAQELBQADggEBAGwyzmI+9psQu9/N/oClN7Lej7e4E8cC8vymVfPz
fdW45IMNVEYHxHbu9+JzLOtLxfuDmD6B6fEYVoPubb6tsnacuwOSMZhTvhhy9nv2
f+2Pslgj/kYTeMePbHOPTyQ4sd1BE7ALdNiL/hd08ZNhqObagixNYw9eYeHEStBy
tOADKcY9gOxek1k9t+96nATgSy0WIytwra0uEgyipKQ2gXKpgg15SI4nDxQLLEgG
lb3FtRk+PfJxQ4zbHZe/cRNflcGwVCefycLQOA2Sdr8pgHW7gvETu9i9ywF0UV6f
b9wsPcDmg3EaxBa+wrLlYSzaPhI+rZYh6bpnTn311QIFZ+s=
-----END CERTIFICATE-----

发现 Snowball Edge 是使用 S3 的非常快的存储。我们能够达到大约 1,100 MB/秒的复制速率。

于 2018-05-08T18:59:49.043 回答