【问题标题】:Allow CloudFront to access an S3 bucket with an origin access identity允许 CloudFront 使用源访问身份访问 S3 存储桶
【发布时间】:2018-10-27 15:13:34
【问题描述】:

我创建了一个托管 S3 存储桶的静态网站,由 CloudFront 提供服务。我想通过原始访问身份限制直接从 CloudFront 访问存储桶。

我已尝试更新 S3 存储桶策略,但显示错误:

Error putting S3 policy: MalformedPolicy: Invalid principal in policy status code: 400, request id

我正在尝试使用以下政策:

resource "aws_s3_bucket_policy" "default" {
  bucket = "${aws_s3_bucket.default.id}"
  policy = <<EOF
  {
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "2",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${aws_cloudfront_origin_access_identity.origin_access_identity.id}"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::$/*"
    }
  ]
}
EOF 
}

【问题讨论】:

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


    【解决方案1】:

    如 [aws_cloudfront_origin_access_identity 文档]1 中所述,执行此操作的最佳方法是生成 IAM 策略文档 使用aws_iam_policy_document data source,然后直接附加。

    示例如下所示:

    data "aws_iam_policy_document" "s3_policy" {
      statement {
        actions   = ["s3:GetObject"]
        resources = ["${module.names.s3_endpoint_arn_base}/*"]
    
        principals {
          type        = "AWS"
          identifiers = ["${aws_cloudfront_origin_access_identity.origin_access_identity.iam_arn}"]
        }
      }
    
      statement {
        actions   = ["s3:ListBucket"]
        resources = ["${module.names.s3_endpoint_arn_base}"]
    
        principals {
          type        = "AWS"
          identifiers = ["${aws_cloudfront_origin_access_identity.origin_access_identity.iam_arn}"]
        }
      }
    }
    
    resource "aws_s3_bucket" "bucket" {
      # ...
      policy = "${data.aws_iam_policy_document.s3_policy.json}"
    }
    

    如果您真的想按照您的问题手工制定 IAM 政策,那么您只需要这样的东西:

    resource "aws_s3_bucket_policy" "default" {
      bucket = "${aws_s3_bucket.default.id}"
      policy = <<EOF
    {
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "${aws_cloudfront_origin_access_identity.origin_access_identity.iam_arn}"
            },
            "Action": "s3:*",
            "Resource": "${aws_s3_bucket.default.arn}""
        }
      ]
    }
    EOF 
    }
    

    【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2017-07-04
    • 2021-10-09
    • 2023-04-05
    • 2017-02-10
    • 2019-04-23
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多