Amazon Cognito 認証を使用して、NGINX プロキシで VPC の外部から OpenSearch Dashboards にアクセスするにはどうすればよいですか?

所要時間3分
0

Amazon OpenSearch Service クラスターは仮想プライベートクラウド (VPC) にあります。Amazon Cognito 認証を使用して、NGINX プロキシで VPC の外部から OpenSearch Dashboards にアクセスしたいと考えています。これを行うにはどうすればよいですか?

簡単な説明

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

注意:このソリューションは、ネイティブ Amazon Cognito ユーザーのみに有効です。

Amazon Cognito 認証で VPC の外部から OpenSearch Dashboards にアクセスするために、SSH トンネルまたはクライアント VPNを使用することもできます。詳細については、「Amazon Cognito 認証を使用して VPC 外部から OpenSearch Dashboards にアクセスするにはどうすればよいですか?」を参照してください。

解決方法

重要: アクセスを VPC のユーザーに制限すると、OpenSearch Service ドメインがより安全になります。続行する前に、必ずこの手順が組織のセキュリティ要件に違反しないことを確認してください。

1.    Amazon Cognito のユーザープールを作成します

2.    ホストされたユーザープールドメインを設定します

3.    Amazon Cognito コンソールのナビゲーションペインで、ユーザーとグループを選択します。

4.    [Create user] を選択し、フィールドに入力します。E メールアドレスを入力して [Mark email as verified] チェックボックスをオンにしていることを確認します。

5.    [Groups] タブを選択し、[Create group] を選択します。[Precedence] について、0 を入力します。詳細については、「AWS マネジメントコンソールでの新しいグループの作成」を参照してください。

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

7.    [Manage Identity Pools] を選択し、続いて [Create new identity pool] を選択します。

8.    ID プールの名前を入力し、[Enable access to unauthenticated identities] チェックボックスをオンにしてから、[Create Pool] を選択します。

9.    プロンプトが表示されたら、AWS リソースにアクセスし、[許可] を選択して ID プールに関連付けられた 2 つのデフォルトロールを作成します。認証されていないユーザー用にデフォルトのロールを 1 つ作成してから、認証されたユーザー用に別のデフォルトのロールを作成します。

10.    OpenSearch ダッシュボードに Amazon Cognito 認証を使用するように OpenSearch Service ドメインを設定しますCognito ユーザープールでは、作成したユーザープールを選択します。[Cognito Identity Pool] (Cognito アイデンティティプール) を選択し、作成したアイデンティティプールを選択します。詳細については、「Get started with OpenSearch Service: Use Amazon Cognito for OpenSearch Dashboards access control」(OpenSearch Service の使用を開始する: OpenSearch Dashboards のアクセスコントロールに Amazon Cognito を使用する) を参照してください。

11.    次のようなリソースベースのポリシーになるようにアクセスポリシーを設定します:

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

これらの値を更新する必要があります。
account-id: AWS アカウント ID
identity-name: Amazon Cognito アイデンティティプールの名前
domain-name: OpenSearch Service ドメインの名前
region: us-east-1 など、OpenSearch Service ドメインが存在するリージョン

注意:この例の設定は Amazon Linux 2 AMI に適用されます。別の AMI を使用している場合、特定の設定の調整が必要になる場合があります。

12.    OpenSearch Service ドメインの同じ VPC のパブリックサブネット内に EC2 インスタンスを起動します。インスタンスがドメインと同じセキュリティグループを使用することを確認してください。

13.    (オプション) テスト環境を使用していない場合は、Elastic IP アドレスを割り当て、作成したインスタンスに関連付けます。Elastic IP アドレスの割り当ての詳細については、「Elastic IP アドレスの操作」を参照してください。

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

15.    インスタンスに接続してから、NGINX をインストールします。

Amazon Linux 2 AMI で起動されたインスタンスの場合、次のコマンドを使用します。

$ sudo amazon-linux-extras install nginx1

16.    認証機関 (CA) から SSL 証明書を取得し、NGINX の SSL を設定します。

注意: テスト環境を使用している場合は、代わりに自己署名証明書を生成します。運用環境では、サードパーティ認証局によって署名された SSL 証明書のみを使用するのがベストプラクティスであることに注意してください。

17.    (オプション) 自己署名証明書でテスト環境を使用している場合は、OpenSSL x509 コマンドを使用してプライベートキーを生成します。

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

このコマンド構文は、自己署名 SSL 証明書のプライベートキーである cert.key を生成します。

18.    /etc/nginx/conf.d ディレクトリに移動し、default.confという名前のファイルを作成します。ファイルを次の値で変更します: /etc/nginx/cert.crt: SSL 証明書へのパス /etc/nginx/cert.key: SSL 証明書用に生成したプライベートキーへのパス my_domain_host: OpenSearch Service エンドポイント my_cognito_host: (ステップ 2 で設定した) Amazon Cognito ユーザープールドメイン。

default.conf ファイルで直接置換する代わりに、sed コマンドを使用して、my_cognito_host および my_domain_host を変数として割り当てることができます。また、必ず 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 に配置されます。

server {
  listen 443;
  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;
  }
}

19.    (オプション) sed コマンドを使用して、my_domain_host および my_cognito_host 変数を割り当てます。

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/dean-kumo-xxxxxxx.auth.us-east-1.amazoncognito.com/' /etc/nginx/conf.d/default.conf

注: /etc/nginx/conf.d/default.conf ファイルの my_domain_host および my_cognito_host を置き換える必要はありません。

20.    このコマンドを使用して NGINX を再起動します。

$ sudo systemctl restart nginx.service

21.    ブラウザを使用して NGINX IP または DNS 名にアクセスします。Amazon Cognito ログイン ページにリダイレクトされます。

22.    Dashboards にログインするには、ユーザー名と一時パスワードを入力します。その後、プロンプトが表示されたらパスワードを変更し、再度ログインします。


関連情報

プロキシを使用してDashboards から OpenSearch Service にアクセスする

OpenSearch Dashboards での Amazon Cognito 認証に関する問題をトラブルシューティングするにはどうすればよいですか?

Amazon OpenSearch Service クラスターにアクセスしようとすると、「ユーザー: 匿名は認証されていません」というエラーが表示されます

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ