diff --git a/packages/amazonq/.changes/next-release/Bug Fix-0ee7be24-b0f8-460b-a852-a2d08b6d289e.json b/packages/amazonq/.changes/next-release/Bug Fix-0ee7be24-b0f8-460b-a852-a2d08b6d289e.json new file mode 100644 index 00000000000..0cbf9c14961 --- /dev/null +++ b/packages/amazonq/.changes/next-release/Bug Fix-0ee7be24-b0f8-460b-a852-a2d08b6d289e.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Use SM IAM Credentials for Code Completion" +} diff --git a/packages/amazonq/src/extension.ts b/packages/amazonq/src/extension.ts index d7c7f3c1448..599aa9264a4 100644 --- a/packages/amazonq/src/extension.ts +++ b/packages/amazonq/src/extension.ts @@ -44,6 +44,7 @@ import { setContext, setupUninstallHandler, maybeShowMinVscodeWarning, + isSageMaker, } from 'aws-core-vscode/shared' import { ExtStartUpSources, telemetry } from 'aws-core-vscode/telemetry' import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' @@ -193,7 +194,7 @@ export async function activateAmazonQCommon(context: vscode.ExtensionContext, is } } const currConn = AuthUtil.instance.conn - if (currConn !== undefined && !isAnySsoConnection(currConn)) { + if (currConn !== undefined && !(isAnySsoConnection(currConn) || isSageMaker())) { getLogger().error(`Current Amazon Q connection is not SSO, type is: %s`, currConn?.type) } diff --git a/packages/core/src/auth/activation.ts b/packages/core/src/auth/activation.ts index 71b9bd098b8..4753043a0fc 100644 --- a/packages/core/src/auth/activation.ts +++ b/packages/core/src/auth/activation.ts @@ -8,11 +8,19 @@ import { LoginManager } from './deprecated/loginManager' import { fromString } from './providers/credentials' import { getLogger } from '../shared/logger' import { ExtensionUse } from './utils' -import { isCloud9 } from '../shared/extensionUtilities' +import { isAmazonQ, isCloud9, isSageMaker } from '../shared/extensionUtilities' import { isInDevEnv } from '../shared/vscode/env' import { isWeb } from '../shared/extensionGlobals' +import { CredentialsProviderManager } from './providers/credentialsProviderManager' +import { SharedCredentialsProviderFactory } from './providers/sharedCredentialsProviderFactory' +import { Ec2CredentialsProvider } from './providers/ec2CredentialsProvider' +import { EcsCredentialsProvider } from './providers/ecsCredentialsProvider' +import { EnvVarsCredentialsProvider } from './providers/envVarsCredentialsProvider' export async function initialize(loginManager: LoginManager): Promise { + if (isAmazonQ() && isSageMaker()) { + initializeCredentialsProviderManager() + } Auth.instance.onDidChangeActiveConnection(async (conn) => { // This logic needs to be moved to `Auth.useConnection` to correctly record `passive` if (conn?.type === 'iam' && conn.state === 'valid') { @@ -25,6 +33,12 @@ export async function initialize(loginManager: LoginManager): Promise { await showManageConnectionsOnStartup() } +function initializeCredentialsProviderManager() { + const manager = CredentialsProviderManager.getInstance() + manager.addProviderFactory(new SharedCredentialsProviderFactory()) + manager.addProviders(new Ec2CredentialsProvider(), new EcsCredentialsProvider(), new EnvVarsCredentialsProvider()) +} + /** * Show the Manage Connections page when the extension starts up, if it should be shown. */