У нас есть код, использующий 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>