🍣

AWS S3にServerless Frameworkを使って画像のダイレクトアップロード用のバケットを作成する

2023/02/13に公開

serverless.ymlに以下の内容を記述することで、StaticAssetsBucketという名前のS3バケットが作成されます。BucketNameに一意となるバケット名を追加してください。

このバケットに対するアクセスコントロールは「PublicRead」に設定されており、CORS (Cross-Origin Resource Sharing) の設定も行われています。CORS設定では、GET、PUT、HEADといったHTTPメソッドを持つリクエストが許可されています。また、「*」という設定により、任意のドメインからのリクエストが許可されます。アクセス元のドメインが決まっている場合は、ドメインを追加してください。

PublicBucketPolicyという名前のS3バケットポリシーも同時に作成されます。このポリシーは、StaticAssetsBucketを参照することで、「s3:GetObject」アクションに対して全てのユーザー(Principal)に対して、StaticAssetsBucket内のすべてのリソース(Object)に対するアクセスを許可します。

resources:
  Resources:
    StaticAssetsBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: <BUCKET_NAME>
        AccessControl: PublicRead
        CorsConfiguration:
          CorsRules:
            - AllowedHeaders:
                - '*'
              AllowedMethods:
                - GET
                - PUT
                - HEAD
              AllowedOrigins:
                - '*'
    PublicBucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: !Ref StaticAssetsBucket
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action:
                - 's3:GetObject'
              Resource:
                - !Sub '${StaticAssetsBucket.Arn}/*'
              Principal: '*'

Discussion