如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?
Posted
技术标签:
【中文标题】如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?【英文标题】:how to create a policy for DynamoDB where the user id is equal to DyanmoDB table name? 【发布时间】:2020-11-02 07:35:38 【问题描述】:我正在尝试创建一个 DDB 策略,其中 Cognito 用户 ID(子)应等于 DynamoDB 表名称。 DDB 中的表名是用户的 id (sub)。 因此,该策略应仅限制该用户对用户表的访问。 下面是我创建的伪策略。
我不清楚的是如何指定用户 id ( sub ) 应该等于 DDB 表名?
"Version": "2020-11-01",
"Statement": [
"Sid": "xxxxxxxxxxxxxx",
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"dynamodb:Query",
],
"Resource": [ "arn:aws:dynamodb:<REGION>:<ACCOUNT_ID>:table/<$www.amazon.com:user_id>"]
DDB TABLE NAME SHOULD MATCH USER ID HERE $www.amazon.com:user_id
]
【问题讨论】:
【参考方案1】:很遗憾,您目前无法使用 DynamoDB 执行此操作。这是因为 DynamoDB 的表资源不支持任何条件键(请参阅https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html#amazondynamodb-resources-for-iam-policies)。
您唯一可以做的就是使用dynamodb:LeadingKeys
条件限制每个前导键的访问。这再次仅适用于 Query
操作。不适用于Scan
(显然)。您的政策将如下所示:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Query"
],
"Resource": ["arn:aws:dynamodb:*:*:table/MyTable"],
"Condition":
"ForAllValues:StringEquals":
"dynamodb:LeadingKeys": ["$cognito-identity.amazonaws.com:sub"]
]
【讨论】:
以上是关于如何为用户 id 等于 DynamoDB 表名的 DynamoDB 创建策略?的主要内容,如果未能解决你的问题,请参考以下文章