当前位置: 首页 > 知识库问答 >
问题:

身份验证时无法访问匿名上传的S3对象

公西兴业
2023-03-14

我有一个S3存储桶,其中包含以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-bucket/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::my-bucket"
        }
    ]
}

从任何web客户端上载和删除对象都可以,无需任何身份验证,例如cURL。

但是,如果我作为IAM用户进行了身份验证(没有任何策略,甚至没有AmazonS3ReadOnlyAccess策略),我在尝试访问(get)匿名上传的对象时会收到403个错误。可以访问以非匿名方式(例如通过S3控制台)上传的其他对象。发生了什么事?

重述:

  • 匿名用户:
    • 可以上传文件到桶中
    • 可以下载文件从桶上传自己或由任何其他用户
    • 可以将文件上载到存储桶中

    PS:根据IAM策略模拟器,匿名上传的文件应由IAM用户下载。

共有1个答案

蒙勇
2023-03-14

这实际上是预期的行为:

不可能对S3进行匿名Put和私有Get。结果是匿名用户拥有该对象。

我犯的错误是,假设使用*主体设置策略意味着“所有人”,而实际上in仅意味着“匿名用户”。而另一个用户无法访问由用户“拥有”的对象(包括特殊的匿名用户)(除非您对对象本身设置策略)。事实上,其他用户可以“看到”对象,因为它有权“列出”bucket,但这并不意味着它可以读取其内容。

 类似资料:
  • 在本章中,我们将匿名认证用户。 步骤1 - 启用匿名身份验证 这和我们以前的章节是一样的。需要打开Firebase信息中心,点击侧边菜单中的Auth和标签栏内的认证方法,需要启用匿名身份验证。 第2步 - 登录功能 可以使用方法进行此认证。 示例 让我们来看看下面的例子,参考示例代码 -

  • 在本章中,我们将匿名验证用户。 第1步 - 启用匿名身份验证 这与我们前面章节中的过程相同。 您需要打开Firebase仪表板,单击侧面菜单中的Auth和标签栏内的SIGN-IN-METHOD 。 您需要启用匿名身份验证。 第2步 - 登录功能 我们可以使用signInAnonymously()方法进行此身份验证。 例子 (Example) 让我们考虑以下示例。 firebase.auth().s

  • 当使用Firebase身份验证匿名帐户时,它偶尔会在系统中创建一个新的用户ID,有时它会使用相同的用户ID。我真的希望每次都能创建相同的用户ID,这样匿名用户仍然可以在应用程序中维护相同的进度/数据。这实际上是我开始使用Firebase的原因。即使在重新启动应用程序等之后,我如何始终维护一个匿名帐户来保持相同的用户ID? 我希望用户每次以访客身份玩游戏时都能获得相同的ID。我看到有些应用程序在卸载

  • 我正在构建一个React web应用程序,通过Firebase实时数据库查看JSON数据库。在没有身份验证的情况下获取数据非常有效! 实时数据库的规则如下所示: 我现在正在尝试允许匿名身份验证。我通过“登录方法”启用了它,并在javascript中添加了一个匿名登录和控制台登录用户的功能。 我的实时数据库规则现在是: 匿名用户已经创建,但是我不能像以前那样获取我的数据。在Firebase或我的ja

  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 将匿名帐户转换为永久帐户的文档指出了流程的3个步骤,但是步骤2似乎违反了步骤1。 当用户注册时,完成用户身份验证提供者的登录流程,直到(但不包括)调用其中一个身份验证提供者。用方法来表示。例如,获取用户的Google ID令牌、Facebook访问令牌或电子邮件地址和密码 获取新身份验证提供程序的身份验证凭据: