0

我有一个项目托管在 Amazon EC2 Ireland (Ubuntu)。

我用 CodeIgniter 开发,我想用 S3 来存储文件。

我已经使用了三个或四个特定的库来将 S3 与 CodeIgniter 一起使用,但没有一个有效。我尝试了官方的AWS SDK for PHP,兼容性测试还可以,但是示例不起作用。我认为问题在于访问 S3。

我在 S3 Management 中创建了三个存储桶,两个在爱尔兰,一个在美国标准,我可以通过浏览器、S3 Organizer (S3Fox) 和 Cyber​​duck 访问文件。但我无法访问我的项目。

任何人都可以帮助我吗?

对不起,我的英语不好...

控制器amazona.php:

   <?php defined('BASEPATH') OR exit('No direct script access allowed');

class Amazona extends CI_Controller {

    var $bucket = 'cubito';

    function __construct()
    {
        parent::__construct();
        $this->load->library('S3');
    }

    function index()
    {
/*      $data['files'] = $this->s3->getBucket('cubito'); */
        $data['texto'] = "prueba";
        $this->load->view('amazona', $data);
    }
}

?>

查看amazona.php:

<html>
    <head>
        <title>prueba</title>
    </head>

    <body>
        <a href="http://cubito.s3.amazonaws.com/imagen.jpg">imagen</a>
        <img src="http://cubito.s3.amazonaws.com/imagen.jpg" />
        <p><?php echo($texto); ?></p>
        <p><?php echo($this->s3->listBuckets()); ?></p>

    </body>

</html>

我添加了一个存储桶策略,但仍然不起作用:

{
    "Version": "2008-10-17",
    "Id": "Policy1351373775750",
    "Statement": [
        {
            "Sid": "Stmt1351373767997",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::cubito",
                "arn:aws:s3:::cubito/*"
            ]
        }
    ]
}
4

2 回答 2

0

我认为您的 s3 存储桶策略列出存储桶是不正确的。你的存储桶策略是什么,你能分享一下吗?

You Need to include the bucket itself as a resource.
"Resource":["arn:aws:s3:::my_bucket/*", "arn:aws:s3:::my_bucket"]

编辑:

试试这个:(这是让 IAM 用户访问 S3 的策略)

{
  "Statement": [
    {
      "Sid": "Stmt1351373767997",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::cubito",
        "arn:aws:s3:::cubito/*"
      ]
    },
  {
         "Effect":"Allow",
         "Action":"s3:ListAllMyBuckets",
        "Resource":"arn:aws:s3:::*"
     }    
  ]
}

试试这个:(这是 s3 存储桶的策略)

{
  "Id": "Policy1351375661442",
  "Statement": [
    {
      "Sid": "Stmt1351375657362",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*",
      "Principal": {
        "AWS": [
          "\"AWS\": \"*\""
        ]
      }
    }
  ]
}
于 2012-10-27T20:55:10.173 回答
0

我做的!!

我更改了 s3 库中的 var $endpoint。原本的:

public static $endpoint = 's3.amazonaws.com';

改变:

public static $endpoint = 's3-eu-west-1.amazonaws.com';

使用我的第一个 accesskey 和 secretkey 它运行!!!

谢谢大家,对不起我的英语不好。

¡¡¡ 谢邀!!!

于 2012-10-29T18:53:47.003 回答