使用CMK加密的DynamoDB表,IAM权限需包含CMK访问权限吗?
关于DynamoDB使用CMK加密时的IAM权限要求
是的,你需要为IAM角色/策略添加对该客户管理密钥(CMK)的访问权限。
当你使用CMK加密DynamoDB表时,DynamoDB会在后台调用AWS KMS服务完成数据的加密和解密操作。因此,执行DynamoDB读写操作(如dynamodb:GetItem、dynamodb:PutItem)的IAM身份,必须同时具备两类权限:
- 对应的DynamoDB操作权限(比如
dynamodb:GetItem) - KMS层面的权限,允许使用该CMK进行加密解密,具体所需权限包括:
kms:Decrypt:读取数据时解密存储内容kms:Encrypt:写入数据时加密新内容kms:GenerateDataKey:DynamoDB生成数据密钥加密表数据时需要此权限
如果缺少KMS相关权限,即便拥有完整的DynamoDB操作权限,执行读写操作时也会触发AccessDeniedException权限拒绝错误。
举个IAM策略示例,假设你的CMK ARN为arn:aws:kms:us-east-1:123456789012:key/abc123,DynamoDB表ARN为arn:aws:dynamodb:us-east-1:123456789012:table/MyEncryptedTable,策略需包含:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem" ], "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyEncryptedTable" }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc123" } ] }
注意:若使用AWS管理的KMS密钥而非客户管理CMK,则无需额外添加KMS权限,AWS会自动处理权限逻辑;但客户管理密钥必须显式授予上述KMS权限。
内容的提问来源于stack exchange,提问作者Bin Chen
相关产品推荐
相关产品推荐

