【问题标题】:AWS PHP SDK 3.0 Sts client throwing error of non scoped region when region is provided提供区域时,AWS PHP SDK 3.0 Sts 客户端抛出非范围区域的错误
【发布时间】:2015-09-23 01:41:46
【问题描述】:

升级到 3.0 PHP sdk,这可能是一个错误,因为它破坏了一切。

我正在尝试创建一个 sts 客户端,但它不断收到错误

   Error executing "GetFederationToken" on "https://sts.amazonaws.com"; AWS HTTP error: Client error: 403 SignatureDoesNotMatch (client): Credential should be scoped to a valid region, not 'us-west-1'.  - <ErrorResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
  <Error>
    <Type>Sender</Type>
    <Code>SignatureDoesNotMatch</Code>
    <Message>Credential should be scoped to a valid region, not 'us-west-1'. </Message>
  </Error>
  <RequestId>604fe518-2381-11e5-8b68-471c4b83f798</RequestId>
</ErrorResponse>

PHP 代码

    $config = \Config::get('shared_config');

    $sdk = new \Aws\Sdk($config);

    $sts = $sdk->createSts();

    $result = $sts->getFederationToken(array(
        'Name' => 'appuser',
        'DurationSeconds' => 3600,
        'Policy' => json_encode(array(
            'Statement' => array(
                array(
                    'Sid' => 'randomstatementid' . time(),
                    'Action' => array('s3:PutObject'),
                    'Effect' => 'Allow',
                    'Resource' => 'arn:aws:s3:::' . \Config::get('aws_bucket'),
                )
            )
        ))
    ));

其中 $config 是一个数组

array(
    'region' => 'us-west-1',
    'version' => 'latest',
    'debug'=>true,
    'credentials'=>array(
        'key'    => 'XXX',
        'secret' => 'XXX',
    )

所以显然设置了区域,us-west-1 是有效区域 https://docs.aws.amazon.com/general/latest/gr/rande.html

文档非常糟糕,但 https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html#using-the-sdk-class 是我所关注的

并创建客户端 https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Sdk.html 见方法 createSts

我也可以成功地使用具有相同凭据的 s3 客户端并执行命令。

    $config = \Config::get('shared_config');

    $sdk = new \Aws\Sdk($config);

    $s3 = $sdk->createS3();

【问题讨论】:

    标签: php amazon-web-services aws-php-sdk


    【解决方案1】:

    us-east-1以外的任何地区使用STS时,您需要指定endpoint参数。这尚未在 v3 中记录,但可以在 v2 docs 上找到。

    请注意,在使用之前,您需要在控制台中手动启用除us-east-1 之外的任何端点。此限制是 STS 独有的。

    【讨论】:

      猜你喜欢
      • 2018-09-20
      • 2017-10-24
      • 2021-12-28
      • 1970-01-01
      • 2020-09-24
      • 2013-06-05
      • 2020-08-30
      • 2016-08-11
      • 2020-06-02
      相关资源
      最近更新 更多