事实证明,这只需要在 API 中进行一些挖掘。可以从您通过实例化的任何客户端中提取凭据Aws\Common\Aws::get()
。
// create builder; not passing credentials here
$aws = Aws\Common\Aws::factory(array(
'region' => 'us-east-1',
));
$s3 = $aws->get('s3');
// get credentials interface
$credentials = $s3->getCredentials();
要签署策略字符串,您需要一个S3Signature
. 根据文档AbstractClient::getSignature()
,您似乎无法从中获取此信息S3Client
,但从这部分代码来看,您似乎可以。
最后一步是调用::signString()
生成签名的方法:
$policy = base64_encode(json_encode($policy_data));
$signer = $s3->getSignature();
$signature = $signer->signString($policy, $credentials);
内部$credentials->getSecretKey()
调用,必要时从元数据服务加载必要的凭证;否则它使用传递给Aws::factory()
.
更新
也可以在没有任何客户端的情况下执行此操作:
$credentials = Aws\Common\Credentials\Credentials::factory();
$signer = new S3Signature();
$signature = $signer->signString($policy, $credentials);