设置先决条件 - AWS Blockchain Templates

Amazon Web Services Blockchain Templates 已于 2019 年 4 月 30 日停产。不会对本服务或本支持文档进行进一步更新。为了在AWS上获得最佳 Managed Blockchain 体验,我们建议您使用 Amazon Managed Blockchain (AMB)。要了解有关 Amazon Managed Blockchain 入门的更多信息,请参阅 Hyperledger Fabric 研讨会关于部署 Ethereum 节点的博客。如果您对 AMB 有疑问或需要进一步支持,请联系AWS Support或您的AWS客户团队。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置先决条件

您在本教程中指定的适用于 Ethereum 的 AWS Blockchain Template 配置要求您执行以下操作:

创建 VPC 和子网

适用于 Ethereum 的 Amazon Web Services Blockchain Templates 将资源启动到使用 Amazon Virtual Private Cloud (Amazon VPC) 定义的虚拟网络中。您在本教程中指定的配置创建应用程序负载均衡器,它需要使用两个位于不同可用区中的公有子网。此外,容器实例需要使用一个私有子网,该子网必须与应用程序负载均衡器位于同一可用区中。首先,您使用 VPC 向导在同一可用区中创建一个公有子网和一个私有子网。然后,您在该 VPC 上的另一个可用区中创建第二个公有子网。

有关更多信息,请参阅《Amazon VPC 用户指南》中的什么是 Amazon VPC?

使用 Amazon VPC 控制台 (https://console.aws.amazon.com/vpc/) 创建弹性 IP 地址、VPC 和子网,如下所述。

创建弹性 IP 地址
  1. 通过 https://console.aws.amazon.com/vpc/ 打开 Amazon VPC 控制台。

  2. 选择 Elastic IPs (弹性 IP)Allocate new address (分配新的地址)Allocate (分配)

  3. 记下您创建的弹性 IP 地址,然后选择 Close (关闭)

  4. 在弹性 IP 地址列表中,找到以前创建的弹性 IP 地址的 Allocation ID (分配 ID)。在创建 VPC 时会用到它。

创建 VPC
  1. 从导航栏中,为 VPC 选择区域。VPC 特定于某一区域,因此请选择您已在其中创建密钥对并启动 Ethereum 堆栈的区域。有关更多信息,请参阅 创建密钥对

  2. 在 VPC 控制面板上,选择 Start VPC Wizard

  3. Step 1: Select a VPC Configuration (步骤1: 选择 VPC 配置) 页面上,选择 VPC with Public and Private Subnets (具有公有子网和私有子网的 VPC),然后选择 Select (选择)

  4. Step 2: VPC with Public and Private Subnets (步骤 2: 具有公有子网和私有子网的 VPC) 页面上,将 IPv4 CIDR block (IPv4 CIDR 块)IPv6 CIDR block (IPv6 CIDR 块) 保留默认值。对于 VPC name (VPC 名称),输入一个易于理解的名称。

  5. 对于 Public subnet's IPv4 CIDR (公有子网的 IPv4 CIDR),保留默认值。对于 Availability Zone (可用区),选择一个区域。对于 Public subnet name (公有子网名称),输入一个易于理解的名称。

    如果使用模板,您可以将此子网指定为应用程序负载均衡器的两个子网中的第一个。

    记下该子网的可用区,因为您为私有子网选择相同的可用区,并为另一个公有子网选择不同的可用区。

  6. 对于 Private subnet's IPv4 CIDR (私有子网的 IPv4 CIDR),保留默认值。对于 Availability Zone (可用区),选择与上一步相同的可用区。对于 Private subnet name (私有子网名称),输入一个易于理解的名称。

  7. 对于 Elastic IP Allocation ID (弹性 IP 分配 ID),选择您以前创建的弹性 IP 地址。

  8. 为其他设置保留默认值。

  9. 选择 Create VPC(创建 VPC)。

    以下示例显示了具有公有子网 EthereumPubSub1 和私有子网 1EthereumNetworkV PC VPC。EthereumPvtSub公有子网使用 us-west-2a 可用区。

在其他可用区中创建第二个公有子网。
  1. 选择 Subnets (子网),然后从列表中选择以前创建的公有子网。选择 Route Table (路由表) 选项卡,并记下 Route table (路由表) ID。您为下面的第二个公有子网指定相同的路由表。

  2. 选择 Create Subnet(创建子网)。

  3. 对于名称标签,输入子网的名称。稍后在该网络中创建堡垒主机时,您将使用该名称。

  4. 对于 VPC,选择您以前创建的 VPC。

  5. 对于 Availability Zone (可用区),选择与第一个公有子网不同的可用区。

  6. 对于 IPv4 CIDR block (IPv4 CIDR 块),输入 10.0.2.0/24

  7. 选择 是,创建。该子网将添加到子网列表中。

  8. 从列表中选择子网后,选择 Subnet Actions (子网操作),然后选择 Modify auto-assign IP settings (修改自动分配 IP 设置)。选择 Auto-assign IPs (自动分配 IP)Save (保存)Close (关闭)。这样,在该子网中创建堡垒主机时,该主机可以获得一个公有 IP 地址。

  9. Route Table (路由表) 选项卡上,选择 Edit (编辑)。对于 Change to (更改为),选择您以前记下的路由表 ID,然后选择 Save (保存)

您现在应该可以看到之前创建的 VPC 的三个子网。记下这些子网名称和 ID,以便您可以使用模板指定它们。

创建安全组

安全组可充当防火墙,控制资源的入站和出站流量。当您使用模板在 Amazon ECS 集群上创建 Ethererum 网络时,需指定两个安全组:

  • 一个安全组适用于 EC2 实例,用于控制进出集群中的 EC2 实例的流量

  • 应用程序负载均衡器的安全组,用于控制应用程序负载均衡器、EC2 实例和堡垒主机之间的流量。您也将该安全组与堡垒主机相关联。

每个安全组中都有允许应用程序负载均衡器和 EC2 实例之间进行通信的规则,以及其他最低要求规则。这就要求安全组相互引用。因此,您可以首先创建安全组,然后用适当的规则进行更新。

创建两个安全组
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Security Groups(安全组),然后选择 Create Security Group(创建安全组)。

  3. 对于 Security group name (安全组名称),输入一个易于识别且相互区分的安全组名称,例如 EthereumEC2-SGEthereumALB-SG。稍后会用到这些名称。对于 Description (描述),输入简短摘要。

  4. 对于 VPC,选择您以前创建的 VPC。

  5. 选择创建

  6. 重复以上步骤创建其他安全组。

在 EC2 实例的安全组中添加入站规则
  1. 选择您之前创建的 EC2 实例的安全组

  2. Inbound (入站) 选项卡上,选择 Edit (编辑)

  3. 对于类型,请选择所有流量。对于 Source (来源),将 Custom (自定义) 保持选中状态,然后从列表中选择您当前编辑的安全组,例如 EthereumEC2-SG。这样安全组中的 EC2 实例就可以相互通信。

  4. 选择添加规则

  5. 对于 Type (类型),请选择 All traffic (所有流量)。对于 Source (来源),将 Custom (自定义) 保持选中状态,然后从列表中选择应用程序负载均衡器的安全组,例如 EthereumALB-SG。这样安全组中的 EC2 实例就可以与应用程序负载均衡器通信。

  6. 选择保存

针对应用程序负载均衡器的安全组添加入站规则并编辑出站规则
  1. 选择您之前创建的应用程序负载均衡器安全组

  2. Inbound (入站) 选项卡上选择 Edit (编辑),然后添加以下入站规则:

    1. 对于类型,请选择所有流量。对于 Source (来源),将 Custom (自定义) 保持选中状态,然后从列表中选择您当前编辑的安全组,例如 EthereumALB-SG。这允许应用程序负载均衡器与自身和堡垒主机进行通信。

    2. 选择添加规则

    3. 对于 Type (类型),请选择 All traffic (所有流量)。对于 Source (来源),将 Custom (自定义) 保持选中状态,然后从列表中选择 EC2 实例的安全组,例如 EthereumEC2-SG。这允许安全组中的 EC2 实例与应用程序负载均衡器和堡垒主机进行通信。

    4. 选择添加规则

    5. 对于 Type,选择 SSH。对于 Source (来源),选择 My IP (我的 IP),这会检测并输入您的计算机的 IP CIDR。

      重要

      该规则允许堡垒主机从您的计算机接受 SSH 流量,从而允许您的计算机使用堡垒主机查看 Web 界面并连接到 Ethereum 网络上的 EC2 实例。要允许其他计算机连接到 Ethereum 网络,请将其添加为该规则的来源。仅允许到受信任的来源的入站流量。

    6. 选择保存

  3. Outbound (出站) 选项卡上选择 Edit (编辑),然后删除自动创建的规则以允许到所有 IP 地址的出站流量。

  4. 选择添加规则

  5. 对于 Type (类型),请选择 All traffic (所有流量)。对于 Destination (目标),将 Custom (自定义) 保持选中状态,然后从列表中选择 EC2 实例的安全组。这允许从应用程序负载均衡器和堡垒主机到 Ethereum 网络中的 EC2 实例的出站连接。

  6. 选择添加规则

  7. 对于 Type (类型),请选择 All traffic (所有流量)。对于 Destination (目标),将 Custom (自定义) 保持选中状态,然后从列表中选择您当前编辑的安全组,例如 EthereumALB-SG。这允许应用程序负载均衡器与自身和堡垒主机进行通信。

  8. 选择保存

创建适用于 Amazon ECS 的 IAM 角色和 EC2 实例配置文件

当您使用此模板时,需要为 Amazon ECS 指定 IMA 角色,并指定 EC2 实例配置文件。附加到这些角色的权限策略允许您集群中的 AWS 资源和实例与其他 AWS 资源进行交互。有关更多信息,请参阅《IAM 用户指南》中的 IAM 角色。您可以使用 IAM 控制台 (https://console.aws.amazon.com/iam/) 为 Amazon ECS 和 EC2 实例配置文件设置 IAM 角色。

创建适用于 Amazon ECS 的 IAM 角色。
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 角色创建角色

  3. Select type of trusted entity(选择受信任实体的类型)下,选择 Amazon Web Services service(亚马逊云科技服务)。

  4. 对于 Choose the service that will use this role (选择将使用此角色的服务),选择 Elastic Container Service

  5. Select your use case (选择您的使用案例) 下,选择 Elastic Container Service (弹性容器服务)Next:Permissions (下一步: 权限)

  6. 对于权限策略,保留默认策略 (AmazonEC2 ContainerServiceRole) 处于选中状态,然后选择 “下一步:查看”。

  7. 在角色名称中,输入一个可以帮助您识别角色的值,例如 ECS RoleForEthereum。对于 Role Description (角色描述),输入简短摘要。请记下角色名称,以备后用。

  8. 选择创建角色

  9. 从列表中选择您刚刚创建的角色。如果您的账户中包含许多角色,则可搜索角色名称。

  10. 复制 Role ARN (角色 ARN) 值并保存,以便再次复制。创建 Ethereum 网络时需要此 ARN。

Ethereum 网络中的 EC2 实例会代入模板中指定的 EC2 实例配置文件,从而与其他 AWS 服务进行交互。您可以为角色创建权限策略,创建角色 (自动创建同名实例配置文件),然后将权限策略附加到角色。

创建 EC2 实例配置文件
  1. 在导航窗格中,选择 PoliciesCreate policy

  2. 选择 JSON,并将默认策略语句替换为以下 JSON 策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DeregisterContainerInstance", "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:StartTelemetrySession", "ecs:Submit*", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem" ], "Resource": "*" } ] }
  3. 选择查看策略

  4. 在 “名称” 中,输入一个可以帮助您识别此权限策略的值,例如 EthereumPolicyForEC2。对于 Description (描述),输入简短摘要。选择创建策略

  5. 依次选择角色创建角色

  6. 选择 EC2,然后选择 Next: Permissions (下一步: 权限)

  7. 搜索字段中,输入您之前创建的权限策略的名称,例如 EthereumPolicyForEC2

  8. 选中您以前创建的策略的复选标记,然后选择 Next: Review(下一步: 检查)

  9. 在角色名称中,输入一个可以帮助您识别角色的值,例如 EC2 RoleForEthereum。对于 Role description (角色描述),输入简短摘要。选择 Create role (创建角色)

  10. 从列表中选择您刚刚创建的角色。如果您的账户具有很多角色,您可以在 Search (搜索) 字段中输入角色名称。

  11. 复制并保存 Instance Profile ARN (实例配置文件 ARN) 值,以便您可以再次复制该值。创建 Ethereum 网络时需要此 ARN。

创建堡垒主机

在本教程中,您创建一个堡垒主机。这是一个 EC2 实例,您可以使用该实例连接到 Ethereum 网络中的 Web 接口和实例。它的唯一用途是从 VPC 外部的受信任客户端转发 SSH 流量,以便它们可以访问 Ethereum 网络资源。

您可以设置堡垒主机,因为模板创建的应用程序负载均衡器是内部的,这意味着它仅路由内部 IP 地址。堡垒主机:

  • 具有应用程序负载均衡器可识别的内部 IP 地址,因为您在以前创建的第二个公有子网中启动它。

  • 具有子网分配的公有 IP 地址,VPC 外部的受信任来源可以访问该地址。

  • 与您以前创建的应用程序负载均衡器的安全组关联,该安全组具有一个入站规则以允许来自受信任的客户端的 SSH 流量(端口 22)。

要能够访问 Ethereum 网络,需要设置受信任的客户端以通过堡垒主机进行连接。有关更多信息,请参阅 连接 EthStats 并 EthExplorer 使用堡垒主机。堡垒主机只是一种方法。您可以使用从受信任的客户端访问 VPC 中的私有资源的任何方法。

创建堡垒主机
  1. 完成适用于 Linux 实例的 Amazon EC2 用户指南启动实例部分描述的步骤。

  2. 选择 Edit Instance Details。对于 Network (网络),选择您以前创建的 VPC;对于 Subnet (子网),选择您以前创建的第二个公有子网。将所有其他设置保留默认值。

  3. 在出现提示时确认更改,然后选择 Review and Launch (检查并启动)

  4. 选择 Edit Security Groups (编辑安全组)。对于 分配安全组,选择 选择现有安全组

  5. 从安全组列表中,为您以前创建的应用程序负载均衡器选择安全组,然后选择 Review and Launch (检查并启动)

  6. 选择启动

  7. 记下实例 ID。稍后在连接 EthStats 并 EthExplorer 使用堡垒主机时,您需要使用该 ID。