こんにちは、Elastic認定資格3種(※)を保持しているノムラです。
※Elastic社の公式認定資格(Elastic Certified Engineer / Elastic Certified Analyst / Elastic Certified Observability Engineer)
皆さんはElastic Cloudを利用されたことはあるでしょうか?
Elastic CloudはElastic社が提供しているSaaSサービスで、クラウドプロバイダはAWS、Azure、GCPをサポートしています。
最新バージョンのクラスタ構築や、既存クラスタのバージョンアップを数クリックで実施できるため、導入がお手軽です。
しかし実際に利用するとなると アクセス制限やCognito連携など、考慮すべきことが多くあります。
意外にハマりどころが多い所だと思うので、手順や注意事項などをまとめてみました。
AWSでElasticsearch(Elastic Cloud)を使う時のポイントの記事一覧は以下です。
①運用編1
acro-engineer.hatenablog.com
②運用編2
<運用編2 近日公開予定!!>
本記事ではAWS Marketplaceを利用してクラスタを構築し、その後Security設定/認証設定を実施する手順を紹介します。
Azure上でElastic Cloudの構築、Security設定/認証設定を行いたい方はこちらの記事を是非ご覧ください。
acro-engineer.hatenablog.com
はじめに
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」から新規メールアドレスを利用しアカウントを作成します。
ログイン成功後の画面は以下です。
Marketplaceでの導入手順
1つ目のSTEPとして、AWS Marketplace経由でElatic Cloudを構築していきます。
(1) AWS MarketplaceのElatic Cloudのページにアクセスし、「View purchase options」を押下
(2) 購入画面の「Subscribe」を押下
押下すると画面上部に以下のような案内が表示されるため、「Set up your account」を押下します。
(3) 画面に表示されるSTEPに従って各種設定を実施
STEP2では先程作成したElastic Cloudアカウントを紐づけます。
紐づけに成功すると以下のように表示されます。
STEP3ではCloudFormation経由でElastic Cloudをデプロイすることができます。
その際予めCloudFormationが構築に利用するロールを作成しておく必要がある点に注意してください。
必要なポリシーは画面の「View required IAM permission」で確認可能です。
CloudFormationのスタック名、作成するDeploymentの名前、構築するRegion、CloudFormationが構築時に利用するロール名を設定することでDeploymentがAWS上に構築されます。
以下のように「CREATE_COMPLETE」と表示されれば構築成功です。
STEP4で「Launch software」を押下することで、Elatic Cloudコンソールから作成されたDeploymentが確認可能です。
(4) DeployしたKibanaにログイン確認する
無事作成されたDeploymentのKibanaにログインできました。
URLは「https://<Deployment名>.kb.us-east-2.aws.elastic-cloud.com/app/home」のように作成されたDeployment名が付与されます。
2. Security強化(IPフィルタリング設定)
次のステップとして構築したDeploymentにIPフィルタリングを設定していきます。
IPフィルタリングで出来ること/メリット
IPフィルタリングを設定することで、Deployment(Elasticsearch、Kibana)へのアクセス制限が可能となります。
詳細については以下のブログを参照ください。
www.elastic.co
では実際に設定してみましょう。
IPフィルタリング設定方法
(1) 作成したDeploymentの管理画面から「Features」を押下
(2) 「Add traffic filters」を押下し、「Create filter」を押下
(3) IPアドレス等の条件を入力後、「Create filter」を押下
作成に成功すると以下のように作成されたIPフィルタリングの定義が表示されます。
(4) DeploymentのSecurity設定画面の「Apply filter」を押下し、作成したルールをDeploymentに適用
作成した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作成画面を開きます
(3) Filter typeで[Private link endpoint]を選択し、Endpoint IDに(1)で作成したEndpoint IDを入力し「Create filter」を押下
(4) IPフィルタリングと同様に作成したルールをDeploymentに適用
IPフィルタリングとPrivate Linkの2つのSecurity設定が適用されました
4. KibanaにCognito認証を追加
ElasticsearchはOIDC(OpenID Connect)による認証が可能です。
OIDC連携による認証のメリットはユーザ管理を1つのサービスに集約可能なため管理/運用が容易になります。
そこで最後にKibanaにCognito認証を追加しましょう。
CognitoによるKibana認証設定方法
OIDC認証の設定は以下の手順が必要です。詳細は公式ドキュメントを参照ください。
www.elastic.co
上記のうち 1.と2. はElastic Cloudではデフォルトで設定済みのため、今回は3. のOIDC認証の設定からになります。
(1) AWS Cognitoのユーザープールを作成し、ユーザを登録する
今回OP(OpenID Provider)とRP(Relying Party)は両方Cognitoを利用します。
Cognito自体の設定/構築方法は本記事では割愛します。
1点注意点として、OIDC認証設定に必要なためRP側でクライアントのシークレットを作成してください。
(2) 作成したDeploymentの管理画面から「Security」を押下
(3) Elasticsearch keystoreの「Add settings」を押下
(4) Setting nameに「xpack.security.authc.realms.oidc.oidc1.rp.client_secret」を入力、Secretに(1)で作成したクライアントのシークレットを入力する
(5) 「Save」を押下し、クライアントのシークレットをElasticsearch keystoreに登録する
(6) 作成したDeploymentの管理画面から「Edit」を押下
(7) Elasticsearch右側のリンク「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に設定を適用
(10) Kibana画面左側メニューの「Stack management」を押下し、その後「Role mappings」を押下
Role mappingsを定義することで、Cogniito(OIDC)で認証されたユーザに対してKibana操作権限の設定が可能です。
(11) 「Create role mapping」を押下し、OIDCのアカウントに権限を紐づける
以下の通り、OIDC経由でログインしたユーザの権限を設定していきます
Kibanaへのログイン
設定後、ユーザ登録したメールアドレスとパスワードでログインが可能です。
まとめ
Elastic Cloudは構築が容易なだけでなく、その後のSecurity設定/認証設定も容易です。
Elasticsearchをご利用の際は是非Elastic Cloudを検討してみてください。
Acroquest Technologyでは、キャリア採用を行っています。
- Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- マイクロサービス、DevOps、最新のOSSやクラウドサービスを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。