[アップデート]Amazon S3 Tablesでタグ機能が利用可能になりました

[アップデート]Amazon S3 Tablesでタグ機能が利用可能になりました

2025.11.09

はじめに

お疲れ様です、データ事業本部の小高です。
最近モバイルPasumo定期券を買い、モバイルSuicaとの両立に悩まされています。
AWSとGoogle Cloudの両立と重ね合わせている日々です。

さてさて先日、S3 Tablesでタグ機能が利用可能になりました。
これにより、アクセス制御(ABAC)やコスト配分のためにS3 Tablesにタグを付けることができるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2025/11/amazon-s3-tags-s3-tables/
https://docs.aws.amazon.com/AmazonS3/latest/userguide/table-tagging.html

本記事では、このS3 Tablesのタグ機能を実際に試してみた結果を踏まえ、解説していきます。

S3 Tablesについては以下の記事で詳しく紹介されていますので、ご参照ください。

https://dev.classmethod.jp/articles/amazon-s3-tables-tokyo-region-ga/
https://dev.classmethod.jp/articles/aws-s3-tables-getting-started-tutorial-with-console/

アップデート内容

今回のアップデートで、S3 Tablesのテーブルバケットやテーブルに対してタグを付与できるようになりました。

このタグ機能は主に以下の2つの目的で使用されます:

1. アクセス制御(ABAC)

IAMポリシーでタグを使用することで、リソースの作成・削除・更新といったインフラ操作のガバナンスを柔軟に管理できます。

  • テーブル作成時に特定のタグ付けを強制する
  • 本番環境のテーブルの削除を防ぐ
  • 部署やプロジェクトごとにリソース操作を制限する

2. コスト配分

個別のテーブルやテーブルバケットにタグを追加することで、AWS Billing and Cost Managementを使用してコストを追跡・整理できます。

  • 部署ごとのS3 Tables利用コストを可視化
  • プロジェクトごとにコストを配分
  • オーナー別にコストを追跡

今回はアクセス制御にて、本番環境のテーブルの削除を防ぐ検証を実際に試してみます。

やってみた

前提条件

  • 各リソースが作成済み
    • テーブルバケット: lfa-table-bucket-20250403
    • Namespace: 20250404_namespace
    • テーブル名: kodaka_sales_dev, kodaka_sales_prod

コンソール上で確認したところちゃんとタグの画面が追加されていました!

バケット

名称未設定

テーブル

テーブル

①テーブルにタグを付与

各テーブルにタグを付与します。

テーブル「kodaka_sales_dev

dev

テーブル「kodaka_sales_prod

prod

②roleを作成し、スイッチロール

下記のポリシーを持ったroleを作成し、スイッチロールします。
env = dev」タグを持っているテーブルは削除可能、
env = prod」タグを持っているテーブルは不可のポリシーを持ったroleになります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowDeleteOnlyForDevEnvironment",
            "Effect": "Allow",
            "Action": "s3tables:DeleteTable",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/env": "dev"
                }
            }
        },
        {
            "Sid": "DenyDeleteForProduction",
            "Effect": "Deny",
            "Action": "s3tables:DeleteTable",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/env": "prod"
                }
            }
        },
        {
            "Sid": "AllowReadOperations",
            "Effect": "Allow",
            "Action": [
                "s3tables:GetTable",
                "s3tables:ListTables",
                "s3tables:ListTagsForResource",
                "s3tables:GetTableBucket",
                "s3tables:ListTableBuckets"
            ],
            "Resource": "*"
        }
    ]
}

③テーブル削除実行

devテーブルの削除

kodaka_sales_dev」テーブルの削除を実行します

 aws s3tables delete-table \
      --table-bucket-arn arn:aws:s3tables:ap-northeast-1:xxxxxxxx:bucket/lfa-table-bucket-20250403 \
      --namespace 20250404_namespace \
      --name kodaka_sales_dev \
      --region ap-northeast-1 \

テーブルが正常に削除されたか下記のコマンドで確認します。

aws s3tables get-table \
      --table-bucket-arn arn:aws:s3tables:ap-northeast-1:xxxxxxxx:bucket/lfa-table-bucket-20250403 \
      --namespace 20250404_namespace \
      --name kodaka_sales_dev \
      --region ap-northeast-1

結果:

An error occurred (NotFoundException) when calling the GetTable operation: The specified table does not exist.

問題なく、テーブルが削除されていることが確認できました。

prodテーブルの削除

kodaka_sales_prod」テーブルの削除を実行します

 aws s3tables delete-table \
      --table-bucket-arn arn:aws:s3tables:ap-northeast-1:xxxxxxxx:bucket/lfa-table-bucket-20250403 \
      --namespace 20250404_namespace \
      --name kodaka_sales_prod \
      --region ap-northeast-1 \

結果:

An error occurred (AccessDeniedException) when calling the DeleteTable operation: 
User: arn:aws:sts::xxxxxxxx:assumed-role/S3tables-tag-kodaka/cm-kodaka.ryosuke is not authorized to perform: 
s3tables:DeleteTable on resource: arn:aws:s3tables:ap-northeast-1:xxxxxxxx:bucket/lfa-table-bucket-20250403/table/xxxxxx 
with an explicit deny in an identity-based policy

想定通りDenyルールによって操作が拒否されました。
これにより、誤った本番テーブルの削除を防止できることが確認できました。

補足:Lake Formationとの関係性

今回のアップデート(S3 Tablesのタグ)は、データの中身へのアクセス制御を行うものではありません。データの中身(行レベル、列レベル)のアクセス制御は、Lake Formationが担当します。
タグ制御を行う場合は「LF-Tag」を利用します。

S3 Tablesのタグは主にインフラ管理とコスト管理のために使われます。
それぞれの役割を正しく理解して使い分けることが重要です。

Lake Formationについては以下の記事で詳しく紹介されていますので、ご参照ください。

https://dev.classmethod.jp/articles/aws-lakeformation-roughly-understand/

まとめ

今回は、S3 tabelsのタグ機能についてお話ししました。

S3 Tablesは引き続き機能が拡充されていますので、Lake Formation含め今後のアップデートにも注目していきたいと思います。

この記事をシェアする

FacebookHatena blogX

関連記事