如何创建自定义IAM策略,仅允许查看DynamoDB标记的JSON格式S3对象
解决思路:仅允许访问DynamoDB标记为.json的S3对象
直接通过IAM策略无法实现跨服务关联DynamoDB的条件判断——IAM的条件规则只能基于请求上下文或资源本身的属性,没法直接查询DynamoDB的数据作为权限校验依据。以下是几个可行的实现方案:
方案1:用Lambda作为访问代理
- 不让用户直接访问S3,要求他们调用专门的Lambda函数来获取对象
- Lambda核心逻辑:
- 接收用户请求的S3对象路径
- 查询DynamoDB,确认该对象对应的
extension字段为json - 验证通过后,从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
相关产品推荐
相关产品推荐

