Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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/0/amazon-s3/2.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桶返回403禁止_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services 亚马逊S3桶返回403禁止

Amazon web services 亚马逊S3桶返回403禁止,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我最近继承了一个Rails应用程序,它使用S3存储资产。我已将所有资产转移到我的S3存储桶中,没有任何问题。然而,当我改变应用程序指向新的bucket时,我得到403禁止状态 我的S3存储桶设置如下: 权限 每个人都可以列出 桶政策 CORS配置 静态Web托管 启用 我还能做些什么才能让公众接触到这些资产?问题是,转让是根据进行的,这本身不是问题。问题来自前一个开发人员,他在传输之前没有更改文件的权限。这意味着我无法管理任何文件,即使它们在我的桶中 通过从上一个bucket干净地重新下载文件、

我最近继承了一个Rails应用程序,它使用S3存储资产。我已将所有资产转移到我的S3存储桶中,没有任何问题。然而,当我改变应用程序指向新的bucket时,我得到403禁止状态

我的S3存储桶设置如下:

权限

每个人都可以列出

桶政策

CORS配置

静态Web托管

启用


我还能做些什么才能让公众接触到这些资产?

问题是,转让是根据进行的,这本身不是问题。问题来自前一个开发人员,他在传输之前没有更改文件的权限。这意味着我无法管理任何文件,即使它们在我的桶中


通过从上一个bucket干净地重新下载文件、删除旧的幻影文件、重新上载新文件并设置其权限以允许公开读取文件,问题得以解决。

我知道这是一个旧线程,但我刚刚遇到了相同的问题。我让一切工作了几个月,它突然停止工作,给我一个403禁止的错误。原来系统时钟才是真正的罪魁祸首。我认为s3使用了某种基于时间的令牌,它的寿命非常短。就我而言,我只是跑:

ntpdate pool.ntp.org
问题就解决了。我正在运行CentOS 6,如果有任何关联的话。这是示例输出:

19 Aug 20:57:15 ntpdate[63275]: step time server ip_address offset 438.080758 sec

希望有帮助

也可能是需要根据具体情况制定适当的政策

在本政策中给出有问题的桶:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
    }
  ]
}

我遇到了同样的问题,只是在策略桶资源的末尾添加*就解决了这个问题

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

对我来说,其他答案都不管用。文件权限、bucket策略和时钟都很好。对我来说,这个问题是断断续续的,虽然听起来有些陈词滥调,但以下两个方面以前对我都有用:

注销并重新登录。 如果您试图上载单个文件,请尝试进行批量上载。相反,如果尝试上载单个文件,请尝试进行批量上载。
在设置了正确的权限之后,一件奇怪的事情为我解决了这个问题,那就是我从文件名中删除了扩展名。因此,我在bucket中有许多项,它们都具有相同的权限,有些已找到,有些已返回403。唯一的区别是那些不起作用的文件在文件名末尾有.png。当我拆下它们时,它们工作得很好。不知道为什么。

这是我用来使S3存储桶中的index.html文件可以从internet访问的存储桶策略:

我还需要转到Permissions->Block Public Access并删除bucket的Block Public Access规则。像这样:

还要确保每个bucket中各个对象的访问权限对公众开放。请在此处检查:

这里的另一个解决方案是:我使用Buddy自动将github repo上传到s3存储桶,这需要对存储桶进行编程写入访问。IAM用户的访问策略首先如下所示:仅允许在目标bucket中执行这6个操作

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:PutObjectAcl"
            ],
            "Resource": ""arn:aws:s3:::<bucket_name>/*"
        }
    ]
}

这让我绕过了403错误,尽管显然它听起来不应该是这样。

刚刚在我的iPhone应用程序中发现了同样的问题。它在相同配置和S3设置的Android上运行完全正常,但iPhone应用程序抛出了一个错误。在检查了Amazon支持团队端的日志后,我就此事联系了他们;他们告诉我你的iPhone有日期和时间。然后我转到iPhone的设置,调整了正确的日期和时间。然后我试着上传新的图片,结果一切正常

如果您有相同的问题,并且您的iphone或模拟器中的日期或时间错误;这可能对你有帮助

谢谢

对我来说,这是访问控制选项卡下的公共访问

只需确保publiccess下的读写权限默认为Yes,即No

快乐编码

JFYI:我在android开发中使用了颤振


谢谢你发帖。我刚才在Windows上也遇到了同样的问题。修正系统的时间解决了问题。上帝保佑你,好人。请毫不犹豫地回答老问题。这是我的问题。不知怎的,我的码头集装箱里的时钟已经漂移了,这不是一个明显的诊断问题!我正在使用虚拟机快照,并将我的头发撕下来。我想把这个答案提高十次,修正一下时间就行了。即使有0.1秒的偏差,s3也返回403禁止的错误。我必须添加一个从资源中删除了/*的语句。如果我从资源字符串末尾删除/*,策略编辑器返回时的操作不适用于任何资源,因为这是一个公认的答案,我只想补充一点,AWS s3 sync不会传输每个对象的ACL设置。有可能是使用ACL列表将对象单独设置为public。这个项目提供了-C选项whic
我没能成功。作为最后一种手段,您可以为bucket中的每个文件夹设置bucket策略,允许主体:*获取对象。为什么会被否决?在我的资源末尾添加/*解决了这个问题。我不知道到底是哪些人否决了它的实际答案though@user3470929我没有投反对票,但它得到了反对票,因为原来的问题已经使用了/*-或者至少他们已经编辑了,以反映问题中的这一点。
{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"PublicReadGetObject",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::example-bucket/*"
      ]
    }
  ]
}
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:PutObjectAcl"
            ],
            "Resource": ""arn:aws:s3:::<bucket_name>/*"
        }
    ]
}
{
"Version": "2012-10-17",
"Id": "1234",
"Statement": [
    {
        "Sid": "5678",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<IAM_user_arn>"
        },
        "Action": [
            "s3:DeleteObject",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:PutObject"
        ],
        "Resource": "arn:aws:s3:::<bucket_name>/*"
    }
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "*"
        }
    ]
}