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

如何创建自定义IAM策略,仅允许查看DynamoDB标记的JSON格式S3对象

解决思路:仅允许访问DynamoDB标记为.json的S3对象

直接通过IAM策略无法实现跨服务关联DynamoDB的条件判断——IAM的条件规则只能基于请求上下文或资源本身的属性,没法直接查询DynamoDB的数据作为权限校验依据。以下是几个可行的实现方案:

方案1:用Lambda作为访问代理

  • 不让用户直接访问S3,要求他们调用专门的Lambda函数来获取对象
  • Lambda核心逻辑:
    1. 接收用户请求的S3对象路径
    2. 查询DynamoDB,确认该对象对应的extension字段为json
    3. 验证通过后,从S3拉取对象内容返回给用户;不通过则返回拒绝信息
  • 给用户配置的IAM策略仅允许调用该Lambda函数,不直接授予S3访问权限

方案2:基于S3对象路径的IAM条件(限路径有规律场景)

如果所有extension为json的S3对象都遵循统一路径规则(比如文件名以.json结尾,或存放在特定前缀下),可以直接用IAM策略的条件限制:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket/*",
      "Condition": {
        "StringLike": {
          "s3:object-key": "*.json"
        }
      }
    }
  ]
}

注意:这个方案的前提是DynamoDB中的extension和S3对象路径的后缀严格一致,否则会出现权限不匹配的情况。

方案3:S3访问点+自定义授权

  • 创建S3访问点,启用自定义授权功能,指定一个Lambda作为授权方
  • 用户通过该访问点请求S3对象时,AWS会调用授权Lambda,传递请求中的对象键等信息
  • Lambda查询DynamoDB验证该对象的extension是否为json,返回允许/拒绝的授权结果
  • 给用户配置IAM策略,允许他们通过该访问点执行s3:GetObject操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:07:46