如何为默认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
相关产品推荐
相关产品推荐

