AWS S3のメタデータテーブルの機能検証と活用方法について

# はじめに
株式会社ジールの @oreo_tです。
2024年12月のアップデートで、AWSのS3にメタデータテーブルの機能が追加されたので紹介しようと思います。

# 今回の更新情報

S3に、メタデータテーブルの機能が追加されました。これは、バケット内のオブジェクトに変更があった際に自動でそれを検知し、SQLでクエリできる形式のメタデータを専用のテーブルで保持するというものです。
公式の記事は以下のリンクを参照してください。
https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-s3-metadata-preview/

機能自体の紹介や導入方法はすでにほかの方が記事にしているので、今回はオブジェクトの更新に伴ってメタデータがどのように記録されるか、またそれらをどう活用するかという点にフォーカスした紹介をしようと思います。

# メタデータテーブルの参照方法


まずはメタデータテーブルを見るためにAthenaへ移動します。
今回、メタデータテーブルを利用するために必要なテーブルバケットの作成~メタデータテーブルの作成まではすでに他の記事等で紹介されているので割愛させていただきます。詳しくは各自検索をお願いします。
メタデータテーブルの作成が済んだら、対象のバケットの「メタデータ - プレビュー」のタブを開き、「Athenaクエリエディタに移動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/95d02ae8-c12e-22b8-1a8f-2efa5b0bfb16.png)

先ほどの画面のテーブルバケット名の付いたカタログ、名前空間と同じデータベース、メタデータテーブル名と同じテーブルがあることを確認します。
この先の検証では、このテーブルでメタデータを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/73a96d35-6829-7250-93cd-d1dc8887aa50.png)

# 機能検証

S3のオブジェクトに対する様々な操作をして、メタデータテーブルにどのように記録されるかを検証してみます。
#### ①ファイルアップロード
コンソールからファイルをアップロードします。今回はオープンソースの統計データのcsvファイルを利用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/512174a9-fd18-211d-a7ae-b4011a1786ff.png)

メタデータテーブルにはこのように記録されました。(※主要項目のみ抜粋)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/016f9925-e8ed-5337-bbbb-8c9b7b9feb3e.png)

各項目の簡単な説明です。
key:バケット配下のファイルパス
record_type:どの種別のメタデータか
record_timestamp:メタデータの発生時刻(UTC)
size:ファイルサイズ(byte)
last_modified_date:オブジェクトの更新日時(UTC)

#### ②ファイルコピー

ファイルを別のフォルダへコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/371c8fc6-1a13-2513-b8c1-3736ce7bb179.png)

メタデータテーブルにはこのように記録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/ba799586-0cb4-953e-1433-cf23decdb0e4.png)
コピー先のキーが記録され、他はファイルアップロード時の記録内容と変わりませんでした。

#### ③ファイル名の変更

ファイルの名前を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/4da84407-1d49-2c07-7376-608505f963d1.png)

すると、メタデータテーブルには2行記録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/314c0ed1-c5c0-9521-e7fa-9acefe013cb7.png)
既存のファイルが削除されて新しいファイルができるのと同じ扱いのようです。

#### ④ストレージクラスの変更

ストレージクラスをスタンダードからIntelligent-Tieringに変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/e7660d5e-e374-2270-29c2-7ec55c19b1c1.png)

すると、メタデータテーブルにはストレージクラスが変更された1行だけが記録されました。
注意点として、レコードタイプはCREATEで登録されるので、既存のオブジェクトの変更なのか新規のオブジェクト追加なのかはメタデータからは判断できなさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/12c2360e-7e3c-2f33-9600-4f8c883b3037.png)

#### ⑤タグの編集

オブジェクトに付くタグを編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/c87a56d3-0b9a-914f-dda3-dad331570852.png)

すると、メタデータテーブルにはレコードタイプ"UPDATE_METADATA"のものが登録され、"object_tags"に付与したタグが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/fa5500ad-c80a-e958-4eb8-7e890801245c.png)


#### ⑥ファイルの改変

ファイルをアップロードして既存のファイルを上書きする際、ファイルの中身を事前に書き換えてアップロードします。

すると、メタデータテーブルでは次の画像の下のレコードが生成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2197572/118d17d0-814a-fb29-ca5d-a4addd4cafd8.png)

"e_tag"という項目の値が変わっているのですが、これはファイルの中身を元にS3側で発行する文字列で、ファイルの中身が変わらなければ上書きしても値が変わらないのですが、中身が改変されるとここの値も変化しました。

# メタデータの活用方法
これらの機能を使って、S3運用にどのように役立つか考えてみます。
#### ①メタデータ取得の簡略化
メタデータテーブルの機能ができる前から、メタデータを取得してテーブルに格納するような運用は他のAWSサービスを組み合わせて実装しようと思えばできました。しかし、今回はメタデータの取得処理を組まなくてもテーブルバケットの作成と通常のバケットとの紐づけさえ行えばすぐにできてしまうので、より簡単に運用管理ができるようになります。

#### ②ファイルの改ざんチェック
ファイルの中身が変わったときにe_tagの値が変わることを利用して、ファイルが上書きされたときにe_tagが変わったものを抽出するようなクエリを定期実行することで、ファイルの改ざんを検知するような運用ができるようになります。

#### ③アクセス元の監視
上の検証では載せていませんでしたが、メタデータテーブルにはメタデータ発生契機となったAWSアカウントのIDや、IPアドレスも記録されます。そのため、想定外のアカウントやIPアドレスからのアクセスがされていないか管理することができます。


# まとめ
この機能を使えば、今までより労力をかけずにデータ管理、セキュリティ管理ができるようになると思います。ぜひご活用ください。

***
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：

https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area