如何在AWS中使用自定义密钥加密/解密DynamoDB数据?
关于DynamoDB使用客户托管密钥(CMK)加密的问题解答
核心问题解答
是否只需指定自定义密钥即可?
是,但需满足两个前提:- 在Terraform的DynamoDB表资源中,通过
kms_key_id参数指定客户托管KMS密钥的ARN。 - 确保该KMS密钥的密钥策略允许DynamoDB服务(
dynamodb.amazonaws.com)执行加密操作,同时你的IAM身份拥有访问该KMS密钥的必要权限(kms:Encrypt、kms:Decrypt等)。
- 在Terraform的DynamoDB表资源中,通过
读取数据时是否需要手动解密?
不需要。AWS会自动处理数据的写入加密与读取解密,只要你的IAM身份同时拥有DynamoDB表的读取权限和对应KMS密钥的解密权限,原有的Python读取代码可直接使用,无需修改。
修改后的Terraform配置(dynamo.tf)
resource "aws_dynamodb_table" "users" { name = "Users" billing_mode = "PROVISIONED" read_capacity = 10 write_capacity = 5 hash_key = "userId" attribute { name = "userId" type = "S" # String data type } # 指定客户托管KMS密钥ARN,替换为你实际的密钥ARN kms_key_id = "arn:aws:kms:us-east-1:123456789012:key/your-key-id" lifecycle { prevent_destroy = true } tags = { Name = "Users" } }
关键注意事项
- 务必将
kms_key_id替换为你实际的客户托管密钥ARN。 - 若KMS密钥与DynamoDB表不在同一AWS区域,需确保跨区域访问的权限配置正确。
- 你的IAM用户/角色需同时具备:
- DynamoDB表的
dynamodb:Scan等读取权限 - KMS密钥的
kms:Decrypt权限
- DynamoDB表的
原Python读取代码无需修改
你的app.py代码可直接使用,AWS会自动完成解密操作:
import boto3 client = boto3.client('dynamodb') def dump_table(table_name): results = [] last_evaluated_key = None while True: if last_evaluated_key: response = client.scan( TableName=table_name, ExclusiveStartKey=last_evaluated_key ) else: response = client.scan(TableName=table_name) last_evaluated_key = response.get('LastEvaluatedKey') results.extend(response['Items']) if not last_evaluated_key: break return results # Usage data = dump_table('Users')
内容的提问来源于stack exchange,提问作者luwa
相关产品推荐
相关产品推荐

