特定のファイルタイプのみ Amazon S3 バケットへアップロードする方法を教えてください

2024.01.09

困っていること

管理の一環で、特定のファイルタイプのみを Amazon S3 バケットへアップロードすることを検討しています。 制御するための、バケットポリシー例を教えてください。

どう対応すればいいの?

以下のバケットポリシー例を参考にご対応ください。

{
  "Version": "2012-10-17",
  "Id": "Policy111111111",
  "Statement": [
    {
      "Sid": "StmtSampleDeny",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "NotResource": [
        "arn:aws:s3:::YOUR_BUCKET_NAME/*.jpg",
        "arn:aws:s3:::YOUR_BUCKET_NAME/*.png",
        "arn:aws:s3:::YOUR_BUCKET_NAME/*.gif"
      ]
    }
  ]
}
  • "Principal" 値には、アップロード権限を付与するユーザーの Amazon リソースネーム (ARN) を記述してください。
  • "Resource" 値と "NotResource" 値について、YOUR_BUCKET_NAME を実際の対象とする S3 バケット名に変更してください。
  • バケットポリシーで "Resource" を指定する場合、大文字と小文字が区別されます。たとえば .jpg はアップロード可能だが、.JPG だとアクセス拒否エラーになります。

バケットポリシーと IAM ポリシーの評価論理 として、IAM ポリシー、バケットポリシーのどちらかが許可しているとアクセスに成功するものの、どちらかの許可があった場合でも、明示的な拒否を加えることで失敗します。
そのため、"Allow" を利用して、特定の拡張子を持つオブジェクトに対してのみ "s3:PutObject" アクションを許可を行い、それ以外の拡張子を持つオブジェクトに対して暗黙的な拒否を行うことはできません。

検証例

"Allow" を利用して、特定の拡張子を持つオブジェクトに対してのみ "s3:PutObject" アクションを許可。

暗黙的な拒否 がされるのか、.zip をアップロード対象として選択。

結果、成功します。

参考資料