S3 putObject无法正常访问拒绝访问

时间:2016-04-05 22:45:14

标签: amazon-web-services amazon-s3

AWS S3正在我的本地主机和我的实时网站上工作,但我的开发服务器(完全相同的配置)引发了以下错误:http://xxx.xx.xxx.xxx/latest/meta-data/iam/security-credentials/ resulted in a 404 Not Found`响应:从实例配置文件元数据服务器检索凭据时出错。

Localhost URL is http://localhost/example
Live URL is http://www.example.com
Development URL is http://dev.example.com

为什么这会在localhost和live上运行,但不能在我的开发服务器上运行?

以下是我的示例代码:

$bucket = 'example'
$s3Client = new S3Client([
                'region'=>'us-west-2',
                'version'=>'2006-03-01',
                'key'=>'xxxxxxxxxxxxxxxxxxxxxxxx',
                'secret'=>'xxxxxxxxxxxxxxxxxxxxxxxx',
            ]);
            $uniqueFileName = uniqid().'.txt';
            $s3Client->putObject([
                'Bucket' => $bucket,
                'Key'    => 'dev/'.$uniqueFileName,
                'Body'   => 'this is the body!'
            ]);

这是政策:

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

1 个答案:

答案 0 :(得分:0)

http://169.254.169.254/latest/meta-data/iam/security-credentials/返回的值与首次启动实例时分配给EC2实例的角色相关联。

由于您收到404 Not Found响应,因此您的开发服务器可能没有分配角色。您可以登录EC2管理控制台 - 只需单击该实例,然后查看详细信息窗格并找到角色值。

如果您希望启动“完全”相同的新服务器,请使用“操作”菜单中的启动更多此类命令。它还将复制角色设置。