in src/Credentials/CredentialProvider.php [660:738]
private static function loadRoleProfile(
$profiles,
$profileName,
$filename,
$stsClient,
$config = []
) {
$roleProfile = $profiles[$profileName];
$roleArn = isset($roleProfile['role_arn']) ? $roleProfile['role_arn'] : '';
$roleSessionName = isset($roleProfile['role_session_name'])
? $roleProfile['role_session_name']
: 'aws-sdk-php-' . round(microtime(true) * 1000);
if (
empty($roleProfile['source_profile'])
== empty($roleProfile['credential_source'])
) {
return self::reject("Either source_profile or credential_source must be set " .
"using profile " . $profileName . ", but not both."
);
}
$sourceProfileName = "";
if (!empty($roleProfile['source_profile'])) {
$sourceProfileName = $roleProfile['source_profile'];
if (!isset($profiles[$sourceProfileName])) {
return self::reject("source_profile " . $sourceProfileName
. " using profile " . $profileName . " does not exist"
);
}
if (isset($config['visited_profiles']) &&
in_array($roleProfile['source_profile'], $config['visited_profiles'])
) {
return self::reject("Circular source_profile reference found.");
}
$config['visited_profiles'] [] = $roleProfile['source_profile'];
} else {
if (empty($roleArn)) {
return self::reject(
"A role_arn must be provided with credential_source in " .
"file {$filename} under profile {$profileName} "
);
}
}
if (empty($stsClient)) {
$sourceRegion = isset($profiles[$sourceProfileName]['region'])
? $profiles[$sourceProfileName]['region']
: 'us-east-1';
$config['preferStaticCredentials'] = true;
$sourceCredentials = null;
if (!empty($roleProfile['source_profile'])){
$sourceCredentials = call_user_func(
CredentialProvider::ini($sourceProfileName, $filename, $config)
)->wait();
} else {
$sourceCredentials = self::getCredentialsFromSource(
$profileName,
$filename
);
}
$stsClient = new StsClient([
'credentials' => $sourceCredentials,
'region' => $sourceRegion,
'version' => '2011-06-15',
]);
}
$result = $stsClient->assumeRole([
'RoleArn' => $roleArn,
'RoleSessionName' => $roleSessionName
]);
$credentials = $stsClient->createCredentials(
$result,
CredentialSources::STS_ASSUME_ROLE
);
return Promise\Create::promiseFor($credentials);
}