Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services S3-为每个用户提供用户数据目录的访问/密钥_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services S3-为每个用户提供用户数据目录的访问/密钥

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个组

是否可以为我的系统中的每个用户动态创建访问/密钥,以允许他们读取/写入/列出具有特定前缀的bucket上的内容

例如:我的bucket是userDataBucket。 id为77的用户已登录。我想将他发送到客户端access/secret,以便他可以使用此目录:

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语言中也可以使用相同的方法。