[アップデート]Amazon S3 Tablesでタグ機能が利用可能になりました
はじめに
お疲れ様です、データ事業本部の小高です。
最近モバイルPasumo定期券を買い、モバイルSuicaとの両立に悩まされています。
AWSとGoogle Cloudの両立と重ね合わせている日々です。
さてさて先日、S3 Tablesでタグ機能が利用可能になりました。
これにより、アクセス制御(ABAC)やコスト配分のためにS3 Tablesにタグを付けることができるようになりました。
本記事では、このS3 Tablesのタグ機能を実際に試してみた結果を踏まえ、解説していきます。
S3 Tablesについては以下の記事で詳しく紹介されていますので、ご参照ください。
アップデート内容
今回のアップデートで、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」

テーブル「kodaka_sales_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については以下の記事で詳しく紹介されていますので、ご参照ください。
まとめ
今回は、S3 tabelsのタグ機能についてお話ししました。
S3 Tablesは引き続き機能が拡充されていますので、Lake Formation含め今後のアップデートにも注目していきたいと思います。








