-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Describe the bug
AWS CLI as well as boto3 implementation handle config & credentials files by reading the contents of both and consolidating them into a single associative array, prior to doing any processing. aws-sdk-php, on the other hand, only reads in one file when processing. This causes an issue when using assumed roles while organizing credentials the way recommended in the AWS CLI docs (the "IAM Role" tab here).
Specifically, when using a specific profile (configured the AWS_PROFILE environment variable) and using role_arn for the provided profile, the CredentialProvider doesn't search the ~/.aws/credentials file for the source_profile's credentials. This is different from how it works for other AWS config parsers (both AWS CLI and Python's boto3).
Expected Behavior
I expect that using the AWS_PROFILE=foobar environment variable will properly use STS by pulling the source credentials from ~/.aws/credentials.
Current Behavior
When processing the role_arn, it only searches for the credentials in the ~/.aws/config file, instead of the more appropriate ~/.aws/credentials file.
Reproduction Steps
With the ~/.aws/config:
[default]
region = us-east-1
[profile foobar]
source_profile = default
role_arn = arn:aws:iam::123:role/OrganizationAccessRole
region = us-east-1
And the ~/.aws/credentials file:
[default]
aws_access_key_id = ASIA...
aws_secret_access_key = ...
aws_session_token = ...
Use the AWS_PROFILE=foobar environment variable.
Possible Solution
The code here should first check the ~/.aws/credentials file with:
CredentialProvider::ini($sourceProfileName, null, $config)and on rejection it should try the ~/.aws/config file as it is doing currently:
CredentialProvider::ini($sourceProfileName, $filename, $config)Additional Information/Context
No response
SDK version used
3.283.2
Environment details (Version of PHP (php -v)? OS name and version, etc.)
PHP 8.2.11; Ubuntu Linux 22.04