使用Terraform为DynamoDB表配置SSE加密报错求助
解决Terraform配置DynamoDB SSE时的参数报错问题
你遇到的报错是因为Terraform AWS Provider的参数结构调整了——kms_master_key_id和sse_algorithm并不是当前aws_dynamodb_table资源中server_side_encryption块的有效参数,下面是具体的解决思路和配置示例:
核心原因
在Terraform AWS Provider 3.x及以上的版本中,server_side_encryption块的参数做了简化:
- 原
kms_master_key_id被替换为kms_key_arn,要求传入KMS密钥的ARN而非单纯的ID sse_algorithm参数被移除,当启用SSE并指定KMS密钥时,算法会自动默认KMS;使用AWS管理的默认密钥时也无需手动配置
正确配置示例
场景1:使用自定义KMS密钥
如果你的var.kmsid是密钥ID而非ARN,可以通过数据源转换为ARN;如果已经是ARN,直接使用即可:
# 若只有KMS密钥ID,用数据源获取对应的ARN data "aws_kms_key" "dynamo_kms" { key_id = var.kmsid } resource "aws_dynamodb_table" "example" { name = "your-table-name" billing_mode = "PAY_PER_REQUEST" hash_key = "id" attribute { name = "id" type = "S" } server_side_encryption { enabled = true kms_key_arn = data.aws_kms_key.dynamo_kms.arn } }
场景2:使用AWS管理的默认KMS密钥
只需要开启加密开关即可,无需额外指定密钥:
resource "aws_dynamodb_table" "example" { name = "your-table-name" billing_mode = "PAY_PER_REQUEST" hash_key = "id" attribute { name = "id" type = "S" } server_side_encryption { enabled = true } }
额外注意事项
- 请确保你的Terraform AWS Provider是3.x及以上的稳定版本,可在provider块中指定版本:
provider "aws" { region = "us-east-1" version = "~> 5.0" # 推荐使用较新的稳定版本 } - 如果你的
var.kmsid已经是ARN,可以直接替换示例中的data.aws_kms_key.dynamo_kms.arn为var.kmsid
内容的提问来源于stack exchange,提问作者TechGirl
相关产品推荐
相关产品推荐

