Php 使用实例配置文件凭据签署S3上载策略

Php 使用实例配置文件凭据签署S3上载策略,php,amazon-s3,amazon-ec2,Php,Amazon S3,Amazon Ec2,我正在为文件上传准备一个拖放界面,以便直接上传到S3。我的工作流程如下所示: 在删除时,我向服务器发出AJAX请求 服务器生成并签署S3上载策略 客户端完成上传 如前所述,使用密钥对策略进行签名。然而,我面临以下问题: 显然,我可以从那里找到秘密钥匙,但这似乎不是一个非常干净的方法 当部署在EC2上时,我将根本无法访问密钥,因为我使用的是,因此我不必将凭据存储在服务器本身上 在这两种情况下,我都可以绕过SDK并手动执行,所以问题是:这可以通过SDK完成吗?如果可以,如何完成?事实证明,这只需要在

我正在为文件上传准备一个拖放界面,以便直接上传到S3。我的工作流程如下所示:

  • 在删除时,我向服务器发出AJAX请求
  • 服务器生成并签署S3上载策略
  • 客户端完成上传
  • 如前所述,使用密钥对策略进行签名。然而,我面临以下问题:

  • 显然,我可以从那里找到秘密钥匙,但这似乎不是一个非常干净的方法

  • 当部署在EC2上时,我将根本无法访问密钥,因为我使用的是,因此我不必将凭据存储在服务器本身上


  • 在这两种情况下,我都可以绕过SDK并手动执行,所以问题是:这可以通过SDK完成吗?如果可以,如何完成?

    事实证明,这只需要在API中进行一些挖掘。可以通过
    Aws\Common\Aws::get()
    从实例化的任何客户端提取凭据

    要对策略字符串签名,您需要的实例。根据的文档,您似乎无法从
    S3Client
    获得此信息,但从代码的类型来看,您似乎可以

    最后一步是调用该方法以生成签名:

    $policy = base64_encode(json_encode($policy_data));
    $signer = $s3->getSignature();
    $signature = $signer->signString($policy, $credentials);
    
    内部调用,必要时从元数据服务加载必要的凭据;否则,它将使用传递给Aws::factory()的凭据

    更新

    也可以在没有任何客户端的情况下执行此操作:

    $credentials = Aws\Common\Credentials\Credentials::factory();
    $signer = new S3Signature();
    
    $signature = $signer->signString($policy, $credentials);
    
    $credentials = Aws\Common\Credentials\Credentials::factory();
    $signer = new S3Signature();
    
    $signature = $signer->signString($policy, $credentials);