Amazon web services S3-为每个用户提供用户数据目录的访问/密钥
是否可以为我的系统中的每个用户动态创建访问/密钥,以允许他们读取/写入/列出具有特定前缀的bucket上的内容 例如:我的bucket是userDataBucket。 id为77的用户已登录。我想将他发送到客户端access/secret,以便他可以使用此目录:Amazon web services S3-为每个用户提供用户数据目录的访问/密钥,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,是否可以为我的系统中的每个用户动态创建访问/密钥,以允许他们读取/写入/列出具有特定前缀的bucket上的内容 例如:我的bucket是userDataBucket。 id为77的用户已登录。我想将他发送到客户端access/secret,以便他可以使用此目录: s3://userDataBucket/users/77/ 他必须只使用此目录,不能访问任何其他目录 这样的事情可能吗?注意:你应该复习一下。有限用户/策略的扩展存在限制,例如,最多只能有5000个IAM用户、250个角色和100个组
s3://userDataBucket/users/77/
他必须只使用此目录,不能访问任何其他目录
这样的事情可能吗?注意:你应该复习一下。有限用户/策略的扩展存在限制,例如,最多只能有5000个IAM用户、250个角色和100个组。如果需要一个可扩展的解决方案,请考虑使用。 这里有一个IAM策略,允许访问
userDataBucket
存储桶中的/users/${username}
目录。该策略使用一个变量,以便任何经过身份验证的用户都可以访问与其用户名匹配的目录。如果计划使用IAM用户,您可以将其应用于bucket并将其用作全局策略
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowListingWithinUserDirectory",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::userDataBucket"],
"Condition":{"StringLike":{"s3:prefix":["users/${aws:username}/*"]}}
},
{
"Sid": "AllowAllActionsWithinUserDirectory",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::userDataBucket/users/${aws:username}/*"]
}
]
}
如果要通过自动增量id显式标识每个用户,显式策略如下所示:
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowListingWithinUserDirectory",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::userDataBucket"],
"Condition":{"StringLike":{"s3:prefix":["users/77/*"]}}
},
{
"Sid": "AllowAllActionsWithinUserDirectory",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::userDataBucket/users/77/*"]
}
]
}
AWS SDK提供了自动创建策略文档以及将其附加到用户和组的能力的方法。Java SDK中的一些示例方法:
我认为您需要的是为每个bucket管理角色和bucket策略。对于角色和用户被拒绝的情况,即使他们拥有完整的“s3:”不要将访问权/机密授予任何人,IAM角色和策略就足够了,您也可以制定非常严格的bucket策略。看到了吗?您的用户是否打算使用AWS SDK或S3兼容客户端直接读取/写入此S3存储桶?或者他们将通过您的应用程序写入此s3命名空间?@DaveMaple直接通过客户端SDK(js、android、ios)他们需要永久(永不过期)凭据还是临时cognito凭据有效:?您在谈论多少用户?根据这一点,可能会有不同的解决方案。是否可以为每个用户动态创建此策略?@MosheShaham:根据要求,我从Java SDK中添加了一些示例方法,用于创建策略并将其附加到用户或组。在许多不同的SDK语言中也可以使用相同的方法。