首页 > 解决方案 > 如何只允许一个服务角色将对象放入 Amazon S3 存储桶

问题描述

我在 AWS 账户上有一个 Amazon S3 存储桶“my-bucket”。现在帐户中的每个人都可以下载对象并将其放入“我的存储桶”。但是,我希望每个人都能够从存储桶中下载/删除对象,并且只有一个服务角色(lambda)能够将对象放入桶。

lambda 角色已经可以访问存储桶的 PutObjects,所以我想我想制定一个存储桶策略,只允许我的 lambda 角色使用 PutObjects,但仍然允许其他人下载/删除存储桶上的对象。但是,我不确定该存储桶策略的外观。我想我必须使用条件?就像是?

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"MyRule",
      "Effect": "Deny",
      "Action":["s3:PutObject"],
      "Resource": ["arn:aws:s3:::my-bucket/*", "arn:aws:s3:::my-bucket*"],
      "Condition":{"NOT EQUAL TO LAMBDA ROLE???"}
    }
  ]
}

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-iamaws-policies

解决方案


存储桶策略是基于资源的策略,因此原则可用于限制对特定身份的访问,您可以为每个人准备如下策略以下载和删除对象

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicReadDelete",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject","s3:DeleteObject"],
      "Resource":["arn:aws-cn:s3:::/*"]
    }
  ]
}

以下 lambda 放置对象的策略

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"LambdaUpload",
      "Effect":"Allow",
      "Principal": "<your lambda function ARN>",
      "Action":["s3:PutObject"],
      "Resource":["arn:aws-cn:s3:::/*"]
    }
  ]
}

您可以将这两个语句组合在同一个策略中。您只需要替换您的 lambda 函数 ARN 和 S3 存储桶 ARN 或名称


推荐阅读