setConfig($config) ->setConfigDefaults(array( Options::VERSION => self::LATEST_API_VERSION, Options::SERVICE_DESCRIPTION => __DIR__ . '/Resources/sts-%s.php' )) ->build(); // Attach a listener to prevent AssumeRoleWithWebIdentity requests from being signed $client->getEventDispatcher()->addListener('command.before_send', function(Event $event) { /** @var AbstractCommand $command */ $command = $event['command']; if ($command->getName() === 'AssumeRoleWithWebIdentity' || $command->getName() === 'AssumeRoleWithSAML' ) { /** @var EventDispatcher $dispatcher */ $dispatcher = $command->getRequest()->getEventDispatcher(); foreach ($dispatcher->getListeners('request.before_send') as $listener) { if (is_array($listener) && $listener[0] instanceof SignatureListener) { $dispatcher->removeListener('request.before_send', $listener); break; } } } }); return $client; } /** * Creates a credentials object from the credential data return by an STS operation * * @param Model $result The result of an STS operation * * @return Credentials * @throws InvalidArgumentException if the result does not contain credential data */ public function createCredentials(Model $result) { if (!$result->hasKey('Credentials')) { throw new InvalidArgumentException('The modeled result provided contained no credentials.'); } return new Credentials( $result->getPath('Credentials/AccessKeyId'), $result->getPath('Credentials/SecretAccessKey'), $result->getPath('Credentials/SessionToken'), $result->getPath('Credentials/Expiration') ); } }