我希望有一个只有一个 IAM 用户可以使用 AWS 控制台访问、列出其内容并访问其中的对象文件的存储桶。
因此,我已经创建了 IAM 用户、存储桶本身以及稍后:
桶策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0000000:user/dave"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::testbucket1234"
},
{
"Sid": "statement2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0000000:user/dave"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::testbucket1234/*"
}
]
}
还有一个附加到我的用户组的内联策略,如下所示:
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:*Object",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::testbucket1234/*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
现在:我可以列出我的存储桶、访问所需的存储桶、列出其内容(到目前为止一切顺利)。问题是当我尝试打开存储桶内的一个文件对象时,出现“访问被拒绝”错误。如果我将对象设为公开,我可以访问它,但我也可以使用其他 IAM 帐户访问它,这不是本意。我想仅通过使用此特定 IAM 帐户来访问存储桶、列出其内容和访问对象。我究竟做错了什么?我怎样才能达到这个目标?提前致谢。
答案 0 :(得分:0)
默认情况下,没有 IAM 用户可以访问任何存储桶。只有授予用户权限才能访问资源。
但是,许多人倾向于为所有存储桶授予 Amazon S3 权限,至少对于管理员。这使得删除权限变得困难,因此存储桶只能由一个用户访问。虽然可以通过 Deny
策略完成,但此类策略难以正确制定。
对于特定数据只能由一个用户或特定用户组(例如 HR 员工)访问的情况,我建议您创建一个单独的 AWS 账户并仅向特定 IAM 用户或IAM 组通过存储桶策略(跨账户运行良好)。这样,任何授予“所有存储桶”访问权限的通用策略都不会应用于此单独帐户中的存储桶。
更新:访问私有对象
扩展下面评论中提到的内容,授权用户可以访问 Amazon S3 中的私有对象。但是,在访问对象时,需要识别谁正在访问该对象,并且必须证明他们的身份。这可以通过以下几种方式之一完成: