-
Notifications
You must be signed in to change notification settings - Fork 993
Add business metrics support for STS, SSO and Profile credential providers #6426
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
685e7ac
c16d58a
420de6a
350bfd6
2f7bdc5
43c9ef5
8d614ff
39cb908
6e8fcd4
27b9d7a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -40,6 +40,7 @@ | |
| import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; | ||
| import software.amazon.awssdk.auth.credentials.SystemPropertyCredentialsProvider; | ||
| import software.amazon.awssdk.core.internal.util.ClassLoaderHelper; | ||
| import software.amazon.awssdk.core.useragent.BusinessMetricFeatureId; | ||
| import software.amazon.awssdk.profiles.Profile; | ||
| import software.amazon.awssdk.profiles.ProfileFile; | ||
| import software.amazon.awssdk.profiles.ProfileProperty; | ||
|
|
@@ -161,6 +162,7 @@ private AwsCredentialsProvider basicProfileCredentialsProvider() { | |
| .accessKeyId(properties.get(ProfileProperty.AWS_ACCESS_KEY_ID)) | ||
| .secretAccessKey(properties.get(ProfileProperty.AWS_SECRET_ACCESS_KEY)) | ||
| .accountId(properties.get(ProfileProperty.AWS_ACCOUNT_ID)) | ||
| .providerName(BusinessMetricFeatureId.CREDENTIALS_PROFILE.value()) | ||
| .build(); | ||
| return StaticCredentialsProvider.create(credentials); | ||
| } | ||
|
|
@@ -177,6 +179,7 @@ private AwsCredentialsProvider sessionProfileCredentialsProvider() { | |
| .secretAccessKey(properties.get(ProfileProperty.AWS_SECRET_ACCESS_KEY)) | ||
| .sessionToken(properties.get(ProfileProperty.AWS_SESSION_TOKEN)) | ||
| .accountId(properties.get(ProfileProperty.AWS_ACCOUNT_ID)) | ||
| .providerName(BusinessMetricFeatureId.CREDENTIALS_PROFILE.value()) | ||
| .build(); | ||
| return StaticCredentialsProvider.create(credentials); | ||
| } | ||
|
|
@@ -187,28 +190,36 @@ private AwsCredentialsProvider credentialProcessCredentialsProvider() { | |
| return ProcessCredentialsProvider.builder() | ||
| .command(properties.get(ProfileProperty.CREDENTIAL_PROCESS)) | ||
| .staticAccountId(properties.get(ProfileProperty.AWS_ACCOUNT_ID)) | ||
| .source(BusinessMetricFeatureId.CREDENTIALS_PROFILE_PROCESS.value()) | ||
| .build(); | ||
| } | ||
|
|
||
| /** | ||
| * Create the SSO credentials provider based on the related profile properties. | ||
| */ | ||
| private AwsCredentialsProvider ssoProfileCredentialsProvider() { | ||
| validateRequiredPropertiesForSsoCredentialsProvider(); | ||
| boolean isLegacy = validateRequiredPropertiesForSsoCredentialsProvider(); | ||
alextwoods marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| String source = isLegacy ? | ||
| BusinessMetricFeatureId.CREDENTIALS_PROFILE_SSO_LEGACY.value() : | ||
| BusinessMetricFeatureId.CREDENTIALS_PROFILE_SSO.value(); | ||
|
|
||
| return ssoCredentialsProviderFactory().create( | ||
| ProfileProviderCredentialsContext.builder() | ||
| .profile(profile) | ||
| .profileFile(profileFile) | ||
| .source(source) | ||
| .build()); | ||
| } | ||
|
|
||
| private void validateRequiredPropertiesForSsoCredentialsProvider() { | ||
| private boolean validateRequiredPropertiesForSsoCredentialsProvider() { | ||
S-Saranya1 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| requireProperties(ProfileProperty.SSO_ACCOUNT_ID, | ||
| ProfileProperty.SSO_ROLE_NAME); | ||
|
|
||
| if (!properties.containsKey(ProfileSection.SSO_SESSION.getPropertyKeyName())) { | ||
| requireProperties(ProfileProperty.SSO_REGION, ProfileProperty.SSO_START_URL); | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
|
|
||
| private AwsCredentialsProvider roleAndWebIdentityTokenProfileCredentialsProvider() { | ||
|
|
@@ -223,6 +234,7 @@ private AwsCredentialsProvider roleAndWebIdentityTokenProfileCredentialsProvider | |
| .roleArn(roleArn) | ||
| .roleSessionName(roleSessionName) | ||
| .webIdentityTokenFile(webIdentityTokenFile) | ||
| .source(BusinessMetricFeatureId.CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN.value()) | ||
| .build(); | ||
|
|
||
| return WebIdentityCredentialsUtils.factory().create(credentialProperties); | ||
|
|
@@ -249,7 +261,8 @@ private AwsCredentialsProvider roleAndSourceProfileBasedProfileCredentialsProvid | |
| .credentialsProvider(children)) | ||
| .orElseThrow(this::noSourceCredentialsException); | ||
|
|
||
| return stsCredentialsProviderFactory().create(sourceCredentialsProvider, profile); | ||
| String source = BusinessMetricFeatureId.CREDENTIALS_PROFILE_SOURCE_PROFILE.value(); | ||
|
||
| return stsCredentialsProviderFactory().create(sourceCredentialsProvider, profile, source); | ||
| } | ||
|
|
||
| /** | ||
|
|
@@ -260,18 +273,20 @@ private AwsCredentialsProvider roleAndCredentialSourceBasedProfileCredentialsPro | |
| requireProperties(ProfileProperty.CREDENTIAL_SOURCE); | ||
|
|
||
| CredentialSourceType credentialSource = CredentialSourceType.parse(properties.get(ProfileProperty.CREDENTIAL_SOURCE)); | ||
| AwsCredentialsProvider credentialsProvider = credentialSourceCredentialProvider(credentialSource); | ||
| return stsCredentialsProviderFactory().create(credentialsProvider, profile); | ||
| String source = BusinessMetricFeatureId.CREDENTIALS_PROFILE_NAMED_PROVIDER.value(); | ||
| AwsCredentialsProvider credentialsProvider = credentialSourceCredentialProvider(credentialSource, source); | ||
| return stsCredentialsProviderFactory().create(credentialsProvider, profile, source); | ||
| } | ||
|
|
||
| private AwsCredentialsProvider credentialSourceCredentialProvider(CredentialSourceType credentialSource) { | ||
| private AwsCredentialsProvider credentialSourceCredentialProvider(CredentialSourceType credentialSource, String source) { | ||
| switch (credentialSource) { | ||
| case ECS_CONTAINER: | ||
| return ContainerCredentialsProvider.builder().build(); | ||
| return ContainerCredentialsProvider.builder().source(source).build(); | ||
| case EC2_INSTANCE_METADATA: | ||
| return InstanceProfileCredentialsProvider.builder() | ||
| .profileFile(profileFile) | ||
| .profileName(name) | ||
| .source(source) | ||
| .build(); | ||
| case ENVIRONMENT: | ||
| return AwsCredentialsProviderChain.builder() | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.