Amazon dynamodb 在dynamodb的细粒度访问策略中是否可以使用通配符(*)?

Amazon dynamodb 在dynamodb的细粒度访问策略中是否可以使用通配符(*)?,amazon-dynamodb,amazon-iam,Amazon Dynamodb,Amazon Iam,我有一个AmazonDynamodb表,它的分区键由用户id(来自facebook或google)和其他字符组成。我知道可以使用通配符指定细粒度访问策略的属性,但我无法在dynamodb:LeadingKeys中使用通配符 工作方针如下: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:B

我有一个AmazonDynamodb表,它的分区键由用户id(来自facebook或google)和其他字符组成。我知道可以使用通配符指定细粒度访问策略的属性,但我无法在
dynamodb:LeadingKeys
中使用通配符

工作方针如下:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "dynamodb:BatchGetItem",
              "dynamodb:BatchWriteItem",
              "dynamodb:DeleteItem",
              "dynamodb:GetItem",
              "dynamodb:PutItem",
              "dynamodb:Query",
              "dynamodb:UpdateItem"
          ],
          "Resource": [
              "arn:aws:dynamodb:<region>:<...>:table/<table-name>"
          ],
          "Condition": {
              "ForAllValues:StringEquals": {
                  "dynamodb:LeadingKeys": [
                      "g_${accounts.google.com:sub}"
                  ]
              }
          }
      }
  ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“dynamodb:BatchGetItem”,
“dynamodb:BatchWriteItem”,
“dynamodb:DeleteItem”,
“dynamodb:GetItem”,
“dynamodb:PutItem”,
“dynamodb:Query”,
“dynamodb:更新项”
],
“资源”:[
“arn:aws:dynamodb:::表格/”
],
“条件”:{
“ForAllValues:StringEquals”:{
“dynamodb:引线键”:[
“g_${accounts.google.com:sub}”
]
}
}
}
]
}
但是,这不起作用:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "dynamodb:BatchGetItem",
              "dynamodb:BatchWriteItem",
              "dynamodb:DeleteItem",
              "dynamodb:GetItem",
              "dynamodb:PutItem",
              "dynamodb:Query",
              "dynamodb:UpdateItem"
          ],
          "Resource": [
              "arn:aws:dynamodb:<region>:<...>:table/<table-name>"
          ],
          "Condition": {
              "ForAllValues:StringEquals": {
                  "dynamodb:LeadingKeys": [
                      "*_${accounts.google.com:sub}"
                  ]
              }
          }
      }
  ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“dynamodb:BatchGetItem”,
“dynamodb:BatchWriteItem”,
“dynamodb:DeleteItem”,
“dynamodb:GetItem”,
“dynamodb:PutItem”,
“dynamodb:Query”,
“dynamodb:更新项”
],
“资源”:[
“arn:aws:dynamodb:::表格/”
],
“条件”:{
“ForAllValues:StringEquals”:{
“dynamodb:引线键”:[
“*${accounts.google.com:sub}”
]
}
}
}
]
}

我找到了解决这个问题的方法。因此,不要使用
ForAllValues:StringEquals
,而是使用
ForAllValues:StringLike

工作方针如下:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "dynamodb:BatchGetItem",
              "dynamodb:BatchWriteItem",
              "dynamodb:DeleteItem",
              "dynamodb:GetItem",
              "dynamodb:PutItem",
              "dynamodb:Query",
              "dynamodb:UpdateItem"
          ],
          "Resource": [
              "arn:aws:dynamodb:<region>:<...>:table/<table-name>"
          ],
          "Condition": {
              "ForAllValues:StringLike": {
                  "dynamodb:LeadingKeys": [
                      "*_${accounts.google.com:sub}"
                  ]
              }
          }
      }
  ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“dynamodb:BatchGetItem”,
“dynamodb:BatchWriteItem”,
“dynamodb:DeleteItem”,
“dynamodb:GetItem”,
“dynamodb:PutItem”,
“dynamodb:Query”,
“dynamodb:更新项”
],
“资源”:[
“arn:aws:dynamodb:::表格/”
],
“条件”:{
“ForAllValues:StringLike”:{
“dynamodb:引线键”:[
“*${accounts.google.com:sub}”
]
}
}
}
]
}

我花了一段时间才找到这个参考资料:

我很惊讶我竟然找到这么少的参考资料。从文档中可以看出,似乎您只能基于整个分区键进行行级访问控制,在许多情况下,如果您还需要访问控制,则可能会强制使用课程分区键。这提供了更大的灵活性。谢谢,文档对此不是很清楚(与AWS一样)。那么,对于一个名为“{cognito_identity_id}:{other_identity_id}”的散列键,这理论上能起作用吗。我猜您不能使用多个通配符匹配,但可能有两个条件并切换为all->ForAny?