Ethereum용 AWS Blockchain 템플릿 사용 - AWS Blockchain Templates

AWS Blockchain 템플릿은 2019년 4월 30일에 중단되었습니다. 이 서비스나 이 지원 문서에 대한 추가 업데이트는 없을 것입니다. AWS에 대한 최고의 관리형 블록체인 경험을 위해서는 Amazon Managed Blockchain (AMB)을 사용하는 것이 좋습니다. Amazon Managed Blockchain을 시작하는 방법에 대해 자세히 알아보려면 하이퍼레저 패브릭 워크숍 또는 이더리움 노드 배포에 관한 블로그를 참조하십시오. AMB에 대해 궁금한 점이 있거나 추가 지원이 필요한 경우에는 AWS Support 또는 AWS 계정 팀에 문의하십시오.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Ethereum용 AWS Blockchain 템플릿 사용

Ethereum은 블록 체인 프레임워크로, 이더리움 관련 언어인 Solidity를 사용하여 스마트 계약을 실행합니다. Homestead는 Ethereum의 최신 릴리스입니다. 자세한 내용은 Ethereum Homestead 설명서Solidity 설명서를 참조하십시오.

시작 링크

Ethereum 템플릿을 사용하여 특정 지역에서 AWS CloudFormation를 시작하는 링크에 대해서는 AWS Blockchain 템플릿 시작하기를 참조하십시오.

Ethereum 옵션

템플릿을 사용하여 Ethereum 네트워크를 구성할 때, 선택하는 옵션에 따라 후속 요구 사항이 결정됩니다.

컨테이너 플랫폼 선택

AWS Blockchain 템플릿은 Amazon ECR에 저장된 Docker 컨테이너를 사용하여 블록체인 소프트웨어를 배포합니다. Ethereum용 AWS Blockchain 템플릿은 컨테이너 플랫폼을 위한 두 가지 선택 사항을 제공합니다.

  • ecs—Ethereum이 Amazon EC2 인스턴스의 Amazon ECS 클러스터에서 실행되도록 지정합니다.

  • docker-local—Ethereum이 단일 EC2 인스턴스에서 실행하도록 지정합니다.

Amazon ECS 컨테이너 플랫폼 사용

Amazon ECS를 사용하여 Application Load Balancer 및 관련 리소스가 있고 여러 개의 EC2 인스턴스로 구성된 ECS 클러스터에서 Ethereum 네트워크를 생성합니다. Amazon ECS 구성 사용에 대한 자세한 내용은 AWS Blockchain 템플릿 시작하기 자습서를 참조하십시오.

다음 다이어그램은 ECS 컨테이너 플랫폼 옵션과 함께 템플릿을 사용하여 생성된 Ethereum 네트워크를 보여줍니다:

docker-local 플랫폼 사용

또는 단일 Amazon EC2 인스턴스 내에 있는 Ethereum 컨테이너를 시작할 수 있습니다. 모든 컨테이너는 단일 EC2 인스턴스에서 실행됩니다. 이는 간소화된 설정입니다.

다음 다이어그램은 docker-local 컨테이너 플랫폼 옵션과 함께 템플릿을 사용하여 생성된 Ethereum 네트워크를 보여줍니다:

프라이빗 또는 퍼블릭 Ethereum 네트워크 선택

1—4 이외의 Ethereum 네트워크 ID 값을 선택하면, 지정한 프라이빗 네트워크 매개 변수를 사용하여, 사용자가 정의한 네트워크 내에서 실행되는 프라이빗 Ethereum 노드가 생성됩니다.

1~4 중에서 Ethereum 네트워크 ID를 선택하면 생성한 Ethereum 노드가 퍼블릭 Ethereum 네트워크에 연결됩니다. 프라이빗 네트워크 설정 및 그 기본값은 무시할 수 있습니다. Ethereum 노드를 퍼블릭 Ethereum 네트워크에 연결하고자 하는 경우 네트워크 내 해당 서비스가 인터넷에 액세스할 수 있어야 합니다.

기본 계정 및 니모닉 문구 변경

니모닉 문구는 어떤 네트워크에서든 연결된 계정의 Ethereum 지갑(즉, 프라이빗/퍼블릭 키 페어)을 생성하는 데 사용할 수 있는 임의의 단어 집합입니다. 니모닉 구문은 연결된 계정의 Ether에 액세스하는 데 사용할 수 있습니다. Ethereum 템플릿이 사용하는 기본 계정과 연결된 기본 니모닉을 생성했습니다.

주의

기본 계정 및 관련 니모닉 구문은 테스트 용도로만 사용하십시오. 기본 계정 집합을 사용하여 실제 Ether를 전송하지 마십시오. 니모닉 구문의 액세스 권한이 있는 사람은 계정의 Ether에 액세스하거나 Ether를 도용할 수 있습니다. 대신 프로덕션 용도로 사용자 지정 계정을 지정하십시오. 기본 계정과 연결된 니모닉 구문은 outdoor father modify clever trophy abandon vital feel portion grit evolve twist입니다.

사전 조건

Ethereum용 AWS Blockchain 템플릿을 사용하여 Ethereum 네트워크를 설정하는 경우 아래 열거된 최소 요구 사항을 충족해야 합니다. 템플릿에는 다음 각 범주에 대해 나열된 AWS 구성 요소가 필요합니다.

Ethereum 리소스에 액세스하기 위한 사전 조건

전제 조건 ECS 플랫폼의 경우 docker-local의 경우

EC2 인스턴스에 액세스하는 데 사용할 수 있는 Amazon EC2 키 페어입니다. 키는 ECS 클러스터 및 다른 리소스와 동일한 리전에 있어야 합니다.

애플리케이션 로드 밸런서로 들어가는 트래픽이 허용되는 내부 주소가 있는 접속 호스트 또는 인터넷 연결 로드 밸런서와 같은 인터넷 연결 구성 요소입니다. ECS 플랫폼에서는 보안상의 이유로 템플릿에서 내부 로드 밸런서가 생성되기 때문에 이 구성 요소가 필요합니다. docker-local 플랫폼에서는 EC2 인스턴스가 프라이빗 서브넷(권장됨)에 있을 때 이 구성 요소가 필요합니다. 접속 호스트 구성에 대한 자세한 내용은 Bastion Host 생성 단원을 참조하십시오.

✔ (프라이빗 서브넷 포함)

IAM 사전 조건

전제 조건 ECS 플랫폼의 경우 docker-local의 경우

모든 관련 서비스에서 작업할 권한을 가지고 있는 IAM 보안 주체(사용자 또는 그룹)입니다.

EC2 인스턴스에서 다른 서비스와 상호 작용할 수 있는 적절한 권한이 있는 Amazon EC2 인스턴스 프로파일입니다. 자세한 설명은 To create an EC2 instance profile 섹션을 참조하세요.

Amazon ECS에서 다른 서비스와 상호 작용할 수 있는 권한이 있는 IAM 역할입니다. 자세한 설명은 ECS 역할 및 권한 생성 섹션을 참조하세요.

보안 그룹 사전 조건

전제 조건 ECS 플랫폼의 경우 docker-local의 경우

EC2 인스턴스에 대한 보안 그룹의 요건은 다음과 같습니다.

  • 0.0.0.0/0으로의 트래픽을 허용하는 아웃바운드 규칙(기본값).

  • 자체(동일한 보안 그룹)에서 오는 모든 트래픽을 허용하는 인바운드 규칙.

  • Application Load Balancer에 대한 보안 그룹에서 오는 모든 트래픽을 허용하는 인바운드 규칙입니다.

  • 클라이언트 컴퓨터의 IP CIDR과 같은 신뢰할 수 있는 외부 소스로부터의 HTTP EthStats (포트 80), (포트 8080에서 제공됨), HTTP를 통한 JSON RPC (포트 8545) 및 SSH (포트 22) 를 허용하는 인바운드 규칙

Application Load Balancer에 대한 보안 그룹의 요건은 다음과 같습니다.

  • 자체(동일한 보안 그룹)에서 오는 모든 트래픽을 허용하는 인바운드 규칙.

  • EC2 인스턴스에 대한 보안 그룹의 모든 트래픽을 허용하는 인바운드 규칙.

  • EC2 인스턴스에 대한 보안 그룹으로 가는 모든 트래픽만을 허용하는 아웃바운드 규칙. 자세한 설명은 보안 그룹 생성 섹션을 참조하세요.

  • 이 동일한 보안 그룹을 접속 호스트와 연결하는 경우 신뢰할 수 있는 소스에서 오는 SSH(포트 22) 트래픽을 허용하는 인바운드 규칙.

  • 접속 호스트 또는 기타 인터넷 연결 구성 요소가 다른 보안 그룹에 있는 경우 해당 구성 요소에서 오는 트래픽을 허용하는 인바운드 규칙.

VPC 사전 조건

전제 조건 ECS 플랫폼의 경우 docker-local의 경우

Ethereum 서비스에 액세스하는 데 사용되는 Elastic IP 주소입니다.

EC2 인스턴스를 실행할 서브넷. 프라이빗 서브넷을 권장합니다.

공개적으로 액세스할 수 있는 두 개의 서브넷입니다. 각 서브넷은 서로 다른 가용 영역에 있어야 하며, 하나는 EC2 인스턴스의 서브넷과 동일한 가용 영역에 있어야 합니다.

EC2 인스턴스 프로파일 및 ECS 역할에 대한 IAM 권한 예제

템플릿을 사용할 때 파라미터 중 하나로 EC2 인스턴스 프로파일 ARN을 지정합니다. ECS 컨테이너 플랫폼을 사용하는 경우 ECS 역할 ARN 또한 지정합니다. 이러한 역할에 연결된 권한 정책을 사용하면 클러스터의 AWS 리소스 및 인스턴스가 다른 AWS 리소스와 상호 작용할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 IAM 역할을 참조하세요. 아래 정책 설명 및 절차를 권한 생성의 시작점으로 사용하십시오.

EC2 인스턴스 프로파일에 대한 권한 정책 예제

다음 권한 정책은 ECS 컨테이너 플랫폼 선택 시 EC2 인스턴스 프로필에 대해 허용되는 작업을 보여줍니다. ecs 컨텍스트 키를 제거하여 액세스를 제한하면 동일한 정책 설명을 docker-local 컨테이너 플랫폼에서 사용할 수 있습니다.

{ "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 역할에 연결된 권한의 경우 AmazonEC2 권한 정책으로 시작하는 것이 좋습니다. ContainerServiceRole 다음 절차를 사용하여 역할을 생성하고 이 권한 정책을 연결합니다. IAM 콘솔을 사용하여 이 정책에서 가장 많은 up-to-date 권한을 확인할 수 있습니다.

Amazon ECS에 대한 IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할, 역할 생성을 선택합니다.

  3. Select type of trusted entity(신뢰할 수 있는 유형의 엔터티 선택) 아래에서 AWS 서비스를 선택합니다.

  4. 이 역할을 사용할 서비스 선)에서 Elastic Container Service를 선택합니다.

  5. [Select your use case]에서 [Elastic Container Service], [Next:Permissions]를 선택합니다.

  6. 권한 정책의 경우 기본 정책 (AmazonEC2 ContainerServiceRole) 을 선택한 상태로 두고 Next:Review를 선택합니다.

  7. 역할 이름에 역할을 식별하는 데 도움이 되는 값 (예: ECS) 을 입력합니다. RoleForEthereum [Role Description]에 간략한 설명을 입력합니다. 나중에 사용할 수 있도록 역할 이름을 기록해 두십시오.

  8. Create role(역할 생성)을 선택합니다.

  9. 목록에서 방금 생성한 역할을 선택합니다. 계정에 여러 역할이 있는 경우 역할 이름을 검색할 수 있습니다.

  10. [Role ARN] 값을 복사하고 다시 복사할 수 있도록 저장합니다. Ethereum 네트워크를 생성할 때 이 ARN이 필요합니다.

Ethereum 리소스에 연결하기

템플릿을 사용하여 생성한 루트 스택에 CREATE_COMPLETE이 표시된 후 AWS CloudFormation 콘솔을 사용하여 Ethereum 리소스에 연결할 수 있습니다. 연결 방식은 선택한 컨테이너 플랫폼(ECS 또는 docker-local)에 따라 다릅니다.

  • ECS—루트 스택의 출력 탭에는 Application Load Balancer에서 실행 중인 서비스의 링크가 제공됩니다. 이러한 URL은 보안 사유로 인해 직접 액세스할 수 없습니다. 연결하려면 접속 호스트를 설정하고 사용하여 이러한 URL에 대한 연결을 프록시할 수 있습니다. 자세한 내용은 아래 Bastion Host를 사용한 프록시 연결 섹션을 참조하세요.

  • docker-local—아래 나열된 Ethereum 서비스를 호스팅하는 EC2 인스턴스의 IP 주소를 사용하여 연결합니다. EC2 콘솔을 사용하여 템플릿으로 생성된 인스턴스의 ec2-IP-address를 찾습니다.

    • EthStats—http://EC2-IP 주소 사용

    • EthExplorer—http://EC2-IP 주소:8080 사용

    • EthJsonRpc—http://EC2-IP 주소:8545를 사용하십시오.

    Ethereum 네트워크 서브넷 ID(템플릿 내에서는 사용할 VPC 서브넷 목록)에 대해 퍼블릭 서브넷을 지정한 경우 직접 연결할 수 있습니다. 클라이언트는 나열된 포트는 물론 SSH(포트 22)에 대한 인바운드 트래픽의 신뢰할 수 있는 소스여야 합니다. 이는 Ethereum용 AWS 블록체인 템플릿을 사용하여 지정한 EC2 보안 그룹에 의해 결정됩니다.

    프라이빗 서브넷을 지정한 경우 접속 호스트를 설정하고 사용하여 이러한 주소에 대한 연결을 프록시할 수 있습니다. 자세한 내용은 아래 Bastion Host를 사용한 프록시 연결 섹션을 참조하세요.

Bastion Host를 사용한 프록시 연결

어떤 구성은 공용 Ethereum 서비스가 제공되지 않습니다. 이 경우 Bastion Host를 통해 Ethereum 리소스에 연결할 수 있습니다. Bastion Host에 대한 자세한 내용은 Linux Bastion Host 퀵 스타트 가이드Linux Bastion Host 아키텍처를 참조하십시오.

Bastion Host는 EC2 인스턴스입니다. 다음 요구 사항을 충족하는지 확인합니다:

  • Bastion Host의 EC2 인스턴스는 퍼블릭 IP 자동 할당이 활성화되어 있고 인터넷 게이트웨이가 있는 퍼블릭 서브넷 내에 있습니다.

  • Bastion Host에는 ssh 연결을 허용하는 키 쌍이 있습니다.

  • Bastion Host는 연결하는 클라이언트의 인바운드 SSH 트래픽을 허용하는 보안 그룹과 연결됩니다.

  • Ethereum 호스트에 할당된 보안 그룹(예: ECS가 컨테이너 플랫폼인 경우 또는 Application Load Balancer 또는 docker-local이 컨테이너 플랫폼인 경우 호스트 EC2 인스턴스)은 VPC 내 소스의 모든 포트에 인바운드 트래픽을 허용합니다.

Bastion Host를 설정한 후 연결하는 클라이언트가 Bastion Host를 프록시로 사용하는지 확인하십시오. 다음은 Mac OS를 사용하여 프록시 연결을 설정한 예입니다. BastionIP를 배스천 호스트 EC2 인스턴스의 IP 주소로, MySshKey.pem을 배스천 호스트에 복사한 키 페어 파일로 대체합니다.

명령줄에 다음을 입력합니다:

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

이렇게 하면 로컬 시스템의 포트 9001에 대한 포트 포워딩이 Bastion Host로 설정됩니다.

다음으로 localhost:9001에 대한 SOCKS 프록시를 사용하도록 브라우저 또는 시스템을 구성하십시오. 예를 들어, Mac OS의 경우, [System Preferences]와 [Network], [Advanced]를 선택하고 [SOCKS proxy]를 선택하여 localhost:9001을 입력합니다.

Chrome에서 FoxyProxy Standard를 사용하여 추가 도구, 확장 프로그램을 선택합니다. FoxyProxy 표준에서 세부 정보, 확장 옵션, 새 프록시 추가를 선택합니다. [Manual Proxy Configuration]을 선택합니다. [Host or IP Address]에 localhost를 입력하고 [Port]에는 9001을 입력합니다. [SOCKS proxy?], [Save]를 선택합니다.

이제 템플릿 출력에 나열된 Ethereum 호스트 주소에 연결할 수 있습니다.