ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

AWS OpenSearch Dashboards に Google 認証でログインする方法

Amazon OpenSearch Service から作成した
AWS OpenSearch Dashboards に、Google 認証(Google Workspace を用いた SAML認証)でログインできるようにする方法を解説します。

1. Amazon OpenSearch Service のドメイン作成

まずはテスト用に適当に作成します。
カスタムエンドポイントを有効化する場合は、 Route 53 で CNAME 設定を入れることを忘れないようにします。(忘れてちょっとハマった)

カスタムエンドポイントを使用する場合の参考記事: https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/customendpoint.html

f:id:nekonenene:20211112215726p:plain

f:id:nekonenene:20211112215759p:plain

f:id:nekonenene:20211112220148p:plain

f:id:nekonenene:20211112220220p:plain

デフォルト設定から以上のような箇所を変更して作成しました。

作成後、画面上部に以下のようなメッセージが表示されます。
SAML設定をあとからおこなうのですが、このドメインの設定には時間がかかるので、その間に Google 側の設定を始めます。

f:id:nekonenene:20211112220351p:plain
SAML設定はあとからおこなう

2. Google 側の設定 その1

まず前提として、 Google Admin に入れる権限が必要です。
Google Workspace の管理者権限がない場合には付与してもらってください。

まず、ウェブアプリとモバイルアプリ のページから
「アプリを追加」>「カスタムSAMLアプリの追加」をおこないます。

f:id:nekonenene:20211112221937p:plain
カスタムSAMLアプリの追加

f:id:nekonenene:20211112221905p:plain

アプリの詳細をわかりやすいように設定した後、
次の画面で IdP メタデータをダウンロードできます。これはあとで使います。

なお、SAML アプリケーションに対するシングル サインオン(SSO)の設定 からもダウンロードできます。

続いて、サービスプロバイダの詳細を設定する画面に進みます。
ACS の URL」および「エンティティ ID」の入力を求められますが、
これは AWS 側の OpenSearch Service のドメイン作成が終わっている必要があるので、それを待ちます。

3. AWS OpenSearch Service の設定更新

AWS 側の OpenSearch Service のドメイン作成が終わっていたら、
ドメインの「セキュリティ設定の編集」に進みます。

f:id:nekonenene:20211112222608p:plain

再び「SAML 認証を有効化」のチェックをONにして、設定していきます。

ここの「サービスプロバイダーエンティティ ID」と「SP によって開始された SSO URL」は、このあとの 4. の工程で使います。

f:id:nekonenene:20211112223402p:plain
IdP メタデータをインポート

さて、「XMLファイルからインポート」のボタンから
2. の工程のときにダウンロードした IdP メタデータをアップロードします。

その後、その下の「SAML マスターユーザーネーム」の箇所に、
管理者として使いたい Google Workspace のメールアドレスを指定してあげてください。

アクセスポリシー」については、最初の作成時に誰もアクセスできないような設定で作っていたので、
誰でもアクセスできるように今度は変更します。

f:id:nekonenene:20211112224331p:plain
アクセスポリシーの変更

そうしたら「変更の保存」を押して完了です。

4. Google 側の設定 その2

ACS の URL」には、「SP によって開始された SSO URL」を設定します。
これが認証後のリダイレクト先です。 (例: https://search-opensearch-test-hogehoge.ap-northeast-1.es.amazonaws.com/dashboards/opendistro/_security/saml/acs

「エンティティID」には「サービスプロバイダーエンティティ ID」を設定します。
(例: https://search-opensearch-test-hogehoge.ap-northeast-1.es.amazonaws.com/dashboards/opendistro/_security/saml/acs

結果として、以下のようになります。

f:id:nekonenene:20211112233132p:plain
サービスプロバイダの詳細の設定

属性のマッピングは特に設定せず完了させます。

完了すると、以下のような画面になります。

f:id:nekonenene:20211112223835p:plain

この状態のままだと、まだユーザーアクセスが「オフ」になっていて誰もログインできないので、
ユーザーアクセス」の箇所をクリックして、
このアカウントのすべてのユーザー、もしくはユーザーグループ単位でアクセスを許可します。(「オン」にします)

5. ダッシュボードへのアクセス

ダッシュボード(OpenSearch Dashboards の URL)にアクセスしてみましょう。 (例: https://search-opensearch-test-hogehoge.ap-northeast-1.es.amazonaws.com/_dashboards

どの Google アカウントでログインするか選択する画面になるので、
3. の「SAML マスターユーザーネーム」で設定したメールアドレスを選択して、次の画面に進みます。

認証が許可されていない場合は以下のような 403 ページが表示されます。

もし、2. の「ユーザーアクセス」の設定を変更しているはずなのに表示される場合、
もう少し待ってから再度アクセスしてみてください。(GoogleSAML 設定が反映されるまでは数分かかるため。最長24時間かかると書かれていますが、さすがにそんなにはかからないはず)
それでもダメなら、4. の「ユーザーアクセス」の設定や「エンティティID」の設定が失敗していないか再度確認してみてください。

f:id:nekonenene:20211112224637p:plain

無事成功すると、Dashboard のトップ画面に進みます! おめでとうございます!

f:id:nekonenene:20211112233422p:plain
OpenSearch Dashboards へのログインが成功しました

6. ユーザーの招待

4. でユーザーアクセスを許可した人たちが Google ログインできるようになりましたが、
OpenSearch Dashboards のアカウントはまだ作られていないので、
3. で設定した「SAML マスターユーザーネーム」のメールアドレス以外でログインすると
Missing Role のエラーが表示されます。

f:id:nekonenene:20211112234437p:plain
OpenSearch Missing Role

SAML マスターユーザーネーム」のメールアドレスでログインした
管理者が、他のユーザーの登録をおこなっておく必要があります。

Amazon OpenSearch Service のきめ細かなアクセスコントロール - Amazon OpenSearch Service
のページを参照してください。

メニューから Security > Roles に進んで、その画面から例えば「all_access」のロールに対してユーザーをアサインします。

f:id:nekonenene:20211112235622p:plain
Security > Roles

ロールを選んで「Manage mapping」ボタンを押します。

f:id:nekonenene:20211112235758p:plain
Manage mapping

「Map user」の画面に進んだら、
権限を与えたいユーザーのメールアドレスを入力し、「Map」ボタンを押して保存します。

f:id:nekonenene:20211113000023p:plain
Map user の画面でメールアドレスを登録

なお、 Missing Role の画面からは Cookie などをいじらない限りログアウトできないという罠があるので、
もし他の Google アカウントでのログインを自身が試す場合は、
ログアウトせずに別の Web ブラウザから、他のアカウントを使ったログインを試すと良いです。

7. おわりに

公式ドキュメントには Okta を用いた SAML認証しか解説しておらず、
情報がなくてとってもとっても苦労したので、この記事を作成しました。

手順としてはそこまで複雑でないことが伝わったかと思います。
お役に立てましたら幸いです。