Amazon web services AWS是否为S3文件夹级访问生成动态凭据?

Amazon web services AWS是否为S3文件夹级访问生成动态凭据?,amazon-web-services,amazon-s3,amazon-cognito,Amazon Web Services,Amazon S3,Amazon Cognito,我是AWS的新手,仍然在思考如何做事 我的web应用程序的一部分使用AWS S3进行文件存储,但我希望每个用户只能访问bucket中的特定文件夹(对于CRUD)。 后端服务器将跟踪用户能够访问的文件夹 我知道可以定义允许访问特定文件夹的策略(通过匹配对象的前缀),但我可以动态生成这些策略并获取附加了这些策略的凭据(可能是使用Cognito?)。这样就可以将这些凭据传递到客户端,以便能够访问S3文件夹 我想知道是否有可能做到这一点,需要什么服务来实现这一点。您应该更改视图,每次您想与您的用户共享一

我是AWS的新手,仍然在思考如何做事

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

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


我想知道是否有可能做到这一点,需要什么服务来实现这一点。

您应该更改视图,每次您想与您的用户共享一个文件时,您应该检查您的数据库,了解他们的权限(他们可以访问的文件夹),以及您这边的逻辑是否正确,生成用于访问该对象的预签名URL

预签名URL的工作原理。

当您为访问对象生成一个预先签名的URL时,您也可以设置时间限制,这意味着在该时间之后,URL将不起作用并过期

有关预签名URL的更多信息,请阅读亚马逊Web服务网站上的以下文档:

此外,如果要创建用户并为其文件夹分配正确的访问策略,可以按照以下说明操作:

您可以使用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"
    }
   }
   */
 });
有关创建策略的更多信息,请阅读以下文档:

最后,您应该通过AttachUserPolicyAPI将之前创建的策略分配给每个用户

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
});
/* 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的更多信息,请阅读以下文档:

最后一部分是关于您应该创建哪些策略并将其分配给每个策略;我们使用以下策略列出每个文件夹中的对象:

{
  "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/*"]
}
以及每个文件夹中操作的以下策略:

{
  "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的以下文章:


你看了吗?它们可用于创建临时有效的URL以下载文件,然后您只能为特定用户服务。我相信如果你需要上传用户/客户端文件,你也可以生成预签名帖子。嗨,谢谢你的回复,但是我正在寻找支持,允许用户列出和删除对象。也许我应该在后端服务器上这样做?(用户向我的服务器发送删除请求,服务器代表用户进行身份验证并向S3发送删除请求)?太好了,这就是我想要的。非常感谢你。这肯定对其他人也有帮助。如果我的答案解决了您的问题,请单击大复选框将其作为答案接受。因此,我需要为应用程序中的每个用户创建IAM用户,为其附加策略,并为每个用户创建访问密钥。将密钥传递给用户后,他们可以通过编程方式访问S3,对吗?@JackMarchetti让我们想象一下,我们有一个拥有1000个用户的应用程序。我们是否要在AWS端为每个策略和用户创建策略和用户?