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

如何为默认S3触发Lambda角色添加写入权限?为何权限未显示?

关于S3触发Lambda的IAM策略权限警告及写入权限不显示问题

问题描述

更新S3触发Lambda的模板时,收到AWS警告:

此策略定义的某些操作、资源或条件未提供权限。授予访问权限时,策略必须包含具有适用资源或条件的操作。

添加第二条包含四个操作的语句后,当前IAM策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::mybucket"
        }              
    ]
}

点击“显示剩余权限”后,仅看到“S3 受限:读取 BucketName | 字符串匹配 | 全部 无”,所有资源均显示“无”,疑问:为何未显示“写入”权限?这是否属于问题?

问题分析与解决

  • 权限警告的原因:第一条语句里,s3:GetObject是针对S3对象的操作,需要的资源ARN格式是arn:aws:s3:::bucket-name/*(对象级),但你写的是arn:aws:s3:::*(桶级),操作和资源不匹配,AWS识别到这个无效配置,所以抛出警告。
  • 写入权限不显示的原因:第二条语句里的DeleteObject、PutObject、PutObjectAcl都是对象级操作,同样需要指向对象路径(arn:aws:s3:::mybucket/*),但你只指定了桶级ARNarn:aws:s3:::mybucket,这些操作实际上没有被正确授权,IAM权限模拟器自然识别不到写入权限,也就不会显示。
  • 这当然是问题:如果不修正,Lambda函数执行这些写入、删除操作时,会直接返回权限不足的错误,导致功能失效。

修正后的IAM策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        // 如果需要允许读取所有桶的对象,修正资源ARN为对象路径
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::*/*"
        },
        // 针对指定桶的对象操作,修正资源ARN为对象路径
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::mybucket/*"
        }              
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:25:25