Json 亚马逊S3桶政策,我做错了什么?
我使用创建一个简单的规则为我的桶;规则应允许以下预期效果:Json 亚马逊S3桶政策,我做错了什么?,json,amazon-web-services,amazon-s3,Json,Amazon Web Services,Amazon S3,我使用创建一个简单的规则为我的桶;规则应允许以下预期效果: 根访问 限制对给定IAM用户的访问 允许对所有人进行只读访问 为此,我编写了以下规则,但有些规则没有按预期工作,特别是,我完全失去了对bucket元素的访问权限,在所有情况下都被“拒绝访问”,包括: 编辑:使用@jarmod answer,我可以设置预期的功能,但是它会触发一个警告,关于bucket是公共的,我看不出有什么区别。在没有策略的情况下,bucket仍然可以以只读方式公开访问。有什么区别 也许您可以按如下方式执行此操作:
- 根访问
- 限制对给定IAM用户的访问
- 允许对所有人进行只读访问
也许您可以按如下方式执行此操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::mybucket/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"NotAction": "s3:GetObject",
"Resource": [
"arn:aws:s3:::mybucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"iam-userid-here",
"root-userid-here"
]
}
}
}
]
}
要在此处获取iam用户ID
,请运行aws iam list users
,然后检索iam用户的用户ID
同样,要在此处获取根用户ID
,只需从先前aws iam列表用户的Arn中检索账号即可。根帐户用户ID是AWS帐户号
此处由IAM userid指示的IAM用户可以拥有允许S3访问的IAM策略。显式拒绝>显式允许>隐式拒绝。您的第一条和第二条语句应该被删除,并且您缺少一条允许“对所有人进行只读访问”的语句。@jarmod所以root是隐式允许的?我正在阅读,在这个示例中,他们为其他所有人设置了deny*
,并指定允许根访问。您不能有deny*和allow x,因为deny*是显式的,并且超过了所有允许。Root拥有对所有内容的隐式访问权限,但您不应该对任何内容使用Root凭据(请参阅AWS针对Root用户的最佳实践)。如果我阅读的是正确的示例,则您所指的指南中的拒绝示例具有条件策略语句,拒绝除特定角色和Root用户之外的所有访问权限。如果您特别希望覆盖S3 bucket的IAM级别权限,则可以使用此选项(例如,您可以拒绝实际拥有该bucket权限的IAM用户的访问)。据我所知,这不是你想做的,所以这项政策是不相关的。@jarmod是的,先生!根据我在列表中的第二个点,我试图限制对给定IAM用户的访问。这部分是有效的,允许所有人只读,我的意思是,也允许未登录的用户,如公共来宾。在bucket中,我上传了我想要共享的文件,提供了URL,而我的root用户和IAM用户可以访问该bucket,公众访问者被拒绝访问该文件。我不确定你的评论是什么意思。您是说您希望提供对对象的公共读取访问,但不允许IAM用户(除一个特定用户外)读取它们?若然,原因为何?给予公众阅读权限当然意味着每个人。我误读了您共享的代码,使用的工具我无法设置NotAction
,并且一开始无法工作。我想创建一个共享文件夹来发送文件,IAM用户是一个上传文件的应用程序。我只是想知道为什么它将bucket标记为public,而它也可以在没有策略的情况下访问。我假设您指的是AWS S3控制台如何强调bucket是public这一事实。如果没有某种形式的策略允许,bucket内容将无法公开访问。如果您说您可以访问,并且浏览器成功下载或显示了您的文件,那么S3对象是公开的。它是公共的,因为要么有一个bucket策略将其公开,要么有对象级ACL将其公开。