사전 조건 설정 - AWS Blockchain Templates

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

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

사전 조건 설정

이 자습서에서 지정하는 Ethereum용 AWS 블록체인 템플릿 구성에서는 다음을 수행해야 합니다:

VPC 및 서브넷 생성

Ethereum용 AWS 블록체인 템플릿은 Amazon Virtual Private Cloud(Amazon VPC)를 사용하여 사용자가 정의한 가상 네트워크로 리소스를 시작합니다. 이 자습서에서 지정하는 구성에는 Application Load Balancer가 생성되며, 서로 다른 가용 영역에 있는 2개의 퍼블릭 서브넷이 필요합니다. 또한 컨테이너 인스턴스에는 프라이빗 서브넷이 필요하며, 서브넷은 Application Load Balancer와 동일한 가용 영역에 있어야 합니다. 먼저 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. 탄력적 IP, 새 주소 할당, 할당을 선택합니다.

  3. 생성한 탄력적 IP 주소를 기록해 두고 닫기를 선택합니다.

  4. 탄력적 IP 주소 목록에서 이전에 생성한 탄력적 IP 주소의 할당 ID를 찾습니다. VPC를 생성할 때 이를 사용합니다.

VPC를 생성하려면
  1. 탐색 모음에서 VPC를 생성할 리전을 선택합니다. VPC는 리전마다 고유하므로 키 페어를 생성하고 Ethereum 스택을 시작한 리전과 동일한 리전을 선택합니다. 자세한 설명은 키 페어 생성 섹션을 참조하세요.

  2. VPC 대시보드에서 [Start VPC Wizard]를 선택합니다.

  3. 1단계: VPC 구성 선택 페이지에서 퍼블릭 및 프라이빗 서브넷이 있는 VPC, 선택을 선택합니다.

  4. 2단계: 퍼블릭 및 프라이빗 서브넷이 있는 VPC 페이지에서 IPv4 CIDR 블록IPv6 CIDR 블록을 기본값으로 그대로 둡니다. VPC 이름에 기억하기 쉬운 이름을 입력합니다.

  5. 퍼블릿 서브넷의 IPv4 CIDR에서 기본값을 그대로 둡니다. 가용 영역에서 영역을 선택합니다. 퍼블릭 서브넷 이름에 기억하기 쉬운 이름을 입력합니다.

    템플릿을 사용할 때 이 서브넷을 Application Load Balancer에 대한 첫 두 개의 서브넷 중 하나로 지정합니다.

    프라이빗 서브넷에 대해 동일한 가용 영역을 선택하고 다른 퍼블릭 서브넷에 대해 다른 가용 영역을 선택하기 때문에 이 서브넷의 가용 영역에 주의해야 합니다.

  6. 프라이빗 서브넷의 IPv4 CIDR에서 기본값을 그대로 둡니다. 가용 영역에서 이전 단계와 동일한 가용 영역을 선택합니다. 프라이빗 서브넷 이름에 기억하기 쉬운 이름을 입력합니다.

  7. 탄력적 IP 할당 ID에서 이전에 생성한 탄력적 IP 주소를 선택합니다.

  8. 기타 설정의 기본값을 유지합니다.

  9. VPC 생성을 선택합니다.

    아래 예는 퍼블릭 서브넷 EthereumPubSub1과 프라이빗 서브넷 1을 가진 EthereumNetworkVPC를 보여줍니다. EthereumPvtSub 퍼블릭 서브넷은 가용 영역 us-west-2a를 사용합니다.

다른 가용 영역에서 두 번째 퍼블릭 서브넷을 생성하려면
  1. 서브넷을 선택한 다음 목록에서 이전에 생성한 퍼블릭 서브넷을 선택합니다. 라우팅 테이블 탭을 선택하고 라우팅 테이블 ID를 기록해 둡니다. 아래의 두 번째 퍼블릭 서브넷에 대해 동일한 라우팅 테이블을 지정합니다.

  2. 서브넷 생성을 선택합니다.

  3. Name tag(이름 태그)에 서브넷의 이름을 입력합니다. 나중에 이 네트워크에서 Bastion Host를 생성할 때 이 이름을 사용합니다.

  4. VPC에서 이전에 생성한 VPC를 선택합니다.

  5. 가용 영역에서 첫 번째 퍼블릭 서브넷에 대해 선택한 영역과 다른 영역을 선택합니다.

  6. IPv4 CIDR 블록10.0.2.0/24를 입력합니다.

  7. 예, 생성을 선택합니다. 서브넷이 서브넷 목록에 추가됩니다.

  8. 목록에서 서브넷을 선택한 상태에서 서브넷 작업, IP 자동 할당 설정 수정을 선택합니다. IP 자동 할당, 저장, 닫기를 선택합니다. 이렇게 하면 이 서브넷에서 Bastion Host를 생성할 때 접속 호스트가 퍼블릭 IP 주소를 얻을 수 있습니다.

  9. 라우팅 테이블 탭에서 편집을 선택합니다. 다음으로 변경에서 이전에 기록해 둔 라우팅 테이블 ID를 선택하고 저장을 선택합니다.

이제 이전에 생성한 VPC에 대해 3개의 서브넷이 표시됩니다. 서브넷 이름과 ID를 기록해 두면 템플릿을 사용하여 해당 항목을 지정할 수 있습니다.

보안 그룹 생성

보안 그룹은 방화벽 역할을 하면서 리소스에 대한 인바운드 및 아웃바운드 트래픽을 제어합니다. 템플릿을 사용하여 Amazon ECS 클러스터에서 Ethereum 네트워크를 생성할 때 보안 그룹 두 개를 지정합니다.

  • 클러스터의 EC2 인스턴스에 대한 트래픽을 제어하는 EC2 인스턴스용 보안 그룹

  • Application Load Balancer, EC2 인스턴스 및 Bastion Host 간의 트래픽을 제어하는 Application Load Balancer에 대한 보안 그룹입니다. 이 보안 그룹을 Bastion Host와도 연결합니다.

각 보안 그룹은 기타 최소 규칙은 물론 Application Load Balancer와 EC2 인스턴스 사이의 통신을 허용하는 규칙을 보유합니다. 이로 인해 다른 보안 그룹 참조가 필요합니다. 이러한 이유로 보안 그룹을 먼저 생성한 다음 적절한 규칙을 업데이트합니다.

2개의 보안 그룹을 생성하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 보안 그룹(Security Groups)보안 그룹 생성(Create Security Group)을 차례로 선택합니다.

  3. 보안 그룹 이름에 식별하기 쉽고 다른 것과 쉽게 구분되는 보안 그룹의 이름을 입력합니다(예: EthereumEC2-SG 또는 EthereumALB-SG). 나중에 이러한 이름을 사용합니다. 설명에 간략한 설명을 입력합니다.

  4. VPC에서 이전에 생성한 VPC를 선택합니다.

  5. 생성을 선택하세요.

  6. 위 단계를 반복하여 또 다른 보안 그룹을 생성합니다.

EC2 인스턴스용 보안 그룹에 인바운드 규칙 추가
  1. 이전에 생성한 EC2 인스턴스용 보안 그룹을 선택합니다.

  2. 인바운드 탭에서 편집을 선택합니다.

  3. 유형(Type)에서 모든 트래픽(All traffic)을 선택합니다. 소스에서 사용자 지정을 선택된 상태로 그대로 두고 목록에서 현재 편집 중인 보안 그룹(예: EthereumEC2-SG)을 선택합니다. 이를 통해 보안 그룹의 EC2 인스턴스가 다른 인스턴스와 통신할 수 있습니다.

  4. 규칙 추가(Add Rule)를 선택합니다.

  5. 유형(Type)에서 모든 트래픽(All traffic)을 선택합니다. 소스에서 사용자 지정을 선택된 상태로 그대로 두고 목록에서 Application Load Balancer에 대한 보안 그룹(예: EthereumALB-SG)을 선택합니다. 이를 통해 보안 그룹의 EC2 인스턴스가 Application Load Balancer와 통신할 수 있습니다.

  6. 저장을 선택합니다.

Application Load Balancer용 보안 그룹에 대한 인바운드 규칙 추가 및 아웃바운드 규칙 편집
  1. 이전에 생성한 Application Load Balancer용 보안 그룹을 선택합니다.

  2. 인바운드 탭에서 편집을 선택하고 다음 인바운드 규칙을 추가합니다.

    1. 유형(Type)에서 모든 트래픽(All traffic)을 선택합니다. 소스에서 사용자 지정을 선택된 상태로 그대로 두고 목록에서 현재 편집 중인 보안 그룹(예: EthereumALB-SG)을 선택합니다. 이렇게 하면 Application Load Balancer가 자체 및 Bastion Host와 통신할 수 있습니다.

    2. 규칙 추가(Add Rule)를 선택합니다.

    3. 유형(Type)에서 모든 트래픽(All traffic)을 선택합니다. 소스에서 사용자 지정을 선택된 상태로 그대로 두고 목록에서 EC2 인스턴스에 대한 보안 그룹(예: EthereumEC2-SG)을 선택합니다. 이렇게 하면 보안 그룹의 EC2 인스턴스가 Application Load Balancer 및 Bastion Host와 통신할 수 있습니다.

    4. 규칙 추가(Add Rule)를 선택합니다.

    5. Type(유형)에서 SSH를 선택합니다. 소스에서 내 IP를 선택합니다. 그러면 컴퓨터의 IP CIDR이 감지되어 입력됩니다.

      중요

      이 규칙을 사용하면 Bastion Host가 컴퓨터에서 오는 SSH 트래픽을 수락할 수 있으므로, 컴퓨터가 Bastion Host를 사용하여 웹 인터페이스를 보고 Ethereum 네트워크의 EC2 인스턴스에 연결할 수 있습니다. 다른 사람들이 Ethereum 네트워크에 연결할 수 있도록 허용하려면 해당 컴퓨터를 이 규칙에 소스로 추가하십시오. 신뢰할 수 있는 소스로 가는 인바운드 트래픽만 허용하십시오.

    6. 저장을 선택합니다.

  3. 아웃바운드 탭에서 편집을 선택하고 자동으로 생성된 규칙을 삭제하여 모든 IP 주소로 가는 아웃바운드 트래픽을 허용합니다.

  4. 규칙 추가(Add Rule)를 선택합니다.

  5. 유형(Type)에서 모든 트래픽(All traffic)을 선택합니다. 대상에서 사용자 지정을 선택된 상태로 그대로 두고 목록에서 EC2 인스턴스에 대한 보안 그룹을 선택합니다. 이렇게 하면 Application Load Balancer 및 Bastion Host에서 Ethereum 네트워크의 EC2 인스턴스로 가는 아웃바운드 연결이 허용됩니다.

  6. 규칙 추가(Add Rule)를 선택합니다.

  7. 유형(Type)에서 모든 트래픽(All traffic)을 선택합니다. 대상에서 사용자 지정을 선택된 상태로 그대로 두고 목록에서 현재 편집 중인 보안 그룹(예: EthereumALB-SG)을 선택합니다. 이렇게 하면 Application Load Balancer가 자체 및 Bastion Host와 통신할 수 있습니다.

  8. 저장을 선택합니다.

Amazon ECS 및 EC2 인스턴스 프로파일에 대한 IAM 역할 생성

이 템플릿을 사용할 때 Amazon ECS 및 EC2 인스턴스 프로파일에 대한 IAM 역할을 지정합니다. 이러한 역할에 연결된 권한 정책을 사용하면 클러스터의 AWS 리소스 및 인스턴스가 다른 AWS 리소스와 상호 작용할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 IAM 역할을 참조하세요. IAM 콘솔(https://console.aws.amazon.com/iam/)을 사용하여 Amazon ECS 및 EC2 인스턴스 프로파일에 대한 IAM 역할을 설정합니다.

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이 필요합니다.

템플릿에서 지정하는 EC2 인스턴스 프로파일은 Ethereum 네트워크의 EC2 인스턴스에서 다른 AWS 서비스와 상호 작용하기 위해 가정됩니다. 역할에 대한 권한 정책을 생성하고, 역할을 생성(동일한 이름의 인스턴스 프로파일을 자동으로 생성)한 다음 역할에 권한 정책을 연결합니다.

EC2 인스턴스 프로파일을 생성하려면
  1. 탐색 창에서 정책(Policies)을 선택한 후 정책 생성(Create 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) 을 입력합니다. 설명에 간략한 설명을 입력합니다. 정책 생성을 선택합니다.

  5. 역할(Roles)역할 생성(Create role)을 차례로 선택합니다.

  6. EC2, 다음: 권한을 선택합니다.

  7. 검색 필드에 이전에 생성한 권한 정책의 이름 (예: EthereumPolicyForEC2) 을 입력합니다.

  8. 이전에 생성한 정책에 대한 확인란을 선택하고 다음: 검토를 선택합니다.

  9. 역할 이름에 역할을 식별하는 데 도움이 되는 값 (예: EC2 RoleForEthereum) 을 입력합니다. 역할 설명에 간략한 설명을 입력하고 역할 생성을 선택합니다.

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

  11. 인스턴스 프로파일 ARN 값을 복사하고 다시 복사할 수 있도록 저장합니다. Ethereum 네트워크를 생성할 때 이 ARN이 필요합니다.

Bastion Host 생성

이 자습서에서는 Bastion Host를 생성합니다. 이 인스턴스는 Ethereum 네트워크에서 웹 인터페이스 및 인스턴스에 연결하는 데 사용하는 EC2 인스턴스입니다. 유일한 목적은 VPC 외부의 신뢰할 수 있는 클라이언트에서 오는 SSH 트래픽을 전달하여 Ethereum 네트워크 리소스에 액세스할 수 있도록 하는 것입니다.

템플릿에서 생성하는 Application Load Balancer가 내부적이기 때문에, 즉 내부 IP 주소만 라우팅하기 때문에 Bastion Host를 설정합니다. Bastion Host:

  • 이전에 생성한 두 번째 퍼블릭 서브넷에서 시작하므로 Application Load Balancer가 인식하는 내부 IP 주소가 있습니다.

  • 서브넷이 할당하는 퍼블릭 IP 주소가 있으며, VPC 외부의 신뢰할 수 있는 소스에서 액세스할 수 있습니다.

  • 이전에 생성한 Application Load Balancer에 대한 보안 그룹과 연결되어 있으며, 신뢰할 수 있는 클라이언트에서 오는 SSH 트래픽(포트 22)을 허용하는 인바운드 규칙이 있습니다.

Ethereum 네트워크에 액세스 할 수 있으려면 신뢰할 수 있는 클라이언트가 Bastion Host를 통해 연결하도록 설정해야 합니다. 자세한 설명은 배스천 호스트 연결 EthStats 및 EthExplorer 사용 섹션을 참조하세요. Bastion Host는 하나의 접근 방식입니다. 신뢰할 수 있는 클라이언트에서 VPC 내의 프라이빗 리소스에 대한 액세스를 제공하는 모든 접근 방식을 사용할 수 있습니다.

Bastion Host를 생성하려면
  1. Amazon EC2 Linux 인스턴스용 사용 설명서인스턴스 시작의 첫 5단계를 수행합니다.

  2. [Edit Instance Details]를 선택합니다. 네트워크에서 이전에 생성한 VPC를 선택하고, 서브넷에서 이전에 생성한 두 번째 퍼블릭 서브넷을 선택합니다. 다른 모든 설정은 기본값으로 그대로 둡니다.

  3. 메시지가 표시되면 변경 내용을 확인한 다음 검토 후 시작을 선택합니다.

  4. 보안 그룹 편집을 선택합니다. 보안 그룹 할당에서 Select an existing security group(기존 보안 그룹 선택)을 선택합니다.

  5. 보안 그룹 목록에서 이전에 생성한 Application Load Balancer에 대한 보안 그룹을 선택한 다음 검토 후 시작을 선택합니다.

  6. 시작을 선택합니다.

  7. 인스턴스 ID를 기록해 둡니다. 나중에 배스천 호스트 연결 EthStats 및 EthExplorer 사용할 때 이 항목이 필요합니다.