diff --git a/.changeset/empty-glasses-pump.md b/.changeset/empty-glasses-pump.md new file mode 100644 index 0000000000..df5269052e --- /dev/null +++ b/.changeset/empty-glasses-pump.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration-aws-node': patch +--- + +Skip STS API calls where not needed, to support Minio use cases diff --git a/packages/integration-aws-node/src/DefaultAwsCredentialsManager.test.ts b/packages/integration-aws-node/src/DefaultAwsCredentialsManager.test.ts index 1b21d43338..237428c3e9 100644 --- a/packages/integration-aws-node/src/DefaultAwsCredentialsManager.test.ts +++ b/packages/integration-aws-node/src/DefaultAwsCredentialsManager.test.ts @@ -252,8 +252,12 @@ describe('DefaultAwsCredentialsManager', () => { }, }); const provider = DefaultAwsCredentialsManager.fromConfig(minConfig); - const awsCredentialProvider1 = await provider.getCredentialProvider({}); - const awsCredentialProvider2 = await provider.getCredentialProvider({}); + const awsCredentialProvider1 = await provider.getCredentialProvider({ + accountId: '123456789012', + }); + const awsCredentialProvider2 = await provider.getCredentialProvider({ + accountId: '123456789012', + }); expect(awsCredentialProvider1).toBe(awsCredentialProvider2); expect(stsMock).toHaveReceivedCommandTimes(GetCallerIdentityCommand, 1); @@ -374,7 +378,7 @@ describe('DefaultAwsCredentialsManager', () => { arn: 'arn:aws:s3:::bucket_name', }); - expect(awsCredentialProvider.accountId).toEqual('123456789012'); + expect(awsCredentialProvider.accountId).toBeUndefined(); const creds = await awsCredentialProvider.sdkCredentialProvider(); expect(creds).toEqual({ @@ -387,7 +391,7 @@ describe('DefaultAwsCredentialsManager', () => { const provider = DefaultAwsCredentialsManager.fromConfig(config); const awsCredentialProvider = await provider.getCredentialProvider({}); - expect(awsCredentialProvider.accountId).toEqual('123456789012'); + expect(awsCredentialProvider.accountId).toBeUndefined(); const creds = await awsCredentialProvider.sdkCredentialProvider(); expect(creds).toEqual({ @@ -400,7 +404,7 @@ describe('DefaultAwsCredentialsManager', () => { const provider = DefaultAwsCredentialsManager.fromConfig(config); const awsCredentialProvider = await provider.getCredentialProvider(); - expect(awsCredentialProvider.accountId).toEqual('123456789012'); + expect(awsCredentialProvider.accountId).toBeUndefined(); const creds = await awsCredentialProvider.sdkCredentialProvider(); expect(creds).toEqual({ @@ -421,10 +425,11 @@ describe('DefaultAwsCredentialsManager', () => { it('rejects main account that has invalid credentials', async () => { stsMock.on(GetCallerIdentityCommand).rejects('No credentials found'); - const provider = DefaultAwsCredentialsManager.fromConfig(config); - await expect(provider.getCredentialProvider({})).rejects.toThrow( - /No credentials found/, - ); + const minConfig = new ConfigReader({}); + const provider = DefaultAwsCredentialsManager.fromConfig(minConfig); + await expect( + provider.getCredentialProvider({ accountId: '123456789012' }), + ).rejects.toThrow(/No credentials found/); }); }); }); diff --git a/packages/integration-aws-node/src/DefaultAwsCredentialsManager.ts b/packages/integration-aws-node/src/DefaultAwsCredentialsManager.ts index 7799f08b4d..12e1e2dffd 100644 --- a/packages/integration-aws-node/src/DefaultAwsCredentialsManager.ts +++ b/packages/integration-aws-node/src/DefaultAwsCredentialsManager.ts @@ -221,7 +221,6 @@ export class DefaultAwsCredentialsManager implements AwsCredentialsManager { ): Promise { // If no options provided, fall back to the main account if (!opts) { - await fillInAccountId(this.mainAccountCredentialProvider); return this.mainAccountCredentialProvider; } @@ -235,7 +234,6 @@ export class DefaultAwsCredentialsManager implements AwsCredentialsManager { // If the account ID was not provided (explicitly or in the ARN), // fall back to the main account if (!accountId) { - await fillInAccountId(this.mainAccountCredentialProvider); return this.mainAccountCredentialProvider; }