我正在使用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',
));