내용으로 건너뛰기

NGINX 프록시를 사용하여 VPC 외부에서 Amazon Cognito 인증을 통해 OpenSearch 대시보드에 액세스하려면 어떻게 해야 합니까?

5분 분량
0

Amazon OpenSearch Service 도메인이 가상 프라이빗 클라우드(VPC)에 있습니다. NGINX 프록시를 사용하여 VPC 외부에서 Amazon Cognito 인증을 통해 OpenSearch 대시보드에 액세스하려고 합니다.

간략한 설명

NGINX를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 프록시 서버로 구성합니다. 그러면 프록시 서버가 브라우저 요청을 Cognito와 OpenSearch 대시보드에 전달합니다.

참고: 다음 해결 방법은 기본 Cognito 사용자에게만 적용됩니다.

또한 SSH 터널 또는 클라이언트 VPN을 사용하여 Cognito 인증을 통해 VPC 외부에서 OpenSearch 대시보드에 액세스할 수도 있습니다. 자세한 내용은 Amazon Cognito 인증을 사용하여 VPC 외부에서 OpenSearch 대시보드에 액세스하려면 어떻게 해야 합니까?를 참조하십시오.

해결 방법

중요: VPC의 사용자에 대한 액세스를 제한하면 OpenSearch Service 도메인의 보안이 강화됩니다. 계속하기 전에 이 해결 방법이 조직의 보안 요구 사항에 맞는지 확인하십시오.

Cognito 사용자 풀 및 ID 풀 만들기

다음 단계를 완료하십시오.

  1. Cognito 사용자 풀을 만듭니다. 다음 설정을 구성합니다.
    애플리케이션 유형에서 기존 웹 애플리케이션을 선택합니다.
    애플리케이션 이름 지정에 사용자 지정 애플리케이션 이름을 입력하거나 기본 이름을 유지합니다.
    로그인 식별자에 대한 옵션에서 사용자 이름을 선택합니다.
    가입에 필요한 필수 속성에서 이메일을 선택합니다.

  2. Cognito 콘솔을 엽니다.

  3. 탐색 창에서 사용자 풀을 선택합니다.

  4. 사용자 풀을 선택한 후 다음 설정을 구성합니다.
    탐색 창의 브랜딩에서 관리형 로그인을 선택합니다.
    관리형 로그인 브랜딩이 있는 도메인에서 버전 업데이트를 선택합니다.
    브랜딩 버전에서 **호스팅 UI(클래식)**를 선택합니다.

  5. 사용자 및 그룹을 구성합니다.

  6. Cognito ID 풀을 만듭니다. 다음 설정을 구성합니다.
    사용자 액세스에서 인증된 액세스를 선택합니다.
    인증된 보안 인증 정보 소스Amazon Cognito 사용자 풀을 입력합니다.
    IAM 역할에서 새 IAM 역할 생성을 선택한 다음, 역할 이름을 입력합니다.
    사용자 풀 세부 정보에서 사용자 풀 ID를 선택한 다음, 앱 클라이언트 ID를 선택합니다.
    역할 설정에서 기본 인증된 역할 사용을 선택합니다.
    클레임 매핑에서 비활성을 선택합니다.

  7. Cognito 인증을 사용하도록 OpenSearch Service 도메인을 구성합니다. 다음 설정을 구성합니다.
    Cognito 사용자 풀에서 사용자 풀을 선택합니다.
    Cognito 자격 증명 풀에서 자격 증명 풀을 선택합니다.

  8. **도메인 ** 액세스 정책에 다음 액세스 정책을 입력합니다.

    {  "Version": "2012-10-17",  
      "Statement": \[  
        {  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": "arn:aws:iam::account-id:role/service-role/identitypool-role"  
          },  
          "Action": "es:\*",  
          "Resource": "arn:aws:es:region:account-id:domain/domain-name/\*"  
        }  
      \]  
    }

    참고: account-id를 AWS 계정 ID로 바꾸고 identitypool-role을 ID 풀 역할의 이름으로 바꾸십시오. domain-name을 OpenSearch Service 도메인으로 바꾸고 region을 도메인의 AWS 리전으로 바꾸십시오.

NGINX 프록시 구성

참고: 다음 설정은 Amazon Linux 2023의 Amazon Machine Image(AMI)에 적용됩니다. 다른 AMI를 사용하는 경우 설정을 조정해야 할 수 있습니다.

다음 단계를 완료하십시오.

  1. OpenSearch Service 도메인이 있는 VPC의 퍼블릭 서브넷에서 EC2 인스턴스를 시작합니다. 인스턴스는 도메인과 동일한 보안 그룹을 사용해야 합니다.

  2. (선택 사항) 테스트 환경을 사용하지 않는 경우 EC2 인스턴스와 연결할 탄력적 IP 주소를 할당합니다.

  3. (선택 사항) 테스트 환경을 사용하지 않는 경우 탄력적 IP 주소에 대한 요청을 해결하도록 DNS를 구성합니다. Amazon Route 53을 사용하여 요청을 해결하는 방법에 대한 자세한 내용은 Amazon EC2 인스턴스로 트래픽을 라우팅하도록 Amazon Route 53 구성을 참조하십시오.

  4. 다음 명령을 실행하여 인스턴스에 연결하고 NGINX를 설치합니다.

    sudo yum updatesudo yum install nginx -y
  5. 인증 기관(CA)에서 SSL 인증서를 받습니다.
    참고: 테스트 환경을 사용하는 경우 자체 서명 인증서를 대신 생성하십시오. 프로덕션 환경에서는 타사 CA에서 서명한 SSL 인증서를 사용하는 것이 가장 좋습니다.

  6. (선택 사항) 자체 서명 인증서가 있는 테스트 환경을 사용하는 경우 OpenSSL x509 명령을 실행하여 프라이빗 키를 생성합니다.

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt

    자세한 내용은 OpenSSL 웹 사이트에서 x509를 참조하십시오.
    참고: 위 명령은 자체 서명된 SSL 인증서의 프라이빗 키인 cert.key를 생성합니다.

  7. /etc/nginx/conf.d 디렉터리로 이동한 다음, default.conf라는 파일을 만듭니다.

  8. 다음 값을 사용하여 default.conf 파일을 수정합니다.
    /etc/nginx/cert.crt에 SSL 인증서의 경로를 입력합니다.
    /etc/nginx/cert.key에 SSL 인증서에 대해 생성한 프라이빗 키의 경로를 입력합니다.
    my_domain_host에 OpenSearch Service 엔드포인트를 입력합니다.
    my_cognito_host에 Cognito 사용자 풀 도메인을 입력합니다.
    중요: HTTPS를 사용해야 합니다.
    Amazon OpenSearch Service 도메인에서 OpenSearch Service 버전 1.0 이상을 실행하는 경우 _dashboards 엔드포인트를 사용하십시오.
    Amazon OpenSearch Service 도메인에서 Elasticsearch 버전 5.x~7.x를 실행하는 경우에는 _plugin/kibana 엔드포인트를 사용하십시오.

    참고: resolver 값은 VPC 설정에 따라 달라집니다. 프라이머리 CIDR 블록의 기본 IP 주소에 2를 더한 주소에서 DNS 확인자를 사용하십시오. 예를 들어 CIDR 블록 10.0.0.0/24를 사용하여 VPC를 생성하는 경우 DNS 확인자는 10.0.0.2에 위치합니다.

    default.conf 예:

    server {  listen 443 ssl;  server_name host;
      rewrite ^/$ https://host/_dashboards redirect;
      resolver 10.0.0.2 ipv6=off valid=5s;
      set domain_endpoint my_domain_host;
      set cognito_host my_cognito_host;
    
      ssl_certificate           /etc/nginx/cert.crt;
      ssl_certificate_key       /etc/nginx/cert.key;
    
      # ssl on;
      ssl_session_cache  builtin:1000  shared:SSL:10m;
      ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
      ssl_prefer_server_ciphers on;
    
      location ^~ /_dashboards {
    
        # Forward requests to Dashboards
        proxy_pass https://domain_endpoint;
    
        # Handle redirects to Cognito
        proxy_redirect https://cognito_host https://host;
    
        # Handle redirects to Dashboards
        proxy_redirect https://domain_endpoint https://host;
    
        # Update cookie domain and path
        proxy_cookie_domain domain_endpoint host;
        proxy_cookie_path ~*^/$ /_dashboards/;
    
        # Response buffer settings
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
      }
    
      location ~ \/(log|sign|fav|forgot|change|saml|oauth2|confirm) {
    
        # Forward requests to Cognito
        proxy_pass https://cognito_host;
    
        # Handle redirects to Dashboards
        proxy_redirect https://domain_endpoint https://host;
    
        # Handle redirects to Cognito
        proxy_redirect https://cognito_host https://host;
    
        proxy_cookie_domain cognito_host host;
      }
    }
  9. (선택 사항) my_domain_hostmy_cognito_host를 변수로 할당하려면 sed 명령을 실행합니다.

    sudo sed -i 's/my_domain_host/vpc-cognito-private-xxxxxxxxxx.us-east-1.es.amazonaws.com/' /etc/nginx/conf.d/default.confsudo sed -i 's/my_cognito_host/domain-xxxxxxx.auth.us-east-1.amazoncognito.com/' /etc/nginx/conf.d/default.conf

    참고: 위 명령을 실행하면 /etc/nginx/conf.d/default.conf 파일에 있는 my_domain_hostmy_cognito_host를 바꿀 필요가 없습니다.

  10. 다음 명령을 실행하여 NGINX를 활성화하고 시작합니다.

sudo systemctl enable nginx && sudo systemctl start nginx

OpenSearch 대시보드에 액세스

다음 단계를 완료하십시오.

  1. 브라우저를 사용하여 Cognito 로그인 페이지로 리디렉션되는 NGINX IP 주소 또는 DNS 이름을 엽니다.
  2. 사용자 이름과 임시 암호를 입력하여 OpenSearch 대시보드에 로그인합니다.
  3. 메시지가 표시되면 암호를 변경하고 다시 로그인합니다.
댓글 없음