プレフィックスで制限されたS3アクセスのIAMポリシー
特定のプレフィックス(フォルダパス)配下のオブジェクトにS3アクセスを制限するIAMポリシーを作成します。マルチテナントアプリケーションやユーザーごとのストレージに有用です。
Storage
詳細な説明
プレフィックスベースのS3アクセス制御
マルチテナントアプリケーションや共有バケットでは、各ユーザーやサービスを独自の「フォルダ」(プレフィックス)に制限する必要があります。IAMポリシーは、リソースを特定のプレフィックスパターンにスコープすることでこれを実現できます。
ポリシーJSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListBucketWithPrefix",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::shared-bucket",
"Condition": {
"StringLike": {
"s3:prefix": ["uploads/user-123/*"]
}
}
},
{
"Sid": "AllowObjectAccessUnderPrefix",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::shared-bucket/uploads/user-123/*"
}
]
}
2ステートメント設計
- ステートメント1はバケットに対する
ListBucketを許可しますが、条件を使用してuploads/user-123/プレフィックス配下のオブジェクトのリストのみに制限します。条件がないと、ユーザーはバケット内のすべてのオブジェクトをリストできてしまいます。 - ステートメント2はオブジェクトレベルの操作(Get、Put、Delete)を付与しますが、特定のプレフィックスARNパターンに一致するリソースのみです。
動的プレフィックスポリシー
実際には、プレフィックスを動的にするために${aws:username}や${aws:PrincipalTag/tenant-id}などのIAMポリシー変数を使用することが多いです:
"Resource": "arn:aws:s3:::shared-bucket/uploads/${aws:PrincipalTag/tenant-id}/*"
これにより、ユーザーやテナントごとに個別のポリシーを作成する必要がなくなります。
ユースケース
各テナントのデータが一意のS3プレフィックス配下に格納されるマルチテナントSaaSアプリケーションで、別々のバケットなしにIAMレベルでデータ分離を確保します。