AWS PHP SDK 3.0 Sts-клиент выдает ошибку области без области действия при указании региона

Обновился до 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();

person Brian    schedule 06.07.2015    source источник


Ответы (1)


Вам необходимо указать параметр endpoint при использовании STS в любом регионе, кроме us-east-1. Это еще не задокументировано в версии 3, но его можно найти на v2 docs.

Обратите внимание, что вам нужно будет включить любые конечные точки, кроме us-east-1, вручную в консоли перед их использованием. Это ограничение уникально для STS.

person giaour    schedule 08.07.2015