OpenSearch アプリケーション(UI)でブラウザからVPC環境下のOpenSearch Serviceを操作しよう

はじめに
----------
VPC環境下の作成したOpenSearch Serviceドメインのダッシュボードにアクセスする方法は複数ありますが、どの方法も踏み台のEC2が必要だったり、OpenSearch以外のリソース管理や課金が発生していました。

・踏み台にログインしてブラウザアクセス
・SSM/SSH等でポートフォワード
・Client VPN
etc・・・

昨年の11月にリリースされたOpenSearch アプリケーション(UI)を使うことで、OpenSearchダッシュボードと同様にブラウザからGUIベースでクラスターの操作が可能になります。
しかも追加料金不要です。実際に試してみましょう。

OpenSearchアプリケーションの認証方法
-----------
OpenSearchアプリケーションの認証方法として、IAMと IAM Identity Centerをサポートしています。
注意点として、別のリージョンで作成されたIAM Identity Centerはサポートしていません。例えば、組織インスタンスとOpenSearchアプリケーションが異なるリージョンの場合は連携することが出来ません。同一リージョン内にアカウントインスタンスを作成することで回避可能かもしれませんが、未検証です。
今回はIAMユーザーを作成してOpenSearch アプリケーションにログインします。


OpenSearch Serviceドメイン作成
-----------
事前準備として、接続先のOpenSearch ServiceドメインをVPCに作成しておきます。
作成する際にきめ細かなアクセスコントロールの有効化とマスターユーザーとしてIAMユーザーを指定しておきます。

![スクリーンショット 2025-03-03 16.39.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/843a7586-151f-4b41-bd4d-107adc826d15.png)


AWS CLIのバージョン
-------------------
まず、AWS CLIのバージョンを確認しましょう。
CLIのバージョンによっては今回使用するコマンドやオプションがサポートされていない場合もあるため、最新版の使用を推奨しています。

```bash:コマンド:
aws --version
```

結果(例):

     aws-cli/2.24.15 Python/3.12.9 Darwin/24.3.0 exe/x86_64
     

OpenSearchアプリケーション作成
-----------
app-configsオプションのvalueでIAMユーザーのARNを指定します。

```bash:コマンド:
aws opensearch create-application \
 --name opensearch-app \
 --app-configs "
        {
        \"key\":\"opensearchDashboards.dashboardAdmin.users\",
        \"value\":\"arn:aws:iam::xxxxxxxxxxx:user/opensearch_ui\"
        }
    "
```

結果(例):
```
{
    "id": "8y75shjdhb4u5gqf159h",
    "name": "opensearch-app",
    "arn": "arn:aws:opensearch:ap-northeast-1:xxxxxxx:application/8y75shjdhb4u5gqf159h",
    "appConfigs": [
        {
            "key": "opensearchDashboards.dashboardAdmin.users",
            "value": "arn:aws:iam::xxxxxxx:user/opensearch_ui"
        }
    ],
    "createdAt": "2025-03-04T17:21:42.371000+09:00"
}
```

アプリケーションのidを控えておきましょう。

```bash:コマンド:
aws opensearch list-applications --query 'ApplicationSummaries[].id' --output text
```

結果(例):
```
8y75shjdhb4u5gqf159h
```


データソース追加
-----------
data-sourcesオプションでOpenSearchのARNを指定します。
idオプションに先ほど控えておいたアプリケーションのidを指定します。
※create-applicationでOpenSearchアプリケーション作成時にデータソースを追加することができますが、一部機能でデータソースを認識しない挙動を確認しました。原因は不明ですが、update-applicationで追加した場合は再現しないことを確認しています。

```bash:コマンド:
aws opensearch update-application \
      --id 8y75shjdhb4u5gqf159h \
      --data-sources "[{\"dataSourceArn\": \"arn:aws:es:ap-northeast-1:xxxxxxxxx:domain/uitest\"}]"
```

結果(例):
```
{
    "id": "8y75shjdhb4u5gqf159h",
    "name": "opensearch-app",
    "arn": "arn:aws:opensearch:ap-northeast-1:xxxxxxx:application/8y75shjdhb4u5gqf159h",
    "dataSources": [
        {
            "dataSourceArn": "arn:aws:es:ap-northeast-1:xxxxxxxx:domain/uitest"
        }
    ],
    "appConfigs": [
        {
            "key": "opensearchDashboards.dashboardAdmin.users",
            "value": "arn:aws:iam::xxxxxxxxxx:user/opensearch_ui"
        }
    ],
    "createdAt": "2025-03-04T17:21:42.371000+09:00",
    "lastUpdatedAt": "2025-03-04T17:22:21.507000+09:00"
}

```




VPCエンドポイントアクセスの承認
-----------
OpenSearchドメインにVPCアクセスするプリンシパルを登録します。
ここではOpenSearchアプリケーションを認可するプリンシパルとして登録します。

```bash:コマンド:
aws opensearch authorize-vpc-endpoint-access \
 --domain-name uitest \
 --service application.opensearchservice.amazonaws.com \
 --region ap-northeast-1
```

結果(例):
```
{
    "AuthorizedPrincipal": {
        "PrincipalType": "AWS Service",
        "Principal": "application.opensearchservice.amazonaws.com"
    }
}
```

これで接続の準備が整いました。


OpenSearchアプリケーションにログイン
-----------
マスターユーザーに指定したIAMユーザーでOpenSearchアプリケーションにログインしてみましょう

![スクリーンショット 2025-03-04 16.43.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/7164b419-a56b-4b1a-aac9-624fd57fcc6c.png)

ログインできました。
![スクリーンショット 2025-03-04 16.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/d8dd673b-08a7-4a74-a64e-a7adef5785ca.png)


動作確認
-----------
簡単なクエリを叩いてOpenSearchドメインへの接続に問題がないか確認してみます。
ログイン画面左下の「Dev Tools」をクリックします。
![スクリーンショット 2025-03-04 16.59.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/7b5baac4-3567-4623-a23b-2086a49bc3ff.png)

クエリも実行できています。
![スクリーンショット 2025-03-04 17.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/50874e7f-5c29-4b3d-81d7-6e214e89c01a.png)


続いて、画面左下の[Data administration]をクリックします。
![スクリーンショット 2025-03-04 17.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/28be7eaf-950b-45b2-9604-4f155a15501a.png)

Indexの確認、ユーザー権限管理といったドメイン管理に必要な操作が可能です。
![スクリーンショット 2025-03-04 17.44.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193020/ec4c22a1-7d98-4825-a541-dff632bb8b6f.png)


さいごに
-----------
追加料金なしで気軽にダッシュボード操作可能になったのは嬉しいですね。
クエリの発行も可能なのでローカルのダッシュボードの代替としても十分に思いました。今回はCLIで操作しましたが、マネジメントコンソールでの追加作業も比較的容易でした。
本来はワークスペース上で提供されるオブザービリティやセキュリティ分析機能がメインの機能とされているようなので、別の機会で触れてみたいと思います。