所有用户/管理员的对象创建/删除/更新限制,但特定限制除外:AWS S3 存储桶策略



我有一个 lambda 函数,当特定 S3 存储桶中发生创建对象操作时会触发该函数。我需要在我的存储桶中为所有用户/角色(包括管理员(但特定用户进行以下限制。它们是:

  • 拒绝对象创建(意味着手动上传存储桶或其子文件夹中的任何位置的新文件(
  • 拒绝对象删除(意味着手动删除存储桶或其子文件夹中任意位置的现有文件(
  • 拒绝对象覆盖或复制(意味着手动覆盖具有相同名称的文件或在存储桶及其子文件夹中的任何位置复制该文件 - 请注意,版本控制处于关闭状态(
  • 拒绝对象重命名(意味着手动重命名存储桶或其子文件夹中的现有文件(

我还需要保留内联策略中指定的所有 lambda 对我的存储桶的写入访问权限。为了实现上述所有目标,我制定了以下存储桶策略:

{
"Id": "my-bucket-policy",
"Statement": [
{
"Action": [
"s3:DeleteObject",
"s3:PutObject"
],
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::1234555:user/allowedUser"
]
},
"Resource": [
"arn:aws:s3:::my.bucket/",
"arn:aws:s3:::my.bucket/*"
]
}
],
"Version": "2012-10-17"
}

这不起作用,并且返回我"策略中的主体无效"消息。你能看出我的政策有什么明显的问题吗?这是满足我要求的正确方法吗?

谢谢

我已经在我的环境中尝试了您的策略,它对我有用。

您的逻辑是正确的,但是即使您在 Lambda 执行策略中允许 s3:putObject 操作,您的 Lambda 函数也无法写入存储桶。存储桶策略显式拒绝除允许的用户之外对存储桶的所有写入,并且在 AWS 策略中,显式拒绝始终获胜。

解决方案是在 NotPrincipal 中包含 Lambda 执行角色。

请注意,putObject 和 deleteObject 都是对象级操作,因此您无需在存储桶策略中指定顶级存储桶 ARN (arn:aws:s3:::my.bucket/( 作为资源。

最新更新