如何通过模式匹配限制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
相关产品推荐
相关产品推荐

