Skip to content
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

feat: add workload identity federation support #547

Merged
merged 30 commits into from Feb 18, 2021
Merged

Conversation

lsirac
Copy link
Collaborator

@lsirac lsirac commented Jan 28, 2021

See go/guac-3pi-java.

  • Add documentation/snippets

lsirac and others added 16 commits Aug 5, 2020
* feat: adds an internal token exchange utility based on https://tools.ietf.org/html/rfc8693

* fix: add copyright and address other comments

* fix: fix formatting

* fix: fixes copyright again

* fix: revert pom changes

* fix: revert auto-value changes

* fix: remove gson and address other comments

* fix: fixes to StsRequestHandlerTest
* feat: adds base external account credentials class and support for file/url based external credentials

* fix: javadoc changes

* fix: address review comments

* fix: nits

* fix: fix broken test

* fix: format
…apis#476)

* feat: implements AWS signature version 4 for signing requests

* fix: fix javadoc

* fix: address review comments

* fix: changes to visibility and addresses other review comments

* fix: removes sortedHeaderNames from AwsRequestSignature, uses MessageDigest, and misc changes

* feat: generate authorization header in AwsRequestSigner

* fix: address more review comments

* fix: use RuntimeExceptions instead of invalid state/argument

* fix: javadoc

* fix: handle invalid input in Builder & misc fixes

* fix: get dates at construction and no longer catch ParseException in AwsDates

* fix: refactor AwsDates
…eapis#484)

* feat: adds text/json credential source support to IdentityPoolCredentials

* fix: format

* fix: format

* fix: add missing changes to MockExternalAccountCredentialsTransport

* fix: change parseToken to take an InputStream

* fix: charsets

* fix: broken build

* fix: type null check
* feat: adds support for AWS credentials

* fix: address nits

* fix: remove Truth lib use in AwsCredentialsTest

* fix: address more review comments

* fix: assertEquals param order

* feat: retrieve region from environment variable for AWS Lambda
…for 3pi (googleapis#501)

* chore: use ImpersonatedCredentials for service account impersonation in ExternalAccountCredentials

* chore: add test for invalid service account impersonation url
* fix: update AwsCredentials credential source logic

* fix: remove TODOs

* fix: cleanup

* fix: code review nits

* fix: fix broken test

* fix: lint
@lsirac lsirac requested a review from as a code owner Jan 28, 2021
@google-cla google-cla bot added the cla: yes label Jan 28, 2021
@codecov
Copy link

@codecov codecov bot commented Jan 28, 2021

Codecov Report

Merging #547 (c7f5730) into master (2142db3) will increase coverage by 3.39%.
The diff coverage is 93.25%.

Impacted file tree graph

@@             Coverage Diff              @@
##             master     #547      +/-   ##
============================================
+ Coverage     79.92%   83.32%   +3.39%     
- Complexity      421      571     +150     
============================================
  Files            28       41      +13     
  Lines          1978     2645     +667     
  Branches        215      274      +59     
============================================
+ Hits           1581     2204     +623     
- Misses          284      301      +17     
- Partials        113      140      +27     
Impacted Files Coverage Δ Complexity Δ
...java/com/google/auth/oauth2/GoogleCredentials.java 63.04% <50.00%> (+1.67%) 11.00 <0.00> (+1.00)
...om/google/auth/oauth2/IdentityPoolCredentials.java 86.02% <86.02%> (ø) 12.00 <12.00> (?)
...om/google/auth/oauth2/StsTokenExchangeRequest.java 86.84% <86.84%> (ø) 19.00 <19.00> (?)
.../java/com/google/auth/oauth2/AwsRequestSigner.java 88.67% <88.67%> (ø) 19.00 <19.00> (?)
...m/google/auth/oauth2/StsTokenExchangeResponse.java 90.32% <90.32%> (ø) 8.00 <8.00> (?)
...tp/java/com/google/auth/oauth2/AwsCredentials.java 94.17% <94.17%> (ø) 16.00 <16.00> (?)
...va/com/google/auth/oauth2/AwsRequestSignature.java 97.50% <97.50%> (ø) 9.00 <9.00> (?)
...google/auth/oauth2/ExternalAccountCredentials.java 97.61% <97.61%> (ø) 26.00 <26.00> (?)
...java/com/google/auth/oauth2/StsRequestHandler.java 98.68% <98.68%> (ø) 17.00 <17.00> (?)
..._http/java/com/google/auth/oauth2/ActingParty.java 100.00% <100.00%> (ø) 3.00 <3.00> (?)
... and 17 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2142db3...c7f5730. Read the comment docs.

Copy link
Contributor

@elharo elharo left a comment

This is a lot easier to review if you keep it on the same branch. Earlier comments apply.

@elharo elharo requested a review from silvolu Jan 29, 2021
@lsirac lsirac requested a review from elharo Feb 2, 2021
@lsirac lsirac requested a review from elharo Feb 3, 2021
Copy link
Contributor

@elharo elharo left a comment

merge in master

@lsirac lsirac changed the title feat: adds support for 3p identities feat: workload identity federation support Feb 10, 2021
Copy link

@silvolu silvolu left a comment

Auth bits look good, please resolve comments from @elharo

@lsirac lsirac requested a review from elharo Feb 12, 2021
@lsirac lsirac requested a review from elharo Feb 12, 2021
@lsirac lsirac requested a review from elharo Feb 13, 2021
Copy link
Contributor

@elharo elharo left a comment

worth considering if any of the public classes and methods should be marked @Beta. In the near future it's going to be getting a lot harder to change something once we've shipped it than it has been in the past.

@lsirac lsirac requested a review from elharo Feb 13, 2021
*
* <p>By default, attempts to exchange the external credential for a GCP access token.
*/
public class AwsCredentials extends ExternalAccountCredentials {
Copy link
Contributor

@elharo elharo Feb 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this class need to be public? It looks like the only public methods are overridden or visible for testing, so I'm guessing no. The less API we have to publish and support ever after the better.

Copy link
Collaborator Author

@lsirac lsirac Feb 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer to keep this public. Developers can initialize an AwsCredential and use it directly, and other credentials follow that pattern. They also need to be able to create an AwsCredential with specific scopes.

implements QuotaProjectIdProvider {

/** Base credential source class. Dictates the retrieval method of the external credential. */
abstract static class CredentialSource {
Copy link
Contributor

@elharo elharo Feb 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could/should this be an outer class? ExternalAccountCredentials is so large github won't even display it by default, which suggests it might help to break it up.

Copy link
Collaborator Author

@lsirac lsirac Feb 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this makes sense as an outer class. It's required for all external credentials and not used in any other context. It's also confusing if you come across it outside of this class.

@lsirac lsirac requested a review from elharo Feb 17, 2021
throw new IllegalArgumentException("Invalid AWS environment ID.");
}

int environmentVersion = Integer.parseInt(matcher.group(2));
Copy link
Contributor

@elharo elharo Feb 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

more simply, this looks like the string simply equals the literal "aws1"

Copy link
Collaborator Author

@lsirac lsirac Feb 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm we have to parse the version anyway for the error message

elharo
elharo approved these changes Feb 17, 2021
@chingor13 chingor13 changed the title feat: workload identity federation support feat: add workload identity federation support Feb 18, 2021
@chingor13 chingor13 merged commit b8dde1e into googleapis:master Feb 18, 2021
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla: yes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants