amazon-web-services - Terraform - 更新 S3 访问控制:关于用授权替换 acl 的问题
问题描述
我有一个 S3 存储桶,用作访问日志存储桶。
这是我当前的模块和资源 TF 代码:
module "access_logging_bucket" {
source = "../../resources/s3_bucket"
environment = "${var.environment}"
region = "${var.region}"
acl = "log-delivery-write"
encryption_key_alias = "alias/ab-data-key"
name = "access-logging"
name_tag = "Access logging bucket"
}
resource "aws_s3_bucket" "default" {
bucket = "ab-${var.environment}-${var.name}-${random_id.bucket_suffix.hex}"
acl = "${var.acl}"
depends_on = [data.template_file.dependencies]
tags = {
name = "${var.name_tag}"
. . .
}
lifecycle {
ignore_changes = [ "server_side_encryption_configuration" ]
}
}
就我而言,变量acl的默认值是variable "acl" { default = "private" }
。并且还如Terraform S3 存储桶属性参考文档中所述。
对于此存储桶,它设置为log-delivery-write
.
我想更新它以添加以下授权并删除acl,因为它们相互冲突:
grant {
permissions = ["READ_ACP", "WRITE"]
type = "Group"
uri = "http://acs.amazonaws.com/groups/s3/LogDelivery"
}
grant {
id = data.aws_canonical_user_id.current.id
permissions = ["FULL_CONTROL"]
type = "CanonicalUser"
}
我的问题是:
- 删除
acl
属性并添加上述内容grants
仍然保持对存储桶的正确访问控制。即,授权配置仍然可以作为访问日志存储桶使用。 - 如果我从资源配置中删除 acl,它将使其成为
private
默认值。这是正确的做法还是应该将其设为空或其他?
在检查一些文档时Log Delivery group
发现了这一点,这让我认为我可以继续用我提到的授权替换acl :
日志交付组 – 由 http://acs.amazonaws.com/groups/s3/LogDelivery表示。存储桶的 WRITE 权限使该组能够将服务器访问日志(请参阅 Amazon S3 服务器访问日志)写入存储桶。使用 ACL 时,被授权者可以是 AWS 账户或预定义的 Amazon S3 组之一。
解决方案
根据grant-log-delivery-permissions-general文档,我继续运行terraform apply。
在第一次运行时,它正确设置了Bucket owner
权限,但删除了S3 log delivery group
. 所以,我terraform plan
再次运行它,它显示了以下 acl 授权差异。我认为它很可能首先更新了acl
删除授权的值log delivery group
。
因此,我重新运行了terraform apply
它,它工作正常并更正了日志传递组。
# module.buckets.module.access_logging_bucket.aws_s3_bucket.default will be updated in-place
~ resource "aws_s3_bucket" "default" {
acl = "private"
bucket = "ml-mxs-stage-access-logging-9d8e94ff"
force_destroy = false
. . .
tags = {
"name" = "Access logging bucket"
. . .
}
+ grant {
+ permissions = [
+ "READ_ACP",
+ "WRITE",
]
+ type = "Group"
+ uri = "http://acs.amazonaws.com/groups/s3/LogDelivery"
}
+ grant {
+ id = "ID_VALUE"
+ permissions = [
+ "FULL_CONTROL",
]
+ type = "CanonicalUser"
}
. . .
}
Plan: 0 to add, 1 to change, 0 to destroy.
推荐阅读
- flutter - Flutter 使用包打开深层链接
- php - 如何将此函数与 php 程序的多个部分一起使用
- html - SVG 没有在我的项目中正确显示,我是否正确使用了标签?
- python - Tkinter 忽略 root.after 延迟
- javascript - 如何清理这个 if-else 函数?(Javascript ES6)
- react-native - 如何按下组件并在本机反应中旋转 180 度?
- python - Jupyter 笔记本中的 OutStream 描述符
- javascript - 让输入显示文本但具有不同的值
- c++ - C++中文本字符串中的模式搜索
- c - 如何创建使用 1 个全局变量的 2 个线程?