Amazon Cognito 인증으로 VPC 외부에서 Kibana에 액세스하기 위해 SSH 터널을 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 27일

내 Amazon Elasticsearch Service 클러스터는 Virtual Private Cloud(VPC)에서 실행됩니다. Amazon Cognito 인증으로 VPC 외부에서 Kibana에 액세스하기 위해 SSH 터널을 사용하려고 합니다.

간략한 설명

기본적으로 Amazon Cognito는 VPC에서 AWS Identity and Access Management(IAM) 사용자에 대한 Kibana 액세스를 제한합니다. 그러나 SSH 터널을 사용하여 VPC 외부에서 Kibana에 액세스할 수 있습니다.

중요: VPC 외부에서 Kibana(타사 도구)에 액세스할 때 조직의 보안 요구 사항을 준수하는지 확인하세요.

VPC 외부에서 SSH 터널을 사용하여 Kibana에 액세스하려면 다음의 단계를 실행하세요.

1.    Amazon Cognito 사용자 풀과 자격 증명 풀을 생성합니다.

2.    Elasticsearch 도메인이 있는 동일한 VPC의 퍼블릭 서브넷에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 생성합니다.

3.    FoxyProxy와 같은 브라우저 추가 기능을 사용하여 SOCKS 프록시를 구성합니다.

4.    로컬 시스템에서 EC2 인스턴스까지 SSH 터널을 생성합니다.

참고: 또한 Amazon Cognito 인증으로 VPC 외부에서 Kibana에 액세스하기 위해 NGINX 프록시나 클라이언트 VPN도 사용할 수 있습니다. 자세한 내용은 Amazon Cognito 인증으로 VPC 외부에서 Kibana에 액세스하려면 어떻게 해야 합니까?를 참조하세요.

5.    (선택 사항) 세분화된 액세스 제어(FGAC)가 활성화되어 있으면 Amazon Cognito의 인증된 역할을 추가합니다.

​해결 방법

Amazon Cognito 사용자 풀 및 자격 증명 풀 생성

1.    Amazon Cognito 사용자 풀을 생성합니다.

2.    호스팅된 사용자 풀 도메인을 구성합니다.

3.    Amazon Cognito 콘솔 탐색 창에서 [Users and groups]를 선택합니다.

4.    [Create user]를 선택한 다음 필드를 입력합니다. 이메일 주소를 입력했는지 확인합니다. 그런 다음 [Mark email as verified] 확인란을 선택합니다.

5.    [Groups] 탭을 선택한 후 [Create group]을 선택합니다. [Precedence]에 0을 입력합니다. 자세한 내용은 AWS Management Console에서 새 그룹 생성을 참조하세요.

6.    Amazon Cognito 콘솔을 다시 엽니다.

7.    [Manage Identity Pools]를 선택한 후 [Create new identity pool]을 선택합니다.

8.    자격 증명 풀의 이름을 입력하고 [Enable access to unauthenticated identities] 확인란을 선택한 후 [Create Pool]을 선택합니다.

9.    AWS 리소스에 대한 액세스 권한을 요구하는 메시지가 표시되면 [Allow]를 선택하여 자격 증명 풀과 연결된 기본 역할 2개(인증되지 않은 사용자를 위한 역할과 인증된 사용자를 위한 역할)를 생성합니다.

10.    Kibana에 대한 Amazon Cognito 인증에 사용할 Amazon ES 도메인을 구성합니다.
[Cognito User Pool]에는 1단계에서 생성한 사용자 풀을 선택합니다.
[Cognito Identity Pool]에는 8단계에서 생성한 자격 증명 풀을 선택합니다.

11.    다음과 같이 액세스 정책에 사용할 Amazon ES 도메인을 구성합니다. 다음 값을 바꿉니다.
account-id: AWS 계정 ID
identity-name: Amazon Cognito 자격 증명 풀 이름
ES-name: Amazon ES 도메인 이름
리전: us-east-1과 같이 Amazon ES 도메인이 위치한 리전

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::account-id:assumed-role/Cognito_identity-nameAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:Region:account-id:domain/ES-name/*"
    }
  ]
}

예를 들어, 다음과 같은 액세스 정책은 해당 값을 사용합니다.

AWS 계정 ID: 111122223333
Amazon Cognito 자격 증명 풀 이름: MyIdentityPool
Amazon ES 도메인 이름: MyES
리전: us-east-1

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::111122223333:assumed-role/Cognito_MyIdentityPoolAuth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:111122223333:domain/MyES/*"
    }
  ]
}

EC2 인스턴스 생성 및 보안 그룹 규칙 구성

1.    Elasticsearch 도메인이 있는 VPC의 퍼블릭 서브넷에서 EC2 인스턴스를 시작합니다. [Configure Instance Details] 페이지에서 [Auto-assign Public IP]가 [Enable]로 설정되어 있는지 확인합니다.
참고: 다음 단계에서는 EC2 인스턴스를 tunnel_ec2라고 합니다.

2.    tunnel_ec2 인스턴스와 연결된 보안 그룹에 인바운드 규칙을 추가합니다. 이러한 규칙은 Kibana 대시보드를 액세스하는 데 사용할 로컬 시스템의 IP 주소에서 포트 8157 및 22에 대한 트래픽을 허용해야 합니다.

3.    Elasticsearch 도메인과 연결된 보안 그룹에 인바운드 규칙을 추가합니다. 이 규칙은 tunnel_ec2 인스턴스의 프라이빗 IP 주소에 대한 트래픽을 허용해야 합니다.

SOCKS 프록시 구성

1.     Google Chrome에 FoxyProxy Standard를 추가합니다.

2.    FoxyProxy를 연 다음 [Options]를 선택합니다.

3.    [Proxy mode] 드롭다운 목록에서 [Use proxies based on their pre-defined patterns and priorities]를 선택합니다.

4.    [Add New Proxy]를 선택합니다.

5.    [General] 탭을 선택하고 "Kibana Proxy"와 같은 프록시 이름을 입력합니다.

6.    [Proxy Details] 탭에서 [Manual Proxy Configuration]이 선택되었는지 확인하고 다음 필드에 값을 입력합니다.
[Host or IP Address]에 localhost를 입력합니다.
[Port]에 8157을 입력합니다.
[SOCKS proxy]를 선택합니다.
[SOCKS v5]를 선택합니다.

7.    [URL Patterns] 탭을 선택합니다.

8.    [Add new pattern]을 선택하고 다음 필드를 입력합니다.
[Pattern Name]에 "VPC Endpoint"와 같이 알아보기 쉬운 이름을 입력합니다.
[URL pattern]에서 Kibana에 대한 VPC 엔드포인트를 입력합니다. [Whitelist URLs]가 선택되었는지 확인합니다. [Wildcards]가 선택되었는지 확인합니다.

9.     [저장]을 선택합니다.

SSH 터널 생성

1.    Kibana 대시보드에 액세스하는 데 사용할 로컬 컴퓨터에서 다음 명령을 실행합니다. 다음을 바꿉니다.
mykeypair.pem: tunnel_ec2 EC2 인스턴스를 시작할 때 지정한 키 페어에 대한 .pem 파일 이름.
public_dns_name: tunnel_ec2 EC2 인스턴스의 퍼블릭 DNS. 자세한 내용은 EC2 인스턴스의 DNS 호스트 이름 보기를 참조하십시오.

ssh -i "mykeypair.pem"  ec2-user@public_dns_name -ND 8157

2.    브라우저에서 Kibana 엔드포인트를 입력합니다. Kibana에 대한 Amazon Cognito 로그인 페이지가 나타납니다.

(선택 사항) 세분화된 액세스 제어(FGAC)가 활성화되었을 경우 Amazon Cognito의 인증된 역할 추가

세분화된 액세스 제어(FGAC)가 Elasticsearch 클러스터에 활성화되어 있는 경우 "missing role" 오류가 발생할 수 있습니다. "missing role" 오류를 해결하려면 다음의 단계를 수행합니다.

1.    AWS Management Console에 로그인합니다.

2.    Analytics에서 Elasticsearch Service를 선택합니다.

3.    [작업]을 선택합니다.

4.    Modify master user를 선택합니다.

5.    Set IAM ARN as your master user를 선택합니다.

6.    IAM ARN 필드에 Amazon Cognito의 인증된 ARN 역할을 추가합니다.

7.    Submit을 선택합니다.

세분화된 액세스 제어에 대한 자세한 내용은 자습서: IAM 마스터 사용자 및 Amazon Cognito를 참조하세요.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?