是否可以为我系统中的每个用户动态创建一个访问/密钥,以允许他们在具有特定前缀的存储桶上读/写/列出内容。
例如:我的存储桶是userDataBucket。 ID为77的用户已登录。我想将他发送到客户端访问/密码,以便他可以使用此目录:
s3://userDataBucket/users/77/
他必须只使用此目录,并且无权访问任何其他目录。
这样的事情可能吗?
答案 0 :(得分:0)
注意:您应该查看iam limits on users and policies。使用有限用户/策略进行扩展是有限制的,例如,您最多只能拥有5000个IAM用户,250个角色和100个组。如果您需要可扩展的解决方案,请考虑使用temporary credentials。
这是一个允许访问/users/${username}
存储桶中userDataBucket
目录的IAM策略。该策略使用一个变量,以便任何经过身份验证的用户都可以访问与其用户名匹配的目录。如果计划是使用IAM用户,您可以将其应用于存储桶并将其用作全局策略。
{
"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软件开发工具包提供了自动创建策略文档的方法,以及将它们附加到用户和组的功能。 Java SDK中的一些示例方法:
AmazonIdentityManagementClient.createPolicy() AmazonIdentityManagementClient.attachUserPolicy() AmazonIdentityManagementClient.attachGroupPolicy()