【问题标题】:How to grant public read only access to S3 Bucket in AWS SAM template如何在 AWS SAM 模板中授予对 S3 存储桶的公共只读访问权限
【发布时间】:2020-04-22 03:56:03
【问题描述】:

我正在 SAM 模板中创建一个 S3 存储桶,并希望为其提供公共读取访问权限。到目前为止,这是我想出的:

  ProductBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${ProductBucketName}${Stage}


  ProductBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref ProductBucket
      PolicyDocument:
        Id: PublicReadPolicy
        Version: 2012-10-17
        Statement:
          - Sid: PublicReadForGetBucketObjects
            Effect: Allow
            Principal: '*'
            Action: 's3:GetObject'
            Resource: !Join
              - ''
              - - 'arn:aws:s3:::'
                - !Ref ProductBucket

这会因格式错误的异常而失败。

【问题讨论】:

  • 我没有看到您的模板有任何问题,除非您没有包含顶部 Resources 部分和 AWSTemplateFormatVersion 。我认为您在此处发布时为了简洁而故意省略了?

标签: amazon-s3 yaml aws-sam


【解决方案1】:

您的模板没问题,除了 - - 'arn:aws:s3:::' 的那一行格式错误。只是建议您可以在分隔符为空字符串时使用Fn::Sub 而不是Fn::Join

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  ProductBucketName:
    Type: String

Resources:
  ProductBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${ProductBucketName}-${AWS::StackName}


  ProductBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref ProductBucket
      PolicyDocument:
        Id: PublicReadPolicy
        Version: 2012-10-17
        Statement:
          - Sid: PublicReadForGetBucketObjects
            Effect: Allow
            Principal: '*'
            Action: 's3:GetObject'
            Resource: !Sub arn:aws:s3:::${ProductBucket}/*

希望这可以帮助您继续前进。

【讨论】:

    【解决方案2】:

    我发现 AWS 文档的 yaml 示例看起来有点滑稽,但我按​​照它并给了我的 CF 堆栈 IAM s3:PutBucketPolicy 权限,并且它起作用了。下面是我的SAM。

      ExampleBucket:
        Type: AWS::S3::Bucket
        Properties:
          BucketName: !Sub <bucket-name>
    
      ExampleBucketPolicy:
        Type: AWS::S3::BucketPolicy
        Properties:
          Bucket:
            Ref: "ExampleBucket"
          PolicyDocument:
            Statement:
              - Action:
                  - "s3:GetObject"
                Effect: "Allow"
                Resource:
                  Fn::Join:
                    - ""
                    - - "arn:aws:s3:::"
                      - Ref: "ExampleBucket"
                      - "/*"
                Principal: "*"
    

    这是您可能已经查阅过的 AWS 文档页面:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html.

    【讨论】:

      猜你喜欢
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2020-02-23
      • 2017-11-01
      • 2022-01-17
      相关资源
      最近更新 更多