【问题标题】:Terraform how to restrict s3 objects from being publicTerraform如何限制s3对象公开
【发布时间】:2021-07-27 01:28:07
【问题描述】:

使用 Terraform,我声明了一个 s3 存储桶和相关的策略文档,以及一个 iam_role 和 iam_role_policy。

s3 存储桶在 AWS 中创建良好,但是该存储桶被列为“访问:对象可以是公共的”,并且希望对象是私有的。如何明确将对象设为私有?

   resource "aws_s3_bucket" "app" {
          bucket = "${data.aws_caller_identity.current.account_id}-app"
        
          server_side_encryption_configuration {
            rule {
              apply_server_side_encryption_by_default {
                sse_algorithm     = "AES256"
              }
            }
          }
        }
    
    data "aws_iam_policy_document" "app_s3_policy" {
      statement {
        effect = "Allow"
    
        actions = [
          "s3:PutObject"
        ]
    
        resources = [
          aws_s3_bucket.app.arn,
          "${aws_s3_bucket.app.arn}/*"
        ]
      }
    }

【问题讨论】:

  • 使用 Terraform AWS 提供商创建的 S3 存储桶的默认 ACL 是 private,那么您的配置中是否还有其他因素导致了这种行为?
  • @MattSchuchard 我指定了acl = private,它默认是公开的!

标签: amazon-s3 terraform


【解决方案1】:

阻止存储桶中的所有对象公开的最简单方法是将aws_s3_bucket_public_access_block 资源附加到存储桶。它看起来像这样:

resource "aws_s3_bucket_public_access_block" "app" {
  bucket = aws_s3_bucket.app.id

  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 2020-08-08
    • 2021-01-18
    • 2021-06-08
    • 2019-06-18
    • 2021-06-25
    • 2013-05-29
    • 2021-04-21
    相关资源
    最近更新 更多