我正在尝试设置 AWS Transfer 来托管多个用户帐户,例如:
/my-bucket/<username>
我已经定义了一个基本角色和一个缩小范围的角色,但它无法限制仅访问用户的个人主目录,并且用户仍然能够在存储桶中移动。
我需要防止用户看到其他用户的主目录数据。我读过一些关于执行 的内容chroot
,但我正在使用转移用户,甚至不确定这是否适用于我的情况。
我希望有人能帮我解决这个问题,或者告诉我我做错了什么,以便按照我需要的方式修复它。以下是我定义的角色配置。
我的基本职责是:
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
以及缩小角色范围
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListHomeDir",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::${transfer:HomeBucket}/${transfer:UserName}"
},
{
"Sid": "AWSTransferRequirements",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObjectVersion",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::${transfer:HomeDirectory}*"
}
]
}
答案1
根据 AWS创建范围缩小策略文档及其提供的示例,似乎您需要根据"Sid": "AllowListingOfUserFolder"
该指导利用和构建不同的配置,但与其示例类似。
我引用并参考了帖子的具体部分,这些部分应该可以帮助您更好地确定如何构建 JSON 配置以获得所需的结果,就像他们那里提供的示例一样。
创建范围缩小策略
范围缩小策略是一种 AWS Identity and Access Management (IAM) 策略,它将用户限制在 Amazon S3 存储桶的某些部分。它通过实时评估访问权限来实现这一点。
当您需要向一组用户授予对 Amazon S3 存储桶特定部分的相同访问权限时,可以使用范围缩小策略。 例如,一组用户可能只需要访问主目录。该组用户共享相同的 IAM 角色。
要创建范围缩小策略,请在 IAM 策略中使用以下策略变量:
${transfer:HomeBucket}
${transfer:HomeDirectory}
${transfer:HomeFolder}
${transfer:UserName}
下面的代码示例显示了范围缩小策略的示例。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::${transfer:HomeBucket}" ], "Condition": { "StringLike": { "s3:prefix": [ "${transfer:HomeFolder}/*", "${transfer:HomeFolder}" ] } } }, { "Sid": "HomeDirObjectAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": "arn:aws:s3:::${transfer:HomeDirectory}*" } ] }