是S3存储桶策略,以允许S3访问AWS控制台中的当前Aunicicated用户?

时间:2020-01-30 11:42:14

标签: amazon-web-services amazon-s3 amazon-cognito

我有一个应用程序,正在使用Cognito对用户进行身份验证并给予对AWS Console的临时访问权,但是该用户能够看到所有其他存储桶,我希望该用户只能看到或访问由他创建的存储桶。

当前,我已经向Cognito用户提供了S3FullAccess策略。谁能建议我应附上哪个政策?

根据我的研发,我可以找到一些策略来限制特定用户或允许特定用户,但是我的用户将是动态的,因此我无法对值和策略进行硬编码,例如允许/限制对特定存储桶的访问,我希望只有创建存储桶的用户才能访问其他用户。

这是我发现的东西

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets",
            "s3:GetBucketLocation"
        ],
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::bucket-name",
        "Condition": {
            "StringLike": {
                "s3:prefix": [
                    "",
                    "home/",
                    "home/${aws:userid}/*"
                ]
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::bucket-name/home/${aws:userid}",
            "arn:aws:s3:::bucket-name/home/${aws:userid}/*"
        ]
    }
]
      }

但这列出了所有存储桶,并且唯一可访问的存储桶是上面的代码中的内容,对于新用户,我希望它不显示任何内容,并且在创建时应该仅显示

1 个答案:

答案 0 :(得分:1)

这并非易事,您将需要创建自己的策略并强制执行某些约定。您有3个选择。

但是首先,如果每个用户只需要他们自己的S3空间,请查看S3前缀[此处]( https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-3-roles-and-policies/)您也可以在S3资源存储桶中执行此操作。我有一个执行此操作的模板here in gitlab

现在回到回答您的问题。

  • 选项1;在创建“所有者”标签与其标识相同的存储桶时,他们将需要设置一个标签。我删除了这个标签,因为尽管IAM策略中列出了该标签,但我确信它不会与S3一起使用。

  • 选项2:存储桶名称的前缀等于其标识。

然后,您可以使用IAM策略中的变量和标签功能。 Read here

请注意,coginto用户是Web联合身份,因此变量aws:username对您不可用。使用aws:userid变量,值将为角色id:caller-specified-role-name,其中角色id是角色的唯一ID,并且由传递给AssumeRoleWithWebIdentity的RoleSessionName参数指定调用者指定的角色名称请求

  • 选项3:使用IAM访问策略

目前我找不到如何操作的链接。但是here的详细说明。

问:登录控制台后,如何控制联盟用户被允许做什么? 当您请求联盟的临时安全凭证时 用户使用AssumeRole API,您可以选择包含访问权限 要求的政策。联盟用户的特权是 传递的访问策略授予的权限的交集 附加到IAM角色的请求和访问策略 假定。与请求一起传递的访问策略无法提升 假定与IAM角色相关联的特权。当你 要求您的联盟用户使用临时安全凭证 GetFederationToken API,则必须提供访问控制策略 与请求。联盟用户的特权是交叉点 由访问策略传递的访问权限所授予的权限 请求和附加到所使用的IAM用户的访问策略 提出要求。与请求一起传递的访问策略不能 提升与用于创建IAM用户的权限相关的特权 请求。这些联合用户权限适用于API访问权限和 在AWS管理控制台中执行的操作。

这种方法的好处是您可以通过编程方式创建访问策略。