gpt4 book ai didi

php - 使用实例配置文件凭据签署 S3 上传策略

转载 作者:可可西里 更新时间:2023-10-31 22:55:38 24 4
gpt4 key购买 nike

我正在整理一个用于文件上传的拖放界面,以便直接转到 S3。我的工作流程是这样的:

  1. 放下后,我向服务器发出 AJAX 请求,
  2. 服务器生成并签署 S3 上传策略,
  3. 客户端完成上传。

如所述in this article,使用 key 签署策略.但是,我面临以下问题:

  1. 我显然可以做到 Aws::getConfig()并从那里找出 key ,但这似乎不是一个非常干净的方法。

  2. 部署在 EC2 上时,我根本无法访问 key ,因为我使用的是 instance roles这样我就不必将我的凭据存储在服务器本身上。

在这两种情况下,我都可以绕过 SDK 并手动完成,所以真正的问题是:这可以用 SDK 完成吗?如果可以,怎么做?

最佳答案

事实证明,这只需要在 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 获取此信息,但从 this part 判断看起来你可以的代码。

最后一步是调用 ::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);

关于php - 使用实例配置文件凭据签署 S3 上传策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18766336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com