首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何赋予目标桶日志传递组写和READ_ACP权限?

如何赋予目标桶日志传递组写和READ_ACP权限?
EN

Stack Overflow用户
提问于 2019-04-09 04:08:27
回答 2查看 13.2K关注 0票数 10

我试图设置一个cloudfront和s3桶与地形。当我运行terraform apply时,它将返回以下错误:

  • aws_s3_bucket.app:放置S3日志时出错: InvalidTargetBucketForLogging:您必须将日志传递组写和READ_ACP权限授予目标桶

我的S3.tf文件:

代码语言:javascript
复制
data "aws_iam_policy_document" "s3_policy" {
  policy_id = "PolicyForCloudFrontPrivateContent"

  statement {
    sid       = "1"
    actions   = ["s3:GetObject"]
    resources = ["arn:aws:s3:::${local.name_env}/*"]

    principals {
      type        = "AWS"
      identifiers = ["${aws_cloudfront_origin_access_identity.origin_access_identity.iam_arn}"]
    }
  }
}

resource "aws_s3_bucket" "app" {
  bucket = "${local.name_env}"
  policy = "${data.aws_iam_policy_document.s3_policy.json}"

  logging {
    target_bucket = "${local.logs_bucket}"
    target_prefix = "app-${var.environment}"
  }

  versioning {
    enabled = true
  }

  tags = "${local.tags}"
}
EN

回答 2

Stack Overflow用户

发布于 2019-07-25 02:45:24

您需要将一个acl属性添加到您的aws_s3_bucket中,其值为“日志传递-写入”。

代码语言:javascript
复制
resource "aws_s3_bucket" "app" {
  bucket = "${local.name_env}"
  acl = "log-delivery-write"
  ...
}
票数 17
EN

Stack Overflow用户

发布于 2019-10-30 15:13:13

更新: terraform现在本机支持自定义桶acls。下面是对预定义acls不够的旧版本的解决方案。

下面是如何使用null资源和AWS通过terraform实现这一目标。

代码语言:javascript
复制
resource "aws_s3_bucket" "files_bucket" {
  # ...

  logging {
    target_bucket = "${aws_s3_bucket.logs_bucket.bucket}"
  }

  depends_on = [
    "null_resource.logs_bucket_acl_workaround"
  ]
}


resource "aws_s3_bucket" "logs_bucket" {
  # ...
  acl    = "private"
}


locals {
  put_bucket_acl_cmd = "s3api put-bucket-acl --bucket ${aws_s3_bucket.logs_bucket.bucket} --grant-write 'uri=\"http://acs.amazonaws.com/groups/s3/LogDelivery\"' --grant-read-acp 'uri=\"http://acs.amazonaws.com/groups/s3/LogDelivery\"'"
}

resource "null_resource" "logs_bucket_acl_workaround" {
  # cannot set bucket ACLs via terraform yet
  # https://github.com/terraform-providers/terraform-provider-aws/issues/989
  depends_on = [
    "aws_s3_bucket.logs_bucket",
  ]

  triggers = {
    bucket = "${aws_s3_bucket.logs_bucket.bucket}"
    command = "${local.put_bucket_acl_cmd}"
  }

  provisioner "local-exec" {
    command = "aws ${local.put_bucket_acl_cmd}"
  }
}

请注意,以这种方式添加的ACL只会被添加,而不会被删除。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55585003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档