Usando o AWS Blockchain Template para Ethereum - Modelos do AWS Blockchain

O AWS Blockchain Templates foi descontinuado em 30 de abril de 2019. Nenhuma atualização adicional será feita para este serviço ou nesta documentação de suporte. Para obter a melhor experiência de Managed Blockchain AWS, recomendamos que você use o Amazon Managed Blockchain (AMB). Para saber mais sobre como começar a usar o Amazon Managed Blockchain, veja o nosso workshop sobre o Hyperledger Fabric ou o nosso blog sobre a implantação de um nó Ethereum. Se você tiver dúvidas sobre o AMB ou precisar de mais suporte, entre em contato com AWS Support nossa equipe de AWS contas.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando o AWS Blockchain Template para Ethereum

O Ethereum é uma estrutura de blockchain que executa contratos inteligentes usando o Solidity, uma linguagem específica do Ethereum. O Homestead é o lançamento mais recente do Ethereum. Para obter mais informações, consulte a documentação do Ethereum Homestead e a documentação do Solidity.

Links para execução

Consulte Conceitos básicos do AWS Blockchain Templates para obter links para iniciar o AWS CloudFormation em regiões específicas usando os modelos do Ethereum.

Opções do Ethereum

Ao configurar a rede Ethereum usando o modelo, você faz escolhas que determinam os requisitos subsequentes:

Escolher a plataforma do contêiner

O AWS Blockchain Templates usa contêineres do Docker armazenados no Amazon ECR para implementar o software de blockchain. O AWS Blockchain Template para o Ethereum oferece duas opções para a Plataforma Container :

  • ecs — Especifica que o Ethereum é executado em um cluster do Amazon ECS de instâncias do Amazon EC2.

  • docker-local — Especifica que o Ethereum é executado em uma única instância do EC2.

Usando a Plataforma de Contêineres do Amazon ECS

Com o Amazon ECS, você cria a sua rede Ethereum em um cluster do ECS composto de várias instâncias do EC2, com um Application Load Balancer e recursos relacionados. Para mais informações sobre como usar a configuração do Amazon ECS, consulte o tutorial Conceitos básicos do AWS Blockchain Templates.

O diagrama a seguir descreve uma rede Ethereum criada em usando um modelo com a opção de plataforma de contêiner ECS:

AWS diagram showing VPC with public and private subnets, load balancers, and Ethereum nodes in ECS containers.

Usando a plataforma Docker-Local

Se preferir, você pode lançar contêineres Ethereum em uma única instância do Amazon EC2. Todos os contêineres são executados em uma única instância do EC2. Esta é uma configuração simplificada.

O diagrama a seguir descreve uma rede Ethereum criada usando o template com a opção de plataforma de contêiner docker-local:

Diagram of Ethereum network on AWS with VPC, EC2 instance, containers, and ECR registry.

Escolher uma rede Ethereum Privada ou Pública

Escolher um valor para a Ethereum Network ID diferente de 1 a 4 cria nós privados no Ethereum que são executados dentro de uma rede que você define, usando os parâmetros de rede privada que você especifica.

Quando você escolhe um valor para a Ethereum Network ID de 1 a 4, os nós do Ethereum que você cria são unidos à rede pública do Ethereum. Você pode ignorar as configurações da rede privada e seus respectivos padrões. Se você optar por unir os nós de Ethereum à rede pública de Ethereum, verifique se os serviços apropriados na sua rede podem ser acessados pela Internet.

Alterar as contas padrão e a frase mnemônica

Uma frase mnemônica é um conjunto aleatório de palavras que podem ser usadas para gerar carteiras de Ethereum (ou seja, pares de chaves privadas/públicas) para contas associadas em qualquer rede. A frase mnemônica pode ser usada para acessar Ether para contas associadas. Criamos um mnemônico padrão associado às contas padrão que o modelo de Ethereum usa.

Atenção

Use as contas padrão e a frase mnemônica associada somente para fins de teste. Não envie Ether real usando o conjunto padrão de contas, pois qualquer pessoa com acesso à frase mnemônica pode acessar ou roubar o Ether das contas. Em vez disso, especifique contas personalizadas para fins de produção. A frase mnemônica associada à conta padrão é outdoor father modify clever trophy abandon vital feel portion grit evolve twist.

Pré-requisitos

Quando você configura a sua rede Ethereum usando o AWS Blockchain Template para o Ethereum, os requisitos mínimos listados abaixo precisam ser atendidos. O modelo exige os componentes da AWS listados para cada uma das seguintes categorias:

Pré-requisitos para acessar recursos do Ethereum

Pré-requisito Para plataforma do ECS Para Docker-Local

Um par de chaves Amazon EC2 que você pode usar para acessar instâncias do EC2. A chave precisa existir na mesma Região que o cluster do ECS e outros recursos.

Um componente voltado para a Internet, como um bastion host ou um balanceador de carga, com um endereço interno pelo qual o tráfego é permitido no Application Load Balancer. Isso é necessário com a plataforma do ECS porque o modelo cria um balanceador de carga interno por motivos de segurança. Isso é necessário com a plataforma docker-local quando a instância do EC2 está em uma sub-rede privada, o que recomendamos. Para obter informações sobre como configurar um bastion host, consulte Criar um bastion host.

✔ (com sub-rede privada)

Pré-requisitos IAM

Pré-requisito Para plataforma do ECS Para Docker-Local

Uma enteidade principal do IAM; (usuário ou grupo) com permissões para trabalhar com todos os serviços relacionados.

Um perfil de instância do Amazon EC2 com permissões apropriadas para instâncias do EC2 para interagir com outros serviços. Para obter mais informações, consulte To create an EC2 instance profile.

Uma função do perfil do IAM, com permissões para que o Amazon ECS interaja com outros serviços. Para ter mais informações, consulte Criar a função e as permissões do ECS.

Pré-requisitos do grupo de segurança

Pré-requisito Para plataforma do ECS Para Docker-Local

Um security group para instâncias do EC2, com os seguintes requisitos:

  • Regras de saída que permitem tráfego para 0.0.0.0/0 (padrão).

  • Uma regra de entrada que permite todo o tráfego de si (o mesmo grupo de segurança).

  • Uma regra de entrada que permite todo o tráfego do grupo de segurança para o Application Load Balancer.

  • Regras de entrada que permitem HTTP (porta 80) EthStats (servido na porta 8080), JSON RPC sobre HTTP (porta 8545) e SSH (porta 22) de fontes externas confiáveis, como o CIDR IP do seu computador cliente.

Um grupo de segurança para o Application Load Balancer, com os seguintes requisitos:

  • Uma regra de entrada que permite todo o tráfego de si (o mesmo grupo de segurança).

  • Uma regra de entrada que permite o tráfego do grupo de segurança para instâncias do EC2.

  • As regras de saída que permitem todo o tráfego somente ao grupo de segurança para instâncias do EC2. Para ter mais informações, consulte Criar security groups.

  • Se associar esse mesmo grupo de segurança a um bastion host, uma regra de entrada que permite o tráfego SSH (porta 22) de origens confiáveis.

  • Se o bastion host ou outro componente voltado para a Internet estiver em um grupo de segurança diferente, uma regra de entrada que permite o tráfego desse componente.

Pré-requisitos do VPC

Pré-requisito Para plataforma do ECS Para Docker-Local

Um endereço IP Elástico que é usado para acessar os serviços do Ethereum.

Uma sub-rede para executar instâncias do EC2. Recomendamos muito uma sub-rede privada.

Duas sub-redes acessíveis ao público geral. Cada sub-rede deve estar em zonas de disponibilidade diferentes uma da outra, com uma na mesma zona de disponibilidade que a sub-rede para instâncias do EC2.

Exemplo de permissões do IAM para o perfil de instância do EC2 e a regra do ECS

Você especifica um ARN do perfil de instância do EC2 como um dos parâmetros ao usar o modelo. Se você usar a plataforma de contêiner do ECS, também especificará um ARN de função do ECS. As políticas de permissões anexadas a essas funções permitem que os recursos e as instâncias da AWS no cluster interajam com os outros recursos da AWS. Para obter mais informações, consulte Perfis do IAM no Guia do usuário do IAM. Use as instruções e os procedimentos de política abaixo como ponto de partida para criar permissões.

Exemplo de política de permissões para o perfil de instância do EC2

A política de permissões a seguir demonstra as ações permitidas para o perfil de instância do EC2 quando você escolhe a plataforma do contêiner ECS. As mesmas instruções de política podem ser usadas em uma plataforma de contêiner local do Docker, com chaves de contexto ecs removidas para limitar o acesso.

{ "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": "*" } ] }

Criar a função e as permissões do ECS

Para as permissões associadas à função do ECS, recomendamos que você comece com a política de permissões do AmazonEC2 ContainerServiceRole. Use o procedimento a seguir para criar uma função e anexar esta política de permissões. Use o console do IAM para ver a maioria das up-to-date permissões nessa política.

Para criar os perfis do IAM do Amazon ECS
  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, selecione Roles (Funções) e Create Role (Criar função).

  3. Em Select type of trusted entity (Selecionar tipo de entidade confiável), escolha AWS service (Produto da AWS).

  4. Em Choose the service that will use this role (Escolher o serviço que usará esta função), escolha Elastic Container Service.

  5. Em Select your use case (Selecionar seu caso de uso), escolha Elastic Container Service, Next:Permissions (Próximo: permissões).

    AWS console interface for creating a role, with Elastic Container Service selected as the use case.
  6. Em Política de permissões, deixe a política padrão (AmazonEC2 ContainerServiceRole) selecionada e escolha Next:Review.

  7. Em Nome da função, insira um valor que o ajude a identificar a função, como ECS. RoleForEthereum Em Role Description (Descrição da função), digite um resumo breve. Anote o nome da função para mais tarde.

  8. Selecione Criar perfil.

  9. Na lista, selecione a função que você acabou de criar. Caso sua conta tenha várias funções, você pode pesquisar o nome da função.

    AWSIAM console showing a role named "ECSRoleForEtherum" with its description.
  10. Copie o valor de Role ARN (ARN da função) e salve-o para copiá-lo novamente depois. Você precisará dele quando for criar a rede de Ethereum.

    AWSIAM role summary page showing role ARN, description, and attached policies.

Conectando-se aos recursos do Ethereum

Depois que a pilha raiz que você criou usando o modelo exibir CREATE_COMPLETE, você poderá conectar-se aos recursos do Ethereum usando o console do AWS CloudFormation. O modo como você se conecta depende da plataforma de contêiner escolhida, ECS ou docker-local:

  • ECS — A aba Saída da pilha raiz fornece links para serviços em execução no Application Load Balancer. Essas URLs não estão diretamente acessíveis por motivos de segurança. Para se conectar, é possível configurar e usar um bastion host para conexões de proxy com eles. Para obter mais informações, consulte Conexões de proxy usando um Bastion Host abaixo.

  • docker-local — Conecte-se usando o endereço IP da instância do EC2 que hospeda os serviços do Ethereum, conforme listados abaixo. Use o console do EC2 para encontrar o endereço ec2-IP-address da instância que o modelo criou.

    • EthStats—Use o endereço IP http://EC2-IP

    • EthExplorer— Use http://endereço IP do EC2:8080

    • EthJsonRpc—Use o endereço IP http://EC2-Ip:8545

    Se você especificou uma sub-rede pública para a ID da Sub-rede da Ethereum Network (Lista de sub-redes de VPC a serem usadas dentro do modelo), será possível conectar-se diretamente. Seu cliente deve ser uma fonte confiável de tráfego de entrada para SSH (porta 22), bem como as portas listadas. Isso é determinado pelo Grupo de Segurança EC2 que você especificar usando o Blockchain Template para o Ethereum.

    Se você especificou uma sub-rede privada, é possível configurar e usar um bastion host para conexões de proxy com esses endereços. Para obter mais informações, consulte Conexões de proxy usando um Bastion Host abaixo.

Conexões de proxy usando um Bastion Host

Com algumas configurações, os serviços do Ethereum podem não estar disponíveis publicamente. Nesses casos, você pode se conectar aos recursos do Ethereum por meio de um bastion host. Para obter mais informações sobre bastion hosts, consulte Arquitetura de Bastion Host do Linux no Guia de início rápido de Bastion Hosts do Linux.

O bastion host é uma instância do EC2. Certifique-se de cumprir os seguintes requisitos:

  • A instância EC2 do bastion host está em uma sub-rede pública com atribuição automática de IP público habilitada e inclui gateway da internet.

  • O bastion host tem o par de chaves que permite conexões ssh.

  • O bastion host está associado a um grupo de segurança que permite o tráfego SSH de entrada dos clientes que se conectam.

  • O grupo de segurança atribuído aos hosts Ethereum (por exemplo, o Application Load Balancer, se o ECS for a plataforma de contêiner, ou a instância EC2 do host, se docker-local for a plataforma de contêiner) permite tráfego de entrada em todas as portas a partir de fontes dentro da VPC.

Com um bastion host configurado, certifique-se de que os clientes que se conectam usem o bastion host como proxy. O exemplo a seguir demonstra a configuração de uma conexão proxy usando o Mac OS. Substitua bastionIP pelo endereço IP da instância EC2 do bastion host e MySshKey.pem pelo arquivo de key pair que você copiou para o bastion host.

Na linha de comando, digite o seguinte:

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

Isto configura o encaminhamento de portas para a porta 9001 na máquina local para o bastion host.

Em seguida, configure seu navegador ou sistema para usar o proxy SOCKS para localhost:9001. Por exemplo, ao usar o Mac OS, selecione System Preferences (Preferências do sistema), Network (Rede), Advanced (Avançado), selecione SOCKS proxy (Proxy SOCKS) e digite localhost:9001.

Usando o FoxyProxy Padrão com o Chrome, selecione Mais ferramentas, extensões. Em FoxyProxy Padrão, selecione Detalhes, Opções de extensão e Adicionar novo proxy. Selecione Manual Proxy Configuration (Configuração manual de proxy). Em Host or IP Address (Host ou endereço IP), digite localhost e para Port (Porta), digite 9001. Selecione SOCKS Proxy?, Save (Salvar).

Agora você deve poder conectar-se aos endereços de host dos endereços Ethereum listados na saída do modelo.