我是AWS的新手,仍然想知道如何做事。
我的Web应用程序的一部分正在使用AWS S3进行文件存储,但是我希望每个用户只能访问存储桶中的特定文件夹(用于CRUD)。 后端服务器将跟踪用户将能够访问哪些文件夹。
我知道可以定义允许访问特定文件夹的策略(通过匹配对象的前缀),但是我可以动态生成这些策略并获得附加了这些策略的凭据(可能是Cognito吗?)。这样就可以将这些凭据传递到客户端以启用对S3文件夹的访问。
我想知道是否有可能做到这一点,以及实现这一目标需要哪些服务?
答案 0 :(得分:0)
您应该更改视图,每次要与一个用户共享文件时,都应检查数据库中有关其权限(他们有权访问的文件夹)的信息,如果您身边的逻辑正确,请生成一个预签名用于访问该对象的URL。
预签名URL的工作方式。
在生成用于访问对象的预签名URL时,您也可以设置时间限制,这意味着在此时间之后,该URL不起作用并且已过期。
有关预签名URL的更多信息,请阅读Amazon Web Services网站上的以下文档:
Generate a Pre-signed Object URL Using the AWS SDK for Java
Generate a Pre-signed Object URL Using AWS SDK for .NET
此外,如果您要创建用户并为访问他们的文件夹分配正确的策略,则可以按照以下说明进行操作:
您可以使用IAM API为每个用户创建一个用户,并为每个用户附加正确的策略。 例如,要创建新用户,应使用以下API
/* The following create-user command creates an IAM user named Bob in the current account. */
var params = {
UserName: "Bob"
};
iam.createUser(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
User: {
Arn: "arn:aws:iam::123456789012:user/Bob",
CreateDate: <Date Representation>,
Path: "/",
UserId: "AKIAIOSFODNN7EXAMPLE",
UserName: "Bob"
}
}
*/
});
有关创建用户API的更多信息,请阅读以下内容
https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html
创建用户后,您应该使用CreatePolicy API为每个用户创建一个策略。
var params = {
PolicyDocument: 'STRING_VALUE', /* required */
PolicyName: 'STRING_VALUE', /* required */
Description: 'STRING_VALUE',
Path: 'STRING_VALUE'
};
iam.createPolicy(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
有关“创建”策略的更多信息,请阅读以下文档:
https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html
最后,您应该通过AttachUserPolicy API将之前创建的策略分配给每个用户。
/* The following command attaches the AWS managed policy named AdministratorAccess to the IAM user named Alice. */
var params = {
PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess",
UserName: "Alice"
};
iam.attachUserPolicy(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
有关AttachUserPolicy API的更多信息,请阅读以下文档:
https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachUserPolicy.html
最后一部分是关于应创建并分配给每个策略的策略的信息。我们使用以下策略列出每个文件夹中的对象:
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
}
以及每个文件夹中操作的以下策略:
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-company/home/David/*"]
}
有关该政策的更多详细信息,请阅读 Jim Scharf 的以下文章: