【AWS】SIEM on Amazon OpenSearch Serviceの更新方法


# はじめに
SIEM on Amazon OpenSearch Service (SIEM on AOS) を **`AWS CloudShell`** でアップデートする手順を共有します。
* AWS CloudShell 上で AWS CDK によるアップデートを実行
    * SIEM on AOSを更新することで、導入後のエンハンス や AWS Lambda の Pythonランタイムの更新などに対応できる

    * 前提：[SIEM on Amazon OpenSearch Service (SIEM on AOS)](https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/main/README_ja.md) を導入済み
        * 参考: [【AWS】CloudShellでVPC内にSIEMを構築してみた](https://qiita.com/maru3ka9/items/d84a79d1e0e666954702)


##  概要
### SIEM on AOS の AWS CDK によるアップデートについて
* 手順：[高度なデプロイ - AWS CDK によるアップデート](https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/main/docs/deployment_ja.md#aws-cdk-%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88) を確認
    * 今回は、AWS CloudShell で実行するため、`Amazon Linux 2023 の場合` の手順を参照
   * 事前準備：インストール時の `cdk.json` を用意する (VPC/サブネット等の構成定義)

#### 実行の流れ
   [1. AWS CDK 実行環境の準備 (AWS CloudShell で実行)](#1-aws-cdk-実行環境の準備)
   [2. 環境変数の設定](#2-環境変数の設定)
   [3. AWS Lambda デプロイパッケージの作成](#3-aws-lambda-デプロイパッケージの作成)
   [4. AWS Cloud Development Kit (AWS CDK) の環境セットアップ](#4-aws-cloud-development-kit-aws-cdk-の環境セットアップ)
   [5. cdk.json の用意](#5-cdkjson-の用意)
   [6. cdk deploy実行](#6-cdk-deploy実行)

#### 注意事項
* アップデート手順には、バックアップに関する注意事項 が記載されている
  * 手動でポリシーを変更している場合は、実行前にバックアップしておこう
:::note warn
注) Global tenant の 設定やダッシュボード等は自動で上書きされるのでご注意ください。アップデート前に使用していた設定ファイルやダッシュボード等は S3 バケットの aes-siem-[AWS_Account]-snapshot/saved_objects/ にバックアップされるので、元の設定にする場合は手動でリストアしてください。
:::

:::note warn
注) S3 バケットポリシー、KMS の キーポリシーは、IAM ポリシー等は、CDK/CloudFormation で自動生成されています。手動で変更は非推奨ですが、変更している場合は上書きされるので、それぞれをバックアップをしてからアップデート後に差分を更新して下さい。
:::


## AWS CloudShell によるアップデート手順（例）

### 1. AWS CDK 実行環境の準備
* Amazon Linux 2023 の [手順](https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/main/docs/deployment_ja.md#1-aws-cdk-%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99) を実行
    ```shell
    export GIT_ROOT=$HOME
    cd ${GIT_ROOT}
    sudo dnf install -y python3.11 python3.11-devel python3.11-pip git jq tar
    
    git clone https://github.com/aws-samples/siem-on-amazon-opensearch-service.git
    ```
    * 参考）gitリポジトリを取得済みの場合、`git pull` で最新化する

### 2. 環境変数の設定
* 環境変数 `CDK_DEFAULT_ACCOUNT` に 現在のAWSアカウントIDを設定
* 環境変数 `AWS_DEFAULT_REGION` はリージョンに合わせて変更 (設定済みの場合は不要)
    ```shell
    export CDK_DEFAULT_ACCOUNT=`aws sts get-caller-identity --query 'Account' --output text`
    export AWS_DEFAULT_REGION=ap-northeast-1
    ```     

### 3. AWS Lambda デプロイパッケージの作成
* [手順](https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/main/docs/deployment_ja.md#3-aws-lambda-%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%9C%E6%88%90) のコマンドを実行
    ```shell
    cd ${GIT_ROOT}/siem-on-amazon-opensearch-service/deployment/cdk-solution-helper/
    
    deactive 2>/dev/null
    
    chmod +x ./step1-build-lambda-pkg.sh && ./step1-build-lambda-pkg.sh
    ```
### 4. AWS Cloud Development Kit (AWS CDK) の環境セットアップ
  * [手順](https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/main/docs/deployment_ja.md#4-aws-cloud-development-kit-aws-cdk-%E3%81%AE%E7%92%B0%E5%A2%83%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97) のコマンドを実行
    ```shell
    chmod +x ./step2-setup-cdk-env.sh && ./step2-setup-cdk-env.sh
    
    source ~/.bashrc
    ```

### 5. cdk.json の用意
* インストール時に使用した `cdk.json` を `${GIT_ROOT}/siem-on-amazon-opensearch-service/source/cdk/cdk.json` に置く
    
  * 例）vi エディタで cdk.json を作成する
    ```shell
    vi ${GIT_ROOT}/siem-on-amazon-opensearch-service/source/cdk/cdk.json
    ```
    
    *  `:set paste` でペーストモードにする (貼り付け時のインデントの崩れ防止)
    * `cdk.json` の内容をコピペして保存する (:wq)

### 6. cdk deploy実行
  * アップデート実行
    ```shell
    cd ${GIT_ROOT}/siem-on-amazon-opensearch-service/ && source .venv/bin/activate
    cd source/cdk

    cdk deploy
    ```
    * cdk deploy を実行すると、更新される差分が表示される
    * 内容を確認して[y] を入力 (更新がない場合は終了)
        * Do you wish to deploy these changes (y/n)? **y**
    * アップデートは数分程度で完了

## トラブルシューティング
**ディスクの空き容量が不足すると実行に失敗する**
* **no space left on device, write** などのエラーが発生
* 約800MB 必要。`/home/cloudshell-user` のサイズが974MB のためエラーになりやすい
:::note
実行に失敗した場合は、ディスクの空き容量を調べよう (dfコマンドなど)
:::

* **対策案：**
  * A) `/home/cloudshell-user/.cache/`、`/home/cloudshell-user/.npm/` などを削除し、空き容量を増やして再実行する
  * **B) 新しい CloudShell 環境で再実行する（推奨）**
    * CloudShell の `アクション` で `削除`、新しい環境 (セッション) で再度手順を実行
    <font color="Red">※CloudShell内のデータ等が削除されるので注意（必要なファイルは退避）</font>