これには、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);