Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

AWSでElastic Cloudを利用する 2024年版(構築編)

こんにちは、Elastic認定資格3種(※)を保持しているノムラです。
※Elastic社の公式認定資格(Elastic Certified Engineer / Elastic Certified Analyst / Elastic Certified Observability Engineer)

皆さんはElastic Cloudを利用されたことはあるでしょうか?
Elastic CloudはElastic社が提供しているSaaSサービスで、クラウドプロバイダはAWS、Azure、GCPをサポートしています。
最新バージョンのクラスタ構築や、既存クラスタのバージョンアップを数クリックで実施できるため、導入がお手軽です。

しかし実際に利用するとなると アクセス制限やCognito連携など、考慮すべきことが多くあります。
意外にハマりどころが多い所だと思うので、手順や注意事項などをまとめてみました。

本記事ではAWS Marketplaceを利用してクラスタを構築し、その後Security設定/認証設定を実施する手順を紹介します。

はじめに
1. Marketplace経由で構築
2. Security強化(IPフィルタリング設定)
3. Security強化(Private Link設定)
4. KibanaにCognito認証を追加
まとめ

はじめに

以下本記事ではElastic Cloud(Elasticsearch Service)の名称を統一して「Elastic Cloud」で記載します。

AWSでElastic Cloudを構築するステップ

AWS Marketplaceを利用することで以下の4つのステップでAWS上にElastic Cloudを構築することが可能です。

  1. Marketplace経由で構築
  2. Security強化(IPフィルタリング設定)
  3. Security強化(Private Link設定)
  4. KibanaにCognito認証を追加

構成イメージは下図です

構成イメージ

以下それぞれのステップについて構築/設定方法を解説していきます。

1. Marketplace経由で構築

Elastic Cloudのアカウント作成

最初に注意点として、既存のElastic CloudのアカウントをAWS MarketplaceのElastic Cloudに紐づけて利用することはできません。ご注意ください。
そのため今回はこちらの「Sign up with email」から新規メールアドレスを利用しアカウントを作成します。

Elastic Cloudアカウント登録画面

ログイン成功後の画面は以下です。

ログイン成功後の画面

Marketplaceでの導入手順

1つ目のSTEPとして、AWS Marketplace経由でElatic Cloudを構築していきます。

(1) AWS MarketplaceのElatic Cloudのページにアクセスし、「View purchase options」を押下

aws.amazon.com

View purchase optionsを押下
(2) 購入画面の「Subscribe」を押下
Subscribeを押下

押下すると画面上部に以下のような案内が表示されるため、「Set up your account」を押下します。

画面上部のSet up your accountを押下
(3) 画面に表示されるSTEPに従って各種設定を実施

STEP2では先程作成したElastic Cloudアカウントを紐づけます。

Elastic Cloudアカウントを紐づける

紐づけに成功すると以下のように表示されます。

Elastic Cloudアカウント紐づけ成功後

STEP3ではCloudFormation経由でElastic Cloudをデプロイすることができます。
その際予めCloudFormationが構築に利用するロールを作成しておく必要がある点に注意してください。
必要なポリシーは画面の「View required IAM permission」で確認可能です。

CloudFormation経由でDeploymentを構築する

CloudFormationのスタック名、作成するDeploymentの名前、構築するRegion、CloudFormationが構築時に利用するロール名を設定することでDeploymentがAWS上に構築されます。

CloudFormation経由でDeploymentを構築する

以下のように「CREATE_COMPLETE」と表示されれば構築成功です。

構築成功

STEP4で「Launch software」を押下することで、Elatic Cloudコンソールから作成されたDeploymentが確認可能です。

Launch softwareを押下
作成されたDeployment
(4) DeployしたKibanaにログイン確認する

無事作成されたDeploymentのKibanaにログインできました。
URLは「https://<Deployment名>.kb.us-east-2.aws.elastic-cloud.com/app/home」のように作成されたDeployment名が付与されます。

Kibanaログイン成功

2. Security強化(IPフィルタリング設定)

次のステップとして構築したDeploymentにIPフィルタリングを設定していきます。

IPフィルタリングで出来ること/メリット

IPフィルタリングを設定することで、Deployment(Elasticsearch、Kibana)へのアクセス制限が可能となります。
詳細については以下のブログを参照ください。
www.elastic.co

では実際に設定してみましょう。

IPフィルタリング設定方法

(1) 作成したDeploymentの管理画面から「Features」を押下
Featuresを押下
(2) 「Add traffic filters」を押下し、「Create filter」を押下
Add traffic filtersを押下
Create filterを押下
(3) IPアドレス等の条件を入力後、「Create filter」を押下

作成に成功すると以下のように作成されたIPフィルタリングの定義が表示されます。

作成されたIPフィルタリング定義
(4) DeploymentのSecurity設定画面の「Apply filter」を押下し、作成したルールをDeploymentに適用
Apply filterを押下

作成したIPフィルタリングの定義を適用します。

作成したIPフィルタリングの定義を適用する

以上でElastic Cloud上に構築したDeploymentにIPフィルタリングの定義を適用することができます。

3. Security強化(Private Link設定)

続いてPrivate Linkも設定していきましょう。
Private Linkを設定しVPC同士を接続することで、インターネットを経由しない通信となりセキュアにすることが可能です。

Private Link設定方法

(1) AWSのEndpointを作成

作成方法については以下を参照ください
docs.aws.amazon.com

(2) 「Add traffic filters」を押下し、「Create filter」を押下

IPフィルタリングの時と同様にfilter作成画面を開きます

Filter typeを選択し、Endpoint IDを入力する
(4) IPフィルタリングと同様に作成したルールをDeploymentに適用

IPフィルタリングとPrivate Linkの2つのSecurity設定が適用されました

filter適用後画面

4. KibanaにCognito認証を追加

ElasticsearchはOIDC(OpenID Connect)による認証が可能です。
OIDC連携による認証のメリットはユーザ管理を1つのサービスに集約可能なため管理/運用が容易になります。

そこで最後にKibanaにCognito認証を追加しましょう。

CognitoによるKibana認証設定方法

OIDC認証の設定は以下の手順が必要です。詳細は公式ドキュメントを参照ください。
www.elastic.co

  1. SSL/TLSの設定
  2. Token Serviceの有効化
  3. OIDC認証の設定
  4. role mapping (Kibana操作権限の設定)

上記のうち 1.と2. はElastic Cloudではデフォルトで設定済みのため、今回は3. のOIDC認証の設定からになります。

(1) AWS Cognitoのユーザープールを作成し、ユーザを登録する

今回OP(OpenID Provider)とRP(Relying Party)は両方Cognitoを利用します。

Cognito自体の設定/構築方法は本記事では割愛します。
1点注意点として、OIDC認証設定に必要なためRP側でクライアントのシークレットを作成してください。

クライアントのシークレットを作成する
(2) 作成したDeploymentの管理画面から「Security」を押下
Securityを押下
(3) Elasticsearch keystoreの「Add settings」を押下
Add Settingsを押下
(4) Setting nameに「xpack.security.authc.realms.oidc.oidc1.rp.client_secret」を入力、Secretに(1)で作成したクライアントのシークレットを入力する
クライアントのシークレットの値を入力
(5) 「Save」を押下し、クライアントのシークレットをElasticsearch keystoreに登録する
クライアントのシークレットをElasticsearch keystoreに登録する
(6) 作成したDeploymentの管理画面から「Edit」を押下
Editを押下
(7) Elasticsearch右側のリンク「Manage user settings and extensions」を押下
Manage user settings and extensionsを押下
(8) ElasticsearchにOIDC設定を適用

設定内容は以下

xpack:​
  security:​
    authc:​
      realms:​
        oidc:​
          oidc1:​
            order: 2​
            rp.client_id: "<RPクライアントID>"​
            rp.response_type: code​
            rp.redirect_uri: https://<Kibana URL>/api/security/oidc/callback
            op.issuer: https://cognito-idp.<リージョン名>.amazonaws.com/<OPユーザプールID>​
            op.authorization_endpoint: https://<OPドメイン>/oauth2/authorize​
            op.token_endpoint: https://<OPドメイン>/oauth2/token​
            op.userinfo_endpoint: https://<OPドメイン>/oauth2/userInfo​
            op.jwkset_path: "https://cognito-idp.<リージョン名>.amazonaws.com/<OPユーザプールID>/.well-known/jwks.json"​
            claims.principal: sub
(9) 画面下の「Save」を押下しElasticsearchに設定を適用
Saveを押下
(10) Kibana画面左側メニューの「Stack management」を押下し、その後「Role mappings」を押下

Role mappingsを定義することで、Cogniito(OIDC)で認証されたユーザに対してKibana操作権限の設定が可能です。

Role mappingsを押下
(11) 「Create role mapping」を押下し、OIDCのアカウントに権限を紐づける
Role Mapping画面でCreate role mappingを押下

以下の通り、OIDC経由でログインしたユーザの権限を設定していきます

OIDC経由でログインしたユーザの権限を設定する

Kibanaへのログイン

設定後、ユーザ登録したメールアドレスとパスワードでログインが可能です。

ログイン後画面

まとめ

Elastic Cloudは構築が容易なだけでなく、その後のSecurity設定/認証設定も容易です。
Elasticsearchをご利用の際は是非Elastic Cloudを検討してみてください。

Acroquest Technologyでは、キャリア採用を行っています。

  • Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com