如何在AWS控制台隐藏DynamoDB特定敏感属性?
AWS控制台隐藏DynamoDB敏感属性的IAM策略方案
可以通过IAM属性级访问控制实现,但你原来的策略存在逻辑问题,导致控制台操作绕过了限制。
问题根源
你原策略尝试拒绝包含sensitive_attribute的请求,但AWS控制台默认会请求表的所有属性(不指定ProjectionExpression),此时dynamodb:Attributes上下文变量不会被填充,条件不触发,所以拒绝策略完全不起作用,用户仍能看到敏感属性。
正确解决方案
需要调整策略逻辑,强制请求必须指定要访问的属性,同时拒绝包含敏感属性的操作,或者仅允许访问非敏感属性。以下是两种可行方案:
方案一:强制指定属性+拒绝敏感属性
该方案要求用户必须明确选择要查看的属性,同时禁止访问敏感属性,控制台默认的“查看所有属性”操作会被拒绝。
{ "Version": "2012-10-17", "Statement": [ // 允许指定了ProjectionExpression的合法请求 { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query" ], "Resource": "arn:aws:dynamodb:<region>:<account-id>:table/my-table", "Condition": { "Null": { "dynamodb:Attributes": "false" } } }, // 拒绝任何包含敏感属性的请求 { "Effect": "Deny", "Action": [ "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query" ], "Resource": "arn:aws:dynamodb:<region>:<account-id>:table/my-table", "Condition": { "ForAnyValue:StringEquals": { "dynamodb:Attributes": [ "sensitive_attribute" ] } } } ] }
方案二:仅允许访问非敏感属性
该方案直接指定用户可访问的所有非敏感属性,任何包含敏感属性的请求都会被拒绝。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query" ], "Resource": "arn:aws:dynamodb:<region>:<account-id>:table/my-table", "Condition": { "ForAllValues:StringEquals": { "dynamodb:Attributes": [ "attr1", "attr2", "attr3" // 替换为你的所有非敏感属性 ] } } } ] }
控制台操作说明
应用上述策略后,用户在AWS控制台查看表数据时,需要手动在查询/扫描页面的“投影表达式”输入框中填写允许的属性名称,才能正常查看数据;如果尝试直接查看所有属性,会收到权限不足的提示。
目前AWS控制台没有自动过滤敏感属性的功能,必须通过IAM策略限制属性访问,同时用户需配合指定投影表达式来查看合法数据。
内容的提问来源于stack exchange,提问作者mincom
相关产品推荐
相关产品推荐

