Amazon OpenSearch Serverlessについて試してみた

# 背景・目的
以前の記事で OpenSearch Serverless の基本について整理しました。今回は、その内容をさらに深掘りし、実際の動作を簡単に確認してみます。

https://qiita.com/zumax/items/d005dce95f7730220bc5


# まとめ
下記に特徴を整理します

|特徴|説明|
|:--|:--|
|コレクション|コレクションは、特定のワークロードまたはユースケースをサポートするために連携する OpenSearch インデックスのグループ|
|データアクセスポリシーの役割|・データアクセスポリシーは、コレクションやインデックスへのアクセス権限を管理するためのもの<BR><BR>・特定のユーザーやグループに対して、どのデータにどのような操作（読み取り、書き込み、削除など）が許可されるかを定義できる|
|アクセス制御の適用範囲|・データアクセスポリシーは、コレクションやインデックスに対して適用される<BR><BR>・特定のパターンに一致するコレクションやインデックスに対して、自動的にアクセス許可を割り当てることが可能<BR><BR>・これにより、大規模なコレクションを効率的に管理できる|

# 概要
## Amazon OpenSearch Serverless のデータアクセスコントロール

下記を基に整理します。

https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/serverless-data-access.html

> Amazon OpenSearch Serverless のデータアクセスコントロールを使用すると、アクセスメカニズムやネットワークソースに関係なく、ユーザーがコレクションやインデックスにアクセスできるようにすることができます。IAM ロールと SAML アイデンティティへのアクセスを提供できます。

> アクセス許可は、コレクションとインデックスリソースに適用されるデータアクセスポリシーを通じて管理します。データアクセスポリシーは、特定のパターンに一致するコレクションとインデックスにアクセス許可を自動的に割り当てることにより、大規模なコレクションを管理するのに役立ちます。1 つのリソースに複数のデータアクセスポリシーを適用できます。OpenSearch Dashboards URL にアクセスするには、コレクションのデータアクセスポリシーが必要になります。

- データアクセスポリシーの役割
    - データアクセスポリシーは、コレクションやインデックスへのアクセス権限を管理するためのもの
    - 特定のユーザーやグループに対して、どのデータにどのような操作（読み取り、書き込み、削除など）が許可されるかを定義できる
- アクセス制御の適用範囲
    - データアクセスポリシーは、コレクションやインデックスに対して適用される
    - 特定のパターンに一致するコレクションやインデックスに対して、自動的にアクセス許可を割り当てることが可能
    - これにより、大規模なコレクションを効率的に管理できる



# 実践

下記を基に試します。


https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/serverless-getting-started.html

1. AWSにサインインします

## ステップ 1: アクセス許可を設定する
1. IAMに移動します
1. ナビゲーションペインで「ロール」をクリックします
1. 使用するIAMロールを選択します
1. 許可ポリシーで、「インラインポリシーを作成」をクリックします
1. 下記のポリシーを貼り付けて、「次へ」をクリックします
    ```json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "aoss:CreateCollection",
            "aoss:ListCollections",
            "aoss:BatchGetCollection",
            "aoss:DeleteCollection",
            "aoss:CreateAccessPolicy",
            "aoss:ListAccessPolicies",
            "aoss:UpdateAccessPolicy",
            "aoss:CreateSecurityPolicy",
            "aoss:GetSecurityPolicy",
            "aoss:UpdateSecurityPolicy",
            "iam:ListUsers",
            "iam:ListRoles"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }
    ```
1. ポリシー名を入力し、「ポリシーの作成」をクリックします


## ステップ 2: コレクションを作成する
1. OpenSearch Serviceに移動します
1. ナビゲーションペインで、ダッシュボードに移動します
1. 「コレクションを作成」をクリックします
1. 下記を入力します
    - コレクション名：任意の名前
    - コレクションタイプ：検索
    - デプロイタプ：アクティブレプリカを有効化を外す（テスト用なので外しています）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a31474cb-bfc5-0371-ae90-a155bf72e77a.png)
1. セキュリティで「標準作成」を選択します
1. 下記を指定し、「次へ」をクリックします
    - 暗号化
        - AWS所有キー
    - NWアクセスの設定
        - アクセスタイプ：パブリック
        - リソースタイプ：両方をチェック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8eb7cf7c-e7e3-9301-85d5-62b2877071a4.png)

1. データアクセスの設定では、「スキップして後で設定する」をクリックします
1. 確認し「送信」をクリックします

### データアクセス管理
1. 「データアクセスを管理」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2cb6ed3c-6fb7-fac2-0843-e97386840037.png)

1. 「アクセスポリシーを作成」をクリックします
1. 下記を入力し、「作成」をクリックします
    - アクセスポリシー名:任意
    - ルール名：任意
    - プリンシパルを選択：IAMユーザとロール
        - アクセスするロールを指定
    - リソースと許可を付与：
        - 作成したcollectionとポリシー
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1860233d-0d28-e400-4228-7fe8510cf833.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/236cd154-f2ec-8fca-8ed8-0d60b12c86a0.png)


## ステップ 3: データをアップロードして検索する
1. 作成したコレクションを選択します
1. 「OpenSearchダッシュボード」をクリックします
1. 別タブで下記の画面が開くので、「Explore on my oqn」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e4104e58-a034-5fca-eef3-bb13f2851161.png" width=300 />

1. 下記の画面が表示されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fd53692a-348d-1b9c-6fc6-2a53f025d2a1.png)

1. ナビゲーションペインの「Dev Tools」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/95a3cff0-e81e-d594-ddbb-603a7b86bded.png" width =300 />

1. 下記を入力し、インデックスを作成します
    ```bash
    PUT movies-index 
    ```
1. できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/67557dc1-4098-4107-8258-45dc081a2a15.png)
1. 一つのドキュメントを「movies-index」にインデクスするために、下記を実行します
    ```json
    PUT movies-index/_doc/1
    { 
      "title": "Shawshank Redemption",
      "genre": "Drama",
      "year": 1994
    }
    ```
1. 作成できたようです
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/83bd1816-3141-70fd-32b6-03ad52a85e78.png)

### 検索する
1. ナビゲーションペインの「Stack Management」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/45bd071d-f12b-6b60-326c-e90ce9f5b7a3.png" width=300 />

1. Index Patternsをクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/67797e92-6a5c-6358-6de0-a961781cf934.png" width=400 />

1. 「Create index pattern」をクリックします
1. index pattern nameに「movies*」を指定し、「Next step」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/08127d1f-437d-505d-945e-7065dfeaa0ff.png)
1. 「Create index pattern」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8cf72c08-1cad-a978-5035-3d3716a89b25.png)
1. 「Discover」をクリックします
1. 表示されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b1a50735-6e01-aa93-be26-ecc874d3200e.png)


# 考察
今回は、OpenSearch Serverlessのチュートリアルを試してみました。
次回は、下記のチュートリアルも試してみたいと思います。

https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/serverless-manage.html

https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/serverless-clients.html


# 参考

https://qiita.com/zumax/items/d005dce95f7730220bc5

https://aws.amazon.com/jp/blogs/news/amazon-opensearch-serverless-cost-effective-search-capabilities-at-any-scale/