将 AWS区块链模板用于以太坊 - AWS区块链模板

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

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

将 AWS区块链模板用于以太坊

Ethereum 是一个区块链框架,它使用Ethereum 特定的语言 Solidity 来运行智能合同。Homestead 是 Ethereum 的最新版本。有关更多信息,请参阅 。 以太坊 Homestead 文档 稳固 文档中)。

请参阅 AWSBlockchain Templates 入门 对于要启动的链接AWS CloudFormation在特定地区使用以太坊模板。

以太坊期权

如果您使用模板配置 Ethereum 网络,您做出的选择将决定后续要求:

  • ecs — 指定以太坊在 Amazon EC2 实例的 Amazon ECS 集群上运行。

  • 码头-本地 — 指定 Ethereum 在单独的 EC2 实例上运行。

使用 Amazon ECS 容器平台

使用 Amazon ECS,您在由多个 EC2 实例组成的 ECS 集群上创建以太坊网络,集群中具备 Application Load Balancer 和相关的资源。有关使用 Amazon ECS 配置的更多信息,请参阅 AWSBlockchain Templates 入门 教程。

下图描述了使用 ECS 容器平台的模板创建的 Ethereum 网络:

选择私有或公有 Ethereum 网络

选择 1–4 以外的 Ethereum Network ID (Ethereum 网络 ID) 值,可在您定义的网络中,使用您指定的私有网络参数创建私有 Ethereum 节点。

如果您选择 Ethereum 网络 ID 自 1-4 之间,您创建的 Ethereum 节点会加入公有 Ethereum 网络。您可以忽略私有网络设置及其默认值。如果您选择将 Ethereum 节点加入公有 Ethereum 网络,请确保您的网络中的相应服务可通过 Internet 访问。

更改默认账户和助记词

助记词是一组随机单词,可用于为任何网络上的关联账户生成 Ethereum 包(即,私有密钥/公有密钥对)。助记词可用于访问关联账户的 Ether。我们创建了一个默认助记符,它与 Ethereum 模板使用的默认账户相关联。

警告

仅出于测试目的使用默认账户和关联的助记词。请勿使用默认账户集发送真实的 Ether,因为任何有权访问助记词的人都可以从账户中访问或窃取 Ether。相反,应出于生产目的指定自定义账户。与默认账户关联的助记词为 outdoor father modify clever trophy abandon vital feel portion grit evolve twist

如果您使用适用于 Ethereum 的 AWS区块链模板设置 Ethereum 网络,必须满足以下列出的最低要求。该模板需要使用为每个以下类别列出的 AWS 组件:

访问 Ethereum 资源的先决条

对于 ECS 平台 对于 Docker-Local

具有内部地址的面向 Internet 的组件(例如堡垒主机或面向 Internet 的负载均衡器),允许流量从该地址进入应用程序负载均衡器。ECS 平台需要使用该组件,因为模板创建内部负载均衡器以保护安全。在 EC2 实例位于私有子网时(建议的配置),docker-local 平台需要使用该组件。有关配置堡垒主机的信息,请参阅 创建堡垒主机

✔ (具有私有子网)

  • 入站规则,它允许 HTTP(端口 80),EthStats(在端口 8080 上提供)、通过 HTTP 的 JSON RPC(端口 8545)和 SSH(端口 22)来自受信任的外部来源(例如客户端计算机的 IP CIDR)的 SSH(端口 22)。

应用程序负载均衡器的安全组需满足以下要求:

  • 入站规则,它允许来自自身(同一安全组)的流量。

  • 入站规则,允许来自 EC2 实例的安全组的全部流量。

  • 出站规则,它仅允许进入 EC2 实例的安全组的所有流量。有关更多信息,请参阅 创建安全组

  • 如果将该相同安全组与堡垒主机关联,则为允许来自受信任来源的 SSH(端口 22)流量的入站规则。

  • 如果堡垒主机或其他面向 Internet 的组件位于不同的安全组中,则为允许来自该组件的流量的入站规则。

EC2 实例配置文件和 ECS 角色的示例 IAM 权限

您在使用模板时需指定 EC2 实例配置文件 ARN,作为参数之一。如果您使用 ECS 容器平台,还需指定 ECS 角色 ARN。附加到这些角色的权限策略允许集群中的 AWS资源和实例与其他 AWS资源进行交互。有关更多信息,请参阅 。 IAM 角色 中的 IAM 用户指南 . 使用以下策略语句和过程作为创建权限的起点。

EC2 实例配置文件的示例权限策略

以下权限策略说明了选择 ECS 容器平台的情况下 EC2 实例配置文件允许的操作。Docker-Local 容器平台中也可以使用相同的策略语句,只需移除 ecs 上下文密钥以限制访问。

"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": "*"

创建 ECS 角色和权限

对于附加到 ECS 角色的权限,我们建议您先从 AmazonEC2ContainerService角色 权限策略。使用以下过程创建角色并附加此权限策略。使用 IAM 控制台查看最多up-to-date此策略中的权限。

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

    在导航窗格中,选择 Roles (角色) Create Role (创建角色)

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

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

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

    适用于 权限策略 ,保留默认策略 ( AmazonEC2ContainerService角色 ) 已选中,然后选择 Next: Review .

    适用于 Role name (角色名称) 中,输入一个有助于识别角色的值,例如 ECSRoleFor以太坊 . 对于 Role Description (角色描述) ,输入简短摘要。记下以后的角色名称。

    请选择 Create role (创建角色)。

    从列表中选择您刚刚创建的角色。如果您的账户有许多角色,您可以搜索角色名称。

    • EthStats — 使用 http:// EC2-IP 地址

    • EthExplorer — 使用 http:// EC2-IP 地址 :8080

    • EthJsonRPC — 使用 http:// EC2-IP 地址 :8545

如果您为 Ethereum Network Subnet ID (Ethereum 网络子网 ID) 指定了公有子网(模板中的 List of VPC Subnets to use (要使用的 VPC 子网列表) ),您可以直接进行连接。您的客户端必须是 SSH 的入站流量 (端口 22) 以及所列端口的可信来源。这是由 EC2 安全组 您使用适用于以太坊的 AWS区块链模板指定的。

如果您指定了私有子网,您可以设置并使用 堡垒主机 以作为到这些地址的连接代理。有关更多信息,请参阅下面的 使用堡垒主机的代理连接

使用堡垒主机的代理连接

对于某些配置,以太坊服务可能无法公开提供。在这种情况下,您可以通过 堡垒主机 . 有关堡垒主机的更多信息,请参阅 Linux 堡垒主机架构 中的 Linux 堡垒主机快速入门指南 .

堡垒主机是 EC2 实例。确保满足以下要求:

  • 堡垒主机的 EC2 实例位于启用了自动分配公有 IP 的公有子网内,并且具有互联网网关。

  • 堡垒主机有允许 SSH 连接的 key pair。

  • 堡垒主机与允许来自连接的客户端的入站 SSH 流量的安全组关联。

  • 分配给以太坊主机的安全组(例如,如果 ECS 是容器平台,则 Application Load Balancer 器;如果 docker-local 是容器平台,则为主机 EC2 实例)允许来自 VPC 内源的所有端口上的入站流量。

设置堡垒主机后,请确保连接的客户端使用堡垒主机作为代理。以下示例说明了使用 Mac OS 设置代理连接。Replace BastionIP 使用堡垒主机 EC2 实例的 IP 地址, MySshKey.pem 使用已复制到堡垒主机的 key pair 文件。

在命令行上,键入以下内容:

ssh -i mySshKey.pem ec2-user@BastionIP -D 9001