Доступ запрещен для ListObjects AWS STS и S3 Client - PullRequest
1 голос
/ 28 октября 2019

Я не могу использовать метод ListObjects для доступа к AWS S3 с помощью службы Secure Token.

В документации говорится о корзине, и ее объект может быть закрытым, в то время как мы можем использовать AWS STS для получения временных учетных данных для доступа к объектам S3.

Я пытаюсь создать графический сервер. У меня есть отдельный сервис, который вы можете запросить. Во время ответа я планирую использовать AWS STS для показа изображений в моем хранилище S3.

use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = 'bucket_name';


// the security credentials that you use to obtain temporary security credentials.
$stsClient = StsClient::factory(array(
    'credentials' => array(
        'secret'    => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
        'key' => 'YYYYYYYYYYYYYYYYYYYYYYYYY'
    ),
    'region'=>'us-east-1',
    'version'=>'latest'
));




// Fetch the federated credentials.
$sessionToken = $stsClient->getFederationToken([
    'Name'              => 'IAM-Username',
    'DurationSeconds'    => '3600',
    'PolicyName'         => 'my-policy'
]);

// The following will be part of your less trusted code. You provide temporary
// security credentials so the code can send authenticated requests to Amazon S3.

$s3 = new S3Client([
    'region' => 'us-east-1',
    'version' => 'latest',
    'credentials' => [
        'key'    => $sessionToken['Credentials']['AccessKeyId'],
        'secret' => $sessionToken['Credentials']['SecretAccessKey'],
        'token'  => $sessionToken['Credentials']['SessionToken']
    ]
]);
print_r($sessionToken);
echo "<br/>";
echo "<br/>";
try {
    $result = $s3->listObjects([
        'Bucket' => $bucket
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

Я ожидал список ключей объекта S3. Но вместо этого я получаю сообщение об ошибке:

Ошибка при выполнении «ListObjects» на «https://s3.amazonaws.com/bucket_name?encoding-type=url"; Ошибка HTTP AWS: ошибка клиента: GET https://s3.amazonaws.com/bucket_name?encoding-type=url привел к ответу 403 >Forbidden: AccessDeniedAccess DeniedAccessDenied (клиент):> Access Denen - AccessDeniedAccess Denied XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1 Ответ

0 голосов
/ 28 октября 2019

нашел мой ответ. Я вызывал неправильный метод.

Я изменил это:

$sessionToken = $stsClient->getFederationToken([
    'Name'              => 'IAM-Username',
    'DurationSeconds'    => '3600',
    'PolicyName'         => 'my-policy'
]);

на это:

$sessionToken = $stsClient->getSessionToken([
    'Name'              => 'IAM-Username',
    'DurationSeconds'    => '3600',
    'PolicyName'         => 'my-policy'
]);

используйте getSessionToken вместо getFederationToken, что довольно очевидно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...