fix: use aws sdk v2 for kubernetes aws backend auth to be compatible with the rest of backstage
Signed-off-by: Jonah Back <jonah@jonahback.com>
This commit is contained in:
@@ -31,12 +31,12 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/credential-provider-node": "^3.3.0",
|
||||
"@backstage/backend-common": "^0.5.5",
|
||||
"@backstage/catalog-model": "^0.7.3",
|
||||
"@backstage/config": "^0.1.3",
|
||||
"@kubernetes/client-node": "^0.13.2",
|
||||
"@types/express": "^4.17.6",
|
||||
"aws-sdk": "^2.840.0",
|
||||
"aws4": "^1.11.0",
|
||||
"compression": "^1.7.4",
|
||||
"cors": "^2.8.5",
|
||||
|
||||
+9
-21
@@ -13,13 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
const mockCredentialProvider = jest.fn();
|
||||
jest.mock('@aws-sdk/credential-provider-node', () => {
|
||||
return {
|
||||
defaultProvider: () => mockCredentialProvider,
|
||||
};
|
||||
});
|
||||
|
||||
import AWS from 'aws-sdk';
|
||||
import { AwsIamKubernetesAuthTranslator } from './AwsIamKubernetesAuthTranslator';
|
||||
|
||||
describe('AwsIamKubernetesAuthTranslator tests', () => {
|
||||
@@ -29,14 +23,12 @@ describe('AwsIamKubernetesAuthTranslator tests', () => {
|
||||
it('returns a signed url for aws credentials', async () => {
|
||||
const authTranslator = new AwsIamKubernetesAuthTranslator();
|
||||
|
||||
mockCredentialProvider.mockImplementation(async () => {
|
||||
// These credentials are not real.
|
||||
// Pulled from example in docs: https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html
|
||||
return {
|
||||
accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
|
||||
secretKeyId: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
|
||||
};
|
||||
});
|
||||
// These credentials are not real.
|
||||
// Pulled from example in docs: https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html
|
||||
AWS.config.credentials = new AWS.Credentials(
|
||||
'AKIAIOSFODNN7EXAMPLE',
|
||||
'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
|
||||
);
|
||||
|
||||
const clusterDetails = await authTranslator.decorateClusterDetailsWithAuth({
|
||||
name: 'test-cluster',
|
||||
@@ -47,17 +39,13 @@ describe('AwsIamKubernetesAuthTranslator tests', () => {
|
||||
});
|
||||
|
||||
it('throws when unable to get aws credentials', async () => {
|
||||
AWS.config.credentials = undefined;
|
||||
const authTranslator = new AwsIamKubernetesAuthTranslator();
|
||||
|
||||
mockCredentialProvider.mockImplementation(async () => {
|
||||
throw new Error('not implemented');
|
||||
});
|
||||
|
||||
const promise = authTranslator.decorateClusterDetailsWithAuth({
|
||||
name: 'test-cluster',
|
||||
url: '',
|
||||
authProvider: 'aws',
|
||||
});
|
||||
await expect(promise).rejects.toThrow('not implemented');
|
||||
await expect(promise).rejects.toThrow('no credentials found');
|
||||
});
|
||||
});
|
||||
|
||||
+6
-3
@@ -13,10 +13,10 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import { defaultProvider } from '@aws-sdk/credential-provider-node';
|
||||
import { sign } from 'aws4';
|
||||
import { KubernetesAuthTranslator } from './types';
|
||||
import { ClusterDetails } from '..';
|
||||
import AWS, { Credentials } from 'aws-sdk';
|
||||
|
||||
const base64 = (str: string) =>
|
||||
Buffer.from(str.toString(), 'binary').toString('base64');
|
||||
@@ -32,8 +32,11 @@ const makeUrlSafe = pipe([replace('+', '-'), replace('/', '_')]);
|
||||
export class AwsIamKubernetesAuthTranslator
|
||||
implements KubernetesAuthTranslator {
|
||||
async getBearerToken(clusterName: string): Promise<string> {
|
||||
const credentialProvider = defaultProvider();
|
||||
const credentials = await credentialProvider();
|
||||
const credentials = AWS.config.credentials;
|
||||
if (!(credentials instanceof Credentials)) {
|
||||
throw new Error('no credentials found');
|
||||
}
|
||||
await credentials.getPromise();
|
||||
const request = {
|
||||
host: `sts.amazonaws.com`,
|
||||
path: `/?Action=GetCallerIdentity&Version=2011-06-15&X-Amz-Expires=60`,
|
||||
|
||||
Reference in New Issue
Block a user