Amplifyを使用してIAM認証されている状態で、ローカル開発環境状のElasticsearchへ接続しようとした際、CORSエラーとなりました。Amplifyでは認証用のいくつかのHTTPヘッダを付与したアクセスを行なっていたため、Elasticsearch側のCORS設定時に、それらのヘッダの許可が必要でした。本記事では、エラーが発生した状況と解決方法を記載しています。Serviceへ接続するWebアプリ(Vue.js)を作りました。ElasticsearchクラスタへはIAM認証によるアクセス制限をかけており、ユーザー認証はCognitoを使用しています。ローカル開発環境しかし、ローカル開発時には、普通はAWSではなくローカルのElasticsearchへ接続したいはずです。そこで、WebアプリコンテナとElasticsearchのコンテナが起動して通信できるようなdocker-composeを構築しました。あとはアプリコンテナからElasticsearchコンテナへ接続すればOK...とはならずCORSで弾かれてしまいました...orz構築概要ローカル開発用のdocker-composeはこんな感じです。Vue.js(Nuxt)のWebアプリコンテナからElasticsearchのコンテナへアクセスできるよう、"container_name"を指定し、同じネットワーク内に配置しています。ちなみに、elasticsearch.ymlを上書きするよう、volumeマウントしています。アクセスする際に、CORSでエラーになってしまいます。Elasticseachの設定ファイル(elasticsearch.yml)に、CORS関連設定の追記が必要そうです。CORSの許可Cross-Originを許可するよう、以下の設定を追記しました。/https?:\\/\\/localhost(:[0-9]+)?/再度トライまだエラーが出ます。エラーの内容が少し変わってます。いうヘッダーがAccess-Control-Allow-Headersで許可されていない、とのこと。ヘッダーは、AWSv4署名されているリクエストに付与されるものです。アクセス時のリクエストヘッダーElasticsearchへのアクセスは、NodejsのSDKを以下のような感じで使っています。いうモジュールを使用して接続しています。これによって、Elasticsearchへアクセスする際に、ブラウザ側で保持している認証情報(Credentials)によって署名したリクエストが送信されます。Cognito認証を通した後のv4署名リクエストでは、以下のヘッダーが付与されるようです。x-amz-security-tokenX-Amz-DateAuthorizationelasticsearch.ymlには、以下の行も追記します。Authorization設定ファイルまとめまとめると、以下の設定でローカル環境にてアクセスできるようになりました。(デフォルトのelasticsearch.ymlの内容も記載しています。