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

使用Java版DynamoDB加密客户端加密列无效,求排查原因

问题原因及解决方案

你的代码已配置DynamoDB加密客户端与KMS材料提供器,但数据未加密的核心原因是未明确标记Customer类中需要加密的敏感字段。DynamoDB加密客户端不会默认加密所有属性,必须通过注解指定目标字段。

解决步骤

1. 为敏感字段添加加密注解

在Customer类的PII字段(如社保号码)上添加@DynamoDBEncrypted注解,配合@DynamoDBAttribute指定数据库字段映射关系。示例代码如下:

public class Customer {
    private String customerId;

    // 标记社保号码字段需加密
    @DynamoDBEncrypted
    @DynamoDBAttribute(attributeName = "ssn")
    private String socialSecurityNumber;

    // Getter和Setter方法
    public String getCustomerId() {
        return customerId;
    }

    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }

    public String getSocialSecurityNumber() {
        return socialSecurityNumber;
    }

    public void setSocialSecurityNumber(String socialSecurityNumber) {
        this.socialSecurityNumber = socialSecurityNumber;
    }
}

2. 验证依赖配置

确保项目引入了正确版本的DynamoDB加密客户端与KMS SDK依赖(以Maven为例):

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-dynamodb-encryption-java</artifactId>
        <version>1.15.0</version> <!-- 使用最新稳定版 -->
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-kms</artifactId>
        <version>1.12.500</version> <!-- 与DynamoDB SDK版本匹配 -->
    </dependency>
</dependencies>

3. 确认KMS密钥权限

确保运行代码的IAM身份(角色/用户)拥有KMS密钥的以下权限:

  • kms:GenerateDataKey:用于生成加密数据密钥
  • kms:Decrypt:用于解密数据密钥

可在KMS密钥的权限策略中添加对应语句:

{
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
    ],
    "Resource": "your-kms-key-arn"
}

完成以上配置后重新运行代码,敏感字段将被加密存储到DynamoDB中,拥有表查看权限的人员无法直接读取明文数据。

内容的提问来源于stack exchange,提问作者user3236794

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:31:16