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

如何通过模式匹配限制DynamoDB项访问?IAM策略配置问题排查

问题描述

我想创建一条IAM策略,仅当键结构符合指定模式时允许执行PutItem操作,以下是我编写的策略:

- Effect: 'Allow'
  Action:
    - dynamodb:PutItem
  Resource:          
    - !Sub 
      - "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${Prefix}_tablename" 
      - Prefix: !FindInMap [ !Ref "AWS::AccountId", !Ref "AWS::Region", Prefix ]
  Condition:
    StringLike:
      dynamodb:LeadingKeys:
        - '*MY_SUFFIX'

我原本期望这条策略允许创建分区键任意、排序键为X_MY_SUFFIX的DynamoDB项,但实际没生效。我猜测dynamodb:LeadingKeys只作用于分区键而非排序键,也试过把它设为字符串和数组形式,都没用。请问我忽略了什么?

解决方案

你的猜测完全正确:dynamodb:LeadingKeys仅针对**分区键(Partition Key)**生效,和排序键(Sort Key)没有任何关联,这就是策略不生效的核心原因。

要实现限制排序键格式的需求,你需要使用专门匹配排序键的条件键:dynamodb:SortKeys。

同时需要注意两个细节:

  • 若要允许任意分区键,需将dynamodb:LeadingKeys的StringLike规则设为*
  • IAM策略的条件默认是逻辑与(And),只需同时配置两个条件键,就能实现“分区键任意 + 排序键符合指定后缀”的限制

修改后的正确策略如下:

- Effect: 'Allow'
  Action:
    - dynamodb:PutItem
  Resource:          
    - !Sub 
      - "arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${Prefix}_tablename" 
      - Prefix: !FindInMap [ !Ref "AWS::AccountId", !Ref "AWS::Region", Prefix ]
  Condition:
    StringLike:
      dynamodb:LeadingKeys: '*'  # 允许任意分区键值
      dynamodb:SortKeys: '*MY_SUFFIX'  # 强制排序键以MY_SUFFIX结尾

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:22:12