Как исправить getFederationToken возвращает ошибку 403 не авторизованную после обновления с SDK версии 1 до 3 - PullRequest
0 голосов
/ 04 июня 2019

У нас есть код, использующий AWS PHP SDK версии 1 AmazonSTS () -> get_federation_token ().После обновления до SDK версии 3 тот же вызов с использованием тех же учетных данных, ресурса и политики возвращает ошибку не авторизованного 403.

Версия и регион выглядят одинаково.Политика JSON такая же.Пользовательские учетные данные, используемые для выполнения вызова, одинаковы (и если я вернусь к SDK v1, они все равно будут работать).У меня установлена ​​опция отладки, но она не предоставляет никакой дополнительной информации о том, почему тот же пользователь не авторизован выполнять ту же функцию getFederationToken для того же федеративного пользователя.

Старый код, который работает:

    $client = new AmazonSTS();
    $policy = new stdClass();
    $policy->Statement = [
        'Sid' => 'randomstatementid' . time(),
        'Action' => ['s3:*'],
        'Effect' => 'Allow',
        'Resource' => 'aws:s3:::' . $AWS_BUCKET . '*'
    ];

    // Fetch the session credentials.
    $response = $client->get_federation_token('User1',array(
        'Policy' => json_encode($policy),
        'DurationSeconds' => $NUMSECS
    ));

Новый код, который возвращает ошибку 403:

    $client = new Aws\Sts\StsClient([
        'region' => 'us-east-1',
        'version' => '2011-06-15',
    ]);
    $policy = new stdClass();
    $policy->Statement = [
        'Sid' => 'randomstatementid' . time(),
        'Action' => ['s3:*'],
        'Effect' => 'Allow',
        'Resource' => 'aws:s3:::' . $AWS_BUCKET . '*'
    ];
    try {
        $response = $client->getFederationToken([
            'Name' => 'User1',
            'Policy' => json_encode($policy),
            'DurationSeconds' => $NUMSECS,
        ]);
    } catch (Exception $e) {
        var_dump($e);
        die();
    }

В первом примере возвращаются временные учетные данные для федеративного пользователя User1.Во втором примере возвращается ошибка 403 (я скрываю фактический идентификатор учетной записи):

<Error>
    <Type>Sender</Type>
    <Code>AccessDenied</Code>
    <Message>User: arn:aws:iam::[account id]:user/portal is not authorized to perform: sts:GetFederationToken on resource: arn:aws:sts::[account id]:federated-user/User1</Message>
</Error>

1 Ответ

0 голосов
/ 05 июня 2019

Оказывается, я смотрел неправильные учетные данные.Я нашел правильные учетные данные, жестко запрограммированные в скрипте: (

...