よくあるWebサービスで画像をパブリックに表示させたいと考えています。
バケットにアップロード等はさせたくないのでそうなるように Serverless に定義したのですがうまくいきません。
以下の設定だと、
- 誰でも画像にアクセスできる
- 誰も画像をアップロードできない
設定になってしまいます。期待する動作としては、
- 誰でも画像にアクセスできる
- Service に紐付く Cognito User のみが画像をアップロードできる
となります。特定の Cognito User にのみ画像をアップロードする権限を与えるにはどうすれば良いでしょうか?
yml
1ImageUploadBucket: 2 Type: AWS::S3::Bucket 3 Properties: 4 BucketName: ${self:service}-${self:provider.stage}-bucket 5 AccessControl: PublicRead 6 ImageUploadBucketPolicy: 7 Type: AWS::S3::BucketPolicy 8 Properties: 9 Bucket: !Ref ImageUploadBucket 10 PolicyDocument: 11 Version: "2012-10-17" 12 Statement: 13 - Effect: Allow 14 Action: 15 - "s3:GetObject" 16 Resource: 17 - "arn:aws:s3:::${self:service}-${self:provider.stage}-bucket/*" 18 Principal: "*" 19 - Effect: Deny 20 Action: 21 - "s3:PutObject" 22 - "s3:DeleteObject" 23 Resource: 24 - "arn:aws:s3:::${self:service}-${self:provider.stage}-bucket/*" 25 Principal: "*" 26
あなたの回答
tips
プレビュー