Skip to content

Commit eb63856

Browse files
authored
fix(auth): ec2/ecs credentials caching #2900
1 parent d9df8c2 commit eb63856

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "Bug Fix",
3+
"description": "cached ECS/EC2 credentials not refreshed when expired"
4+
}

src/credentials/providers/ec2CredentialsProvider.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import globals from '../../shared/extensionGlobals'
1919
* @see CredentialsProviderType
2020
*/
2121
export class Ec2CredentialsProvider implements CredentialsProvider {
22-
private credentials: Credentials | undefined
2322
private region: string | undefined
2423
private available: boolean | undefined
24+
private readonly createTime = Date.now()
2525

2626
public constructor(private metadata: Ec2MetadataClient = new DefaultEc2MetadataClient()) {}
2727

@@ -80,17 +80,14 @@ export class Ec2CredentialsProvider implements CredentialsProvider {
8080
}
8181

8282
public getHashCode(): string {
83-
return getStringHash(JSON.stringify(this.credentials))
83+
return getStringHash(this.getProviderType() + `-${this.createTime}`)
8484
}
8585

8686
public canAutoConnect(): boolean {
8787
return true
8888
}
8989

9090
public async getCredentials(): Promise<Credentials> {
91-
if (!this.credentials) {
92-
this.credentials = await fromInstanceMetadata()()
93-
}
94-
return this.credentials
91+
return fromInstanceMetadata()()
9592
}
9693
}

src/credentials/providers/ecsCredentialsProvider.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import globals from '../../shared/extensionGlobals'
1818
* @see CredentialsProviderType
1919
*/
2020
export class EcsCredentialsProvider implements CredentialsProvider {
21-
private credentials: Credentials | undefined
2221
private available: boolean | undefined
22+
private readonly createTime = Date.now()
2323

2424
public constructor(private provider: CredentialProvider = fromContainerMetadata()) {}
2525

@@ -34,7 +34,7 @@ export class EcsCredentialsProvider implements CredentialsProvider {
3434
if (env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI || env.AWS_CONTAINER_CREDENTIALS_FULL_URI) {
3535
const start = globals.clock.Date.now()
3636
try {
37-
this.credentials = await this.provider()
37+
await this.provider()
3838
getLogger().verbose(`credentials: retrieved ECS container credentials`)
3939

4040
this.available = true
@@ -73,17 +73,14 @@ export class EcsCredentialsProvider implements CredentialsProvider {
7373
}
7474

7575
public getHashCode(): string {
76-
return getStringHash(JSON.stringify(this.credentials))
76+
return getStringHash(this.getProviderType() + `-${this.createTime}`)
7777
}
7878

7979
public canAutoConnect(): boolean {
8080
return true
8181
}
8282

8383
public async getCredentials(): Promise<Credentials> {
84-
if (!this.credentials) {
85-
this.credentials = await this.provider()
86-
}
87-
return this.credentials
84+
return this.provider()
8885
}
8986
}

0 commit comments

Comments
 (0)