Amazon S3 php SDK getBucketPolicy returns empty



我正在使用Amazon S3 SDK,而GetBucketPolicy Call似乎没有其他任何人都有类似的问题。

http://docs.aws.amazon.com/aws-sdk-php/latest/class-aws.s3.s3client.html#_getbucketpolicy

如果我运行。

$client = S3Client::factory(array(
        'key'    => 'key',
        'secret' => 'secret'
    ));
    $result = $client->getBucketPolicy(array(
        // Bucket is required
        'Bucket' => 'bucket',
    ));
    print_r($result->toArray());

它返回

Policy {}

但是,当我使用Amazon S3控制台查看属性时,在我的存储桶上,然后单击"编辑策略"。

{
  "Id": "Policy123456789",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::mybucket/*"
    } 
  ]
}

我想念什么吗?

我找到了它!太简单了...但是很难……因为我在文档中找不到它。

执行时得到的响应:

$response = $this->S3Client
    ->getBucketPolicy(['Bucket' => $bucketName])
    ->get('Policy');

是类型的对象:GuzzleHttpPsr7Stream

您必须使用getContents()方法获得流的上下文:

$response = $this->S3Client
    ->getBucketPolicy(['Bucket' => $bucketName])
    ->get('Policy')
    ->getContents();

您的IAM策略是否配置或存储在.aws/config?

如果您使用未提供的代码

$result = $client->getBucketPolicy(array(
    // Bucket is required
    'Bucket' => 'bucket',
));

它假设在AWS控制台上为您的实例配置了IAM策略,或者您将凭据存储到〜/.aws/config

如果您没有,则应通过

将配置传递
$result = $client->getBucketPolicy(array(
    // Bucket is required
    'Bucket' => 'bucket',
    'key' => 'put your key',
    'secret' => 'put your secret',
    'region' => 'put your region',
));

最新更新