如何在AWS SAM模板中限制对S3存储桶的公共访问

时间:2019-01-24 22:07:03

标签: amazon-web-services amazon-s3 amazon-cloudformation

我目前正在尝试使用SAM模板为云形成部署定义s3存储桶。按照文档,我以为我正确设置了PublicAccessBlockConfiguration:

(yaml)
    S3Bucket1:
        Type: AWS::S3::Bucket
        Properties:
          BucketName: abl-ar-report-container 
          BucketEncryption: 
            ServerSideEncryptionConfiguration: 
            - ServerSideEncryptionByDefault:
                SSEAlgorithm: AES256
          PublicAccessBlockConfiguration:
            BlockPublicAcls : true
            BlockPublicPolicy : true
            IgnorePublicAcls : true
            RestrictPublicBuckets : true

但是,当我部署时,会收到以下消息:

标识为[S3Bucket1]的资源无效。未为AWS :: S3 :: Bucket类型的资源定义属性PublicAccessBlockConfiguration

我确实在git上看到了一些有关模板变体的参考 我将AWS模板声明为:

AWSTemplateFormatVersion: 2010-09-09
Description: A template for a Node.js-based application 

Transform: AWS::Serverless-2016-10-31

进一步研究之后,我想我将CF模板语法与SAM语法混合在一起。谁能指出这些设置的正确文档或语法?

2 个答案:

答案 0 :(得分:1)

我对此进行了深入研究,目前它是SAM中的错误。这是GitHub issue。有一个patch已被合并,应该在v1.10.0中修复。

问题的根源是SAM中的s3模型具有硬编码的属性列表,而PublicAccessBlockConfiguration相对较新并且尚未添加。

我希望这会有所帮助。

答案 1 :(得分:0)

我建议使用默认设置创建s3bucket。默认情况下,S3被禁止公开访问。只需将IAM角色/策略与reads3对象关联即可进行CFN部署