gpt4 book ai didi

amazon-web-services - AWS 为 S3 文件夹级别访问生成动态凭证?

转载 作者:行者123 更新时间:2023-12-04 08:03:07 28 4
gpt4 key购买 nike

我是 AWS 的新手,仍在弄清楚如何做事。

我的 Web 应用程序的一部分使用 AWS S3 进行文件存储,但我希望每个用户只能访问存储桶中的特定文件夹(用于 CRUD)。
后端服务器将跟踪用户将能够访问的文件夹。

我知道可以定义允许访问特定文件夹的策略(通过匹配对象的前缀),但是我可以动态生成这些策略并获取附加了这些策略的凭据(可能使用 Cognito?)。以便这些凭据可以传递到客户端以启用对 S3 文件夹的访问。

我想知道是否有可能做到这一点以及实现这一目标需要哪些服务。

最佳答案

你应该改变你的观点,每次你想与你的一个用户共享一个文件时,你应该检查你的数据库关于他们的权限(他们有权访问的文件夹),如果你这边的逻辑事情是正确的,生成一个预先签名的 URL 以供访问到那个对象。

enter image description here

预签名 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 的以下文章:

https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

关于amazon-web-services - AWS 为 S3 文件夹级别访问生成动态凭证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com