如何使用 Amazon VPC 终端节点跨 AWS 区域或账户激活 DataSync 代理?

上次更新时间:2020 年 8 月 28 日

我想使用 AWS DataSync 在以下位置之间传输数据:

  • 在本地和 AWS 之间
  • 在 AWS 区域之间
  • 在 AWS 账户之间

如何在私有网络中使用 Amazon Virtual Private Cloud (Amazon VPC) 终端节点为此场景设置我的环境和 DataSync 代理?

解决方法

重要提示:以下配置假定:

  • 除了私有终端节点与 AWS 之间的连接外,这些资源不会连接到公共网络。
  • 数据传输的源是具有 NFS 或 SMB 数据源的本地或远程 VPC 环境。数据传输的目的地是可以访问 Amazon Simple Storage Service (Amazon S3)、Amazon Elastic File System (Amazon EFS) 或 Amazon FSx 的 Amazon VPC。完成设置后,您可以根据 DataSync 支持的位置组合反转传输方向。

设置源网络环境(NFS 或 SMB 数据源)

DataSync 代理在靠近 NFS 或 SMB 数据源的源网络上运行。对于此配置,源网络可以是本地或私有 Amazon VPC。

注意:如果您希望使用 VPC 对等连接设置 VPC 之间的传输,请务必查看 VPC 对等连接的限制,以确保该功能支持您的配置。

设置目标网络环境(Amazon S3、Amazon EFS 或 Amazon FSx)

对于此配置,目标网络必须是可访问目标位置(如 Amazon S3、Amazon EFS 或 Amazon FSx)的私有 Amazon VPC。此外,您必须在目标私有 VPC 上设置以下内容:

1.    为 DataSync 创建 VPC 终端节点

2.    确认与 VPC 终端节点关联的子网至少有四个可用于 DataSync 执行终端节点的 IP 地址。

注意:每个 DataSync 任务均使用四个用于任务执行终端节点的 IP 地址。

3.    为 DataSync VPC 终端节点配置安全组。安全组必须允许:

  • TCP 端口 443 到终端节点的入站流量
  • 出站临时流量
  • TCP 端口范围 1024-1062 到目标 VPC 终端节点的入站流量
  • 要打开 AWS Support 频道,请允许 TCP 端口 22 上的入站流量

设置源环境和目标环境之间的网络连接

对于此配置,数据可以从源本地环境传输到目标私有 VPC。或者,可以在位于不同 AWS 区域或属于不同 AWS 账户的私有 VPC 之间进行数据传输。您必须在源环境和目标环境之间设置以下连接和网络要求:

1.    在源环境和目标 VPC 终端节点之间设置活动网络连接。例如,您可以使用 AWS Direct ConnectVPC 对等连接中转 VPC 来设置此连接。

2.    确认源环境和目标环境之间的私有网络地址空间没有重叠。验证 CIDR 数据块。

3.    确认源子网和目标子网中的路由表条目允许网络之间的流量传输,且不会出现任何问题。例如,如果您使用的是 VPC 对等连接,请更新对等连接的路由表

4.    如果源网络和目标网络之间存在防火墙,则必须允许以下内容:

  • TCP 端口 443 到目标 VPC 终端节点的流量
  • TCP 端口范围 1024-1062 到目标 VPC 终端节点的流量
  • 要打开 AWS Support 频道,请允许 TCP 端口 22 上的流量

5.    确认所有安全组和防火墙都允许临时出站流量或使用连接跟踪工具。

设置用于激活 DataSync 代理的计算机

您可以使用物理计算机、虚拟机或 Amazon Elastic Compute Cloud (Amazon EC2) 实例来激活 DataSync 代理。您必须在计算机上设置以下内容:

1.    在源环境或目标环境中设置与其中一个私有网络的连接。必须配置到两个网络的有效网络路由。

2.    如果没有互联网连接,则必须在 TCP 端口 80 (HTTP) 上设置对 DataSync 代理的网络访问。

3.    安装 cURL 命令以获取激活密钥。

4.    安装 AWS 命令行界面 (AWS CLI) 以激活 DataSync 代理。

5.    使用 AWS Identity and Access Management (IAM) 凭证配置 AWS CLI。您可以利用这些凭证激活 DataSync 代理,具体与以下示例类似:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"datasync:*"
],
"Resource": "arn:aws:datasync:<AWS region>:<AWS Account ID>:*"
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": [
"ec2:*VpcEndpoint*",
"ec2:*subnet*",
"ec2:*security-group*"
],
"Resource": "*"
}
]
}

注意:如果您使用 Amazon EC2 实例激活代理,则可以将具有正确权限的 IAM 角色附加到实例配置文件

激活 DataSync 代理

1.    在虚拟机(本地)EC2 实例(私有 VPC)上部署 DataSync 代理。

2.    从您在上述步骤中设置的计算机中,通过运行以下 cURL 命令获取 DataSync 代理的激活密钥

curl -vvv -G \
  --data-urlencode "activationRegion=<AWS region>" \
  --data-urlencode "gatewayType=SYNC" \
  --data-urlencode "endpointType=PRIVATE_LINK" \
  --data-urlencode "privateLinkEndpoint=<VPC Endpins IP address>" \
  --data-urlencode "redirect_to=https://<AWS region>.console.aws.amazon.com/datasync/home?region=<AWS region>#/agents/create" \
  "http://<DataSync Agent IP>"

注意:您可以选择性地包含 --data-urlencode "no_redirect",以简化和缩短命令和输出。

3.    记下命令输出中的激活密钥。

4.    使用 AWS CLI,运行 describe-vpc-endpoints 命令以获取目标 VPC 终端节点 ID:

aws ec2 describe-vpc-endpoints --region <AWS region>

5.    请注意命令输出中的 "VpcEndpointId",具体与以下示例类似:

"VpcEndpointId": "vpce-0ba3xxxxx3752b63"

6.    使用 AWS CLI,运行 describe-security-groups 命令以获取目标 VPC 的安全组 ID。这是 DataSync 执行终端节点用于连接到 DataSync VPC 终端节点的安全组。

注意:我们建议您使用与 VPC 终端节点相同的安全组,以降低配置的复杂性。

aws ec2 describe-security-groups --region <AWS region>

7.    请注意命令输出中的 "GroupID",具体与以下示例类似:

"GroupId": "sg-000e8edxxxx4e4701"

8.    使用 AWS CLI,运行 describe-subnets 命令以获取与 VPC 终端节点关联的子网 ID:

注意:最佳实践是您使用与 VPC 终端节点相同的子网,以降低配置的复杂性。

aws ec2 describe-subnets --region <AWS region>

9.    请注意命令输出中的 "SubnetArn",具体与以下示例类似:

"SubnetArn": "arn:aws:ec2:<AWS region>:<AWS Account ID>:subnet/subnet-03dc4xxxx6905bb76"

10.    使用 AWS CLI,运行 create-agent 命令以激活 DataSync 代理:

  • 对于 --activation-key,输入您在第 3 步中获得的激活密钥。
  • 对于 --vpc-endpoint-id,输入您在第 5 步中获得的 "VpcEndpointId"
  • 对于 --security-group-arns,输入您在第 7 步中获得的 GroupID
  • 对于 --subnet-arns,输入您在第 9 步中获得的 SubnetArn
aws datasync create-agent --agent-name <Agent Name> --vpc-endpoint-id vpce-0cxxxxxxxxxxxxf57 --activation-key UxxxQ-0xxxB-LxxxL-AUxxV-JxxxN --subnet-arns arn:aws:ec2:<AWS region>:<AWS Account ID>:subnet/subnet-0cxxxxxxxxxxxx3 --security-group-arns arn:aws:ec2:<AWS region>:<AWS Account ID>:security-group/sg-xxxxxxxxxxxxxx --region <AWS region>

11.    此命令将返回 DataSync 代理的 Amazon 资源名称 (ARN):

{
    "AgentArn": "arn:aws:datasync:<AWS region>:<AWS Account ID>:agent/agent-0bxxxxxxxxxxxxxx57c"
}

12.    运行 list-agents 命令以确认已成功创建代理:

aws datasync list-agents --region <AWS region>

13.    确认输出中返回了 DataSync 代理的 ARN:

{
    "Agents": [
        {
            "AgentArn": "arn:aws:datasync:<AWS region>:<AWS Account ID>:agent/agent-0bxxxxxxxxxxxxxx57c",
            "Status": "ONLINE",
            "Name": "<Agent Name>"
        }
    ]
}

激活 DataSync 代理后,您可以使用 DataSync 控制台为传输创建位置任务

DataSync 代理激活期间的错误疑难解答

1.    “cURL 命令返回"errorType=PRIVATE_LINK_ENDPOINT_UNREACHABLE' 且不返回激活密钥”

当 TCP 端口 443 上的流量不允许进入 VPC 终端节点时,通常会发生此错误。

2.    “调用 CreateAgent 操作时发生错误 (InvalidRequestException):私有链接配置无效:VPC 终端节点 ID 应保持未指定公有终端节点激活密钥”

create-agent 命令中为 --activation-key 参数输入公有激活密钥时,通常会发生此错误。您必须在此配置中为私有终端节点类型输入私有激活密钥。

3.    “调用 CreateAgent 操作时发生错误 (InvalidRequestException):EC2 子网无效,ARN: arn:aws:ec2:<AWS region>:<AWS Account ID>:subnet/subnet-41xxxx08,原因:子网无效,StatusCode:403”

-或者-

“调用 CreateAgent 操作时发生错误 (InvalidRequestException):EC2 安全组无效,ARN: arn:aws:ec2:<AWS region>:<AWS Account ID>:security-group/sg-000e8xxxx9d4e4701,原因:安全组无效,StatusCode:403”

-或者-

“调用CreateAgent 操作时发生错误 (InvalidRequestException):私有链接配置无效:VPC 终端节点 vpce-0ba34edxxxx752b63 无效”

在您的 AWS CLI 上配置的 IAM 身份没有足够的权限时,通常会发生这些错误。您必须确认您的 IAM 身份策略授予了 ec2:*VpcEndpoint*ec2:*subnet*ec2:*security-group* 的权限。


这篇文章对您有帮助吗?


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