NGINX プロキシを使用して VPC の外部から Amazon Cognito 認証で OpenSearch ダッシュボードにアクセスする方法を教えてください。

所要時間3分
0

Amazon OpenSearch Service ドメインを仮想プライベートクラウド (VPC) に配置しています。NGINX プロキシを使用して VPC の外部から Amazon Cognito 認証で OpenSearch ダッシュボードにアクセスしたいです。

簡単な説明

NGINX を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをプロキシサーバーとして設定すると、そのプロキシサーバーが、ブラウザリクエストを Amazon Cognito および OpenSearch ダッシュボードに転送します。

注: 次の解決策は、ネイティブ Amazon Cognito ユーザーにのみ有効です。

SSH トンネルまたはクライアント VPN を使用しても、Amazon Cognito 認証を使用して VPC の外部から OpenSearch ダッシュボードにアクセスできます。詳細については、「Amazon Cognito 認証を使用して VPC の外部から OpenSearch ダッシュボードにアクセスする方法を教えてください」を参照してください。

解決策

重要: VPC 内のユーザーへのアクセスを制限することで、OpenSearch Service ドメインの安全性を向上できます。続行する前に、この解決策が組織のセキュリティ要件と一致していることを確認してください。

Amazon Cognito ユーザープールと ID プールを作成する

次の手順を実行します。

  1. Amazon Cognito ユーザープールを作成します。次の設定を行います。
    [アプリケーションの種類][従来のウェブアプリケーション] を選択します。
    [アプリケーションに名前を付ける] にカスタムアプリケーション名を入力するか、デフォルトの名前をそのまま使用します。
    [サインイン識別子のオプション][ユーザー名] を選択します。
    [サインアップに必要な属性][電子メール] を選択します。

  2. Amazon Cognito コンソールを開きます。

  3. ナビゲーションペインで [ユーザープール] を選択します。

  4. 該当するユーザープールを選択し、次の設定を行います。
    ナビゲーションペインの [ブランディング][マネージドログイン] を選択します。
    [マネージドログインのブランディングが設定されたドメイン][バージョンの更新] を選択します。
    [ブランディングバージョン][ホステッド UI (Classic)] を選択します。

  5. ユーザーとグループを設定します。

  6. Amazon Cognito ID プールを作成します。次の設定を行います。
    [ユーザーアクセス][認証されたアクセス] を選択します。
    [認証された ID ソース]Amazon Cognito ユーザープールを入力します。
    [IAM ロール][新しい IAM ロールを作成] を選択し、ロール名を入力します。
    [ユーザープールの詳細] で該当するユーザープール ID を選択し、[アプリクライアント ID] を選択します。
    [ロール設定][デフォルトの認証されたロールを使用] を選択します。
    [クレームマッピング][非アクティブ] を選択します。

  7. Amazon Cognito 認証を使用するように OpenSearch Service ドメインを設定します。次の設定を行います。
    [Cognito ユーザープール] で該当するユーザープールを選択します。
    [Cognito ID プール] で該当する ID プールを選択します。

  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 マシンイメージ (AMI) に適用されます。別の AMI を使用する場合は、設定を調整する必要がある場合があります。

次の手順を実行します。

  1. OpenSearch Service ドメインが属する VPC のパブリックサブネットで Amazon EC2 インスタンスを起動します。このインスタンスは、ドメインと同じセキュリティグループを使用する必要があります。

  2. (オプション) テスト環境を使用しない場合は、Elastic IP アドレスを割り当てて EC2 インスタンスに関連付けます。

  3. (オプション) テスト環境を使用しない場合は、リクエストをその Elastic IP アドレスに解決するように DNS を設定します。Amazon Route 53 を使用してリクエストを解決する方法の詳細については、「Amazon Route 53 がトラフィックを Amazon EC2 インスタンスにルーティングするように設定する」を参照してください。

  4. インスタンスに接続して NGINX をインストールするには、次のコマンドを実行します。

    sudo yum update
    sudo yum install nginx -y
  5. NGINX に SSL を設定するには、認証機関 (CA) から SSL 証明書を取得します。
    注: テスト環境を使用する場合は、代わりに自己署名証明書を生成してください。サードパーティの認証機関によって署名された 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 に Amazon Cognito ユーザープールのドメインを入力します。
    重要: HTTPS を使用する必要があります。
    お使いの Amazon OpenSearch Service ドメインで OpenSearch Service バージョン 1.0 以降を実行している場合は、
    _dashboards** エンドポイントを使用します。
    Amazon OpenSearch Service ドメインで Elasticsearch バージョン 5.x ~ 7.x を実行している場合は、_plugin/kibana エンドポイントを使用します。

    注: resolver 値は VPC の設定によって変動します。DNS リゾルバーには、プライマリ CIDR ブロックのベース IP アドレスに 2 を加えた値を使用します。たとえば、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.conf
    sudo 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. Amazon Cognito ログインページにリダイレクトする NGINX の IP アドレスまたは DNS 名をブラウザで開きます。
  2. ユーザー名と仮パスワードを入力して OpenSearch ダッシュボードにログインします。
  3. プロンプトが表示された場合は、パスワードを変更してから再度ログインします。
AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ