有条件地将 SSE-S3 (AES256) 或 KMS 与 Terraform 一起应用
Conditionally apply SSE-S3 (AES256) or KMS with Terraform
在我的 s3.tf 文件中,我有每个 S3 存储桶的资源定义,即
"my-bucket-1" = {
server_side_encryption_kms_keys = [aws_kms_key.kms_keys["default-key"].arn]
tags = { Function = "A Function" }
}
在资源定义之后,我有以下块将加密应用于上面定义的每个存储桶。
dynamic "server_side_encryption_configuration" {
for_each = try(each.value.server_side_encryption_kms_keys, [])
content {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = server_side_encryption_configuration.value
sse_algorithm = "aws:kms"
}
}
}
}
我想保留此功能以将 KMS 加密应用于具有 server_side_encryption_kms_keys = [aws_kms_key.kms_keys["default-key"].arn]
的存储桶
不过,我还希望能够指定应该在资源定义中使用 SSE-S3 (AES256) 加密存储桶,方法如下:
"my-bucket-2" = {
server_side_encryption_sse_s3 = true
tags = { Function = "A Function" }
}
我查看了 https://registry.terraform.io/providers/hashicorp/aws/3.75.1/docs/resources/s3_bucket#sse_algorithm 上的文档,但我不知道如何实现这两种情况。
我是否需要修改现有的动态块?如果是这样,如何?添加一个新的?那应该是什么?
您实际要求的是使用 AES-256 密码的默认 SSE-S3。按照建议,您需要将其指定为默认值,而不是为密码算法指定无 KMS 密钥加密。然后,您可以根据更改后的默认值更新块的行为。由于这不再需要动态可选块设计模式,因为有默认参数值,因此可以在本地现在所在的位置更新配置:
"my-bucket-1" = {
server_side_encryption_kms_key = aws_kms_key.kms_keys["default-key"].arn # notice de-pluraled and now string type
tags = { Function = "A Function" }
}
和块:
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = try(each.value.server_side_encryption_kms_key, null)
sse_algorithm = can(each.value.server_side_encryption_kms_key) ? "aws:kms" : "AES256"
}
}
}
同时考虑更新配置以利用更新后的 API 表单和 new resource。
在我的 s3.tf 文件中,我有每个 S3 存储桶的资源定义,即
"my-bucket-1" = {
server_side_encryption_kms_keys = [aws_kms_key.kms_keys["default-key"].arn]
tags = { Function = "A Function" }
}
在资源定义之后,我有以下块将加密应用于上面定义的每个存储桶。
dynamic "server_side_encryption_configuration" {
for_each = try(each.value.server_side_encryption_kms_keys, [])
content {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = server_side_encryption_configuration.value
sse_algorithm = "aws:kms"
}
}
}
}
我想保留此功能以将 KMS 加密应用于具有 server_side_encryption_kms_keys = [aws_kms_key.kms_keys["default-key"].arn]
不过,我还希望能够指定应该在资源定义中使用 SSE-S3 (AES256) 加密存储桶,方法如下:
"my-bucket-2" = {
server_side_encryption_sse_s3 = true
tags = { Function = "A Function" }
}
我查看了 https://registry.terraform.io/providers/hashicorp/aws/3.75.1/docs/resources/s3_bucket#sse_algorithm 上的文档,但我不知道如何实现这两种情况。
我是否需要修改现有的动态块?如果是这样,如何?添加一个新的?那应该是什么?
您实际要求的是使用 AES-256 密码的默认 SSE-S3。按照建议,您需要将其指定为默认值,而不是为密码算法指定无 KMS 密钥加密。然后,您可以根据更改后的默认值更新块的行为。由于这不再需要动态可选块设计模式,因为有默认参数值,因此可以在本地现在所在的位置更新配置:
"my-bucket-1" = {
server_side_encryption_kms_key = aws_kms_key.kms_keys["default-key"].arn # notice de-pluraled and now string type
tags = { Function = "A Function" }
}
和块:
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = try(each.value.server_side_encryption_kms_key, null)
sse_algorithm = can(each.value.server_side_encryption_kms_key) ? "aws:kms" : "AES256"
}
}
}
同时考虑更新配置以利用更新后的 API 表单和 new resource。