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(cli): support WebIdentityCredentials (as used by EKS) #11559

Merged
merged 66 commits into from
Nov 30, 2020
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
eebe68b
feat(iam): Allow passing PolicyDocuments to Policy
markussiebert Nov 11, 2020
6d8c0bd
Merge branch 'master' into master
markussiebert Nov 11, 2020
071d194
add README example
markussiebert Nov 11, 2020
d9cd67a
Merge branch 'master' of https://github.com/markus7811/aws-cdk
markussiebert Nov 11, 2020
3954671
Merge branch 'master' into master
markussiebert Nov 14, 2020
d02a418
Update README.md
rix0rrr Nov 16, 2020
b7bb25f
Merge branch 'master' into master
rix0rrr Nov 16, 2020
b808d08
feat: Don't ignore eks credentials
markussiebert Nov 18, 2020
4556247
Merge branch 'master' into master
markussiebert Nov 18, 2020
91354da
feat: documentation for eks check
markussiebert Nov 18, 2020
6db7b95
Merge branch 'master' of https://github.com/markus7811/aws-cdk
markussiebert Nov 18, 2020
03f100e
feat: add testcase for eks credentials
markussiebert Nov 18, 2020
ba325fc
Merge branch 'master' into master
markussiebert Nov 18, 2020
b4b33d5
feat: Add some information about credential providers to README
markussiebert Nov 18, 2020
f6f3384
Merge branch 'master' into master
markussiebert Nov 19, 2020
b48029d
Merge branch 'master' into master
markussiebert Nov 19, 2020
1ef9bda
Merge branch 'master' into master
markussiebert Nov 19, 2020
5eaf5c3
fix: update pipeline
markussiebert Nov 19, 2020
d522cb9
fix: testcase
markussiebert Nov 19, 2020
645fdbd
fix: comma dangle for eks test
markussiebert Nov 19, 2020
b54e054
feat: fix test case
markussiebert Nov 19, 2020
ccb925c
Merge branch 'master' into master
markussiebert Nov 20, 2020
21385bd
debug: add some output
markussiebert Nov 20, 2020
ce656c9
testcase output
markussiebert Nov 20, 2020
a634c4c
feat: EksCredentials test scrub Ecs Env
markussiebert Nov 20, 2020
14eff07
test: scrub more variables?!
markussiebert Nov 20, 2020
7ced83b
more output
markussiebert Nov 20, 2020
d2dc094
test update
markussiebert Nov 20, 2020
e39d416
fix
markussiebert Nov 20, 2020
48e0d95
rework test
markussiebert Nov 20, 2020
03bdb9b
remove new line
markussiebert Nov 20, 2020
5cc3ffd
remove all tests for eks
markussiebert Nov 20, 2020
b418c5f
remove unneded import
markussiebert Nov 20, 2020
ad5f051
test my test
markussiebert Nov 20, 2020
81f9ae9
test fix again
markussiebert Nov 20, 2020
8095bf3
test the test
markussiebert Nov 20, 2020
5e70c47
test again
markussiebert Nov 20, 2020
920cbf6
test the test once more with feeling
markussiebert Nov 20, 2020
b0d77e6
Merge branch 'master' into master
markussiebert Nov 20, 2020
78eefa2
test with output
markussiebert Nov 20, 2020
754ea42
80 % chance that this test will work
markussiebert Nov 20, 2020
39aed1a
f....
markussiebert Nov 20, 2020
73790f9
test output
markussiebert Nov 20, 2020
83915f8
more output is allways better
markussiebert Nov 20, 2020
c05eb1d
try to cheat
markussiebert Nov 20, 2020
d9d1eb6
fake it till you make it ;-)
markussiebert Nov 20, 2020
935da09
once again
markussiebert Nov 20, 2020
1eea212
fix: remove debug output, as not needed anymore
markussiebert Nov 22, 2020
5e581a3
remove comments
markussiebert Nov 22, 2020
4fa94b8
remove README.md additions
markussiebert Nov 22, 2020
6c8d6c9
use test as provided by @iliapolo
markussiebert Nov 22, 2020
fcb7755
remove import
markussiebert Nov 22, 2020
1e49e95
rename check function
markussiebert Nov 23, 2020
272a077
remove options.containerCreds from else if tree
markussiebert Nov 24, 2020
28b8403
Merge branch 'master' into master
markussiebert Nov 24, 2020
7db6e7b
update comments
markussiebert Nov 24, 2020
90fa57b
Merge branch 'master' of https://github.com/markus7811/aws-cdk
markussiebert Nov 24, 2020
727c76a
Merge branch 'master' into master
markussiebert Nov 24, 2020
3a274fb
Merge branch 'master' into master
markussiebert Nov 24, 2020
28946b7
Merge branch 'master' into master
markussiebert Nov 24, 2020
58b9539
Merge branch 'master' into master
markussiebert Nov 25, 2020
a9a728b
Merge branch 'master' into master
markussiebert Nov 26, 2020
08a2ea8
Merge branch 'master' into master
markussiebert Nov 26, 2020
96bda24
Merge branch 'master' into master
markussiebert Nov 28, 2020
5c53786
Merge branch 'master' into master
markussiebert Nov 30, 2020
e57eabc
Merge branch 'master' into master
mergify[bot] Nov 30, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/aws-cdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -361,4 +361,4 @@ Some of the interesting keys that can be used in the JSON configuration files:
The following environment variables affect aws-cdk:

- `CDK_DISABLE_VERSION_CHECK`: If set, disable automatic check for newer versions.
- `CDK_NEW_BOOTSTRAP`: use the modern bootstrapping stack.
- `CDK_NEW_BOOTSTRAP`: use the modern bootstrapping stack.
11 changes: 11 additions & 0 deletions packages/aws-cdk/lib/api/aws-auth/awscli-compatible.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ export class AwsCliCompatible {

if (options.containerCreds ?? hasEcsCredentials()) {
sources.push(() => new AWS.ECSCredentials());
} else if (options.containerCreds ?? hasWebIdentityCredentials() ) {
markussiebert marked this conversation as resolved.
Show resolved Hide resolved
sources.push(() => new AWS.TokenFileWebIdentityCredentials());
} else if (options.ec2instance ?? await isEc2Instance()) {
// else if: don't get EC2 creds if we should have gotten ECS creds--ECS instances also
// run on EC2 boxes but the creds represent something different. Same behavior as
Expand Down Expand Up @@ -156,6 +158,15 @@ function hasEcsCredentials(): boolean {
return (AWS.ECSCredentials.prototype as any).isConfiguredForEcsCredentials();
}

/**
* Return whether it looks like we'll have WebIdentityCredentials (that's what EKS uses) available
* No check like hasEcsCredentials available, so have to implement our own.
* @see https://github.com/aws/aws-sdk-js/blob/3ccfd94da07234ae87037f55c138392f38b6881d/lib/credentials/token_file_web_identity_credentials.js#L59
*/
function hasWebIdentityCredentials(): boolean {
return Boolean(process.env.AWS_ROLE_ARN && process.env.AWS_WEB_IDENTITY_TOKEN_FILE);
}

/**
* Return whether we're on an EC2 instance
*/
Expand Down
18 changes: 18 additions & 0 deletions packages/aws-cdk/test/util/awscli-compatible.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,21 @@ test('on an EC2 instance, region lookup queries IMDS', async () => {
});
});

test('Use web identity when available', async () => {

// Scrub some environment variables that are maybe set for Ecs Credentials
delete process.env.ECS_CONTAINER_METADATA_URI_V4;
delete process.env.ECS_CONTAINER_METADATA_URI;
delete process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI;

// create and configure the web identity token file
process.env.AWS_WEB_IDENTITY_TOKEN_FILE = 'some-value';
process.env.AWS_ROLE_ARN = 'some-value';

// create the chain
const providers = (await AwsCliCompatible.credentialChain()).providers;

// make sure the web identity provider is in the chain
const webIdentify = (providers[2] as Function)();
expect(webIdentify).toBeInstanceOf(AWS.TokenFileWebIdentityCredentials);
});