【问题标题】:S3 Bucket Policy to allow S3 Access to Current Authenicated user in AWS Console?允许 S3 访问 AWS 控制台中当前经过身份验证的用户的 S3 存储桶策略?
【发布时间】:2020-05-16 00:35:36
【问题描述】:

我有一个应用程序,我在其中使用 Cognito 对用户进行身份验证并授予对 AWS 控制台的临时访问权限,但该用户能够查看所有其他存储桶,我希望该用户应该能够查看或访问他创建的存储桶。

目前,我已向 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}/*"
        ]
    }
]
      }

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

【问题讨论】:

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


    【解决方案1】:

    这并不容易,您需要创建自己的策略并执行一些约定。您有 3 个选项。

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

    现在回到回答你的问题。

    • 选项 1;他们需要在创建存储桶时设置一个标签,其中“所有者”标签等于他们的身份。我删除了这个标签,因为尽管在 IAM 政策中列出,但我很确定它没有与 S3 一起工作。

    • 方案二:bucket名称前缀等于其身份。

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

    请注意,coginto 用户是网络联合身份,因此变量 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 管理控制台中执行的操作。

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

    【讨论】:

    • 我无法创建这样的策略,你能帮我吗?
    • EC2 是否可行?
    • 不,目前对于 EC2 是不可能的。 IAM 文档实际上有一段说明它是可能的,但它不是。
    • @ManishGoyal 您能否提供有关该错误的更多详细信息,因为我没有提供实际政策,也不确定您所引用的内容。
    • 你在 GitLab 链接中提供的政策正在发挥作用,但没有什么像我正在寻找的私人空间
    猜你喜欢
    • 2020-12-18
    • 2017-03-25
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2017-06-13
    • 2021-06-28
    相关资源
    最近更新 更多