You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS中使用自定义密钥加密/解密DynamoDB数据?

关于DynamoDB使用客户托管密钥(CMK)加密的问题解答

核心问题解答

  • 是否只需指定自定义密钥即可?
    是,但需满足两个前提:

    1. 在Terraform的DynamoDB表资源中,通过kms_key_id参数指定客户托管KMS密钥的ARN。
    2. 确保该KMS密钥的密钥策略允许DynamoDB服务(dynamodb.amazonaws.com)执行加密操作,同时你的IAM身份拥有访问该KMS密钥的必要权限(kms:Encrypt、kms:Decrypt等)。
  • 读取数据时是否需要手动解密?
    不需要。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权限

原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:48:21