amazon-web-services - 如何只允许一个服务角色将对象放入 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???"}
}
]
}
解决方案
存储桶策略是基于资源的策略,因此原则可用于限制对特定身份的访问,您可以为每个人准备如下策略以下载和删除对象
{
"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 或名称
推荐阅读
- maven - 当预集成测试失败时执行集成后测试阶段
- laravel - ImageMagick 或 GraphicsMagick 与 Laravel webpack 和 NPM
- ruby-on-rails - 如何迭代 ActiveRecord 对象的关联对象
- c++ - SFML 在 xcode 中打开图像文件?
- ios - Firebase Firestore:如何实现“点赞”系统?
- python - 在 Tkinter 中将其用作背景时不显示图像
- c# - 在单元测试中反序列化 appsettings.json
- mariadb - MariaDB 社区服务器 10.5 Alpha 上的 MariaDB 列存储 1.4
- jquery - 在 codeigniter 项目中放置外部脚本和 css 的位置
- python - 将一个数据集分成多行,在单行中包含多列 - 熊猫