You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS SDK v3在JS/TS中通过角色凭证创建SSMClient失败

解决方案

核心问题分析

  • 未传入临时凭证到SSMClient:你已通过AssumeRole获取有效临时凭证,但创建SSMClient时未配置这些凭证,导致客户端仍尝试使用默认凭证链(如环境变量、本地配置文件),触发"缺少凭证"错误。
  • RoleArn参数错误:你传入的RoleArn是IAM策略的ARN(arn:aws:iam::425112775363:policy/SSMFullAccessCognito),但AssumeRole要求传入IAM角色的ARN,这会导致角色切换逻辑存在潜在问题。

修正后的代码

import { STSClient, AssumeRoleCommand } from "@aws-sdk/client-sts";
import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm";
import { fromTemporaryCredentials } from "@aws-sdk/credential-providers";

const REGION = "你的区域标识"; // 例如 us-east-1

// 1. 替换为正确的IAM角色ARN
const assumeRoleParams = {
  RoleArn: "arn:aws:iam::425112775363:role/你的目标角色名称",
  RoleSessionName: "session1",
  DurationSeconds: 900,
};

// 方式一:手动传入临时凭证
const stsClient = new STSClient({ region: REGION });
const assumeRoleData = await stsClient.send(new AssumeRoleCommand(assumeRoleParams));
const tempCredentials = {
  accessKeyId: assumeRoleData.Credentials!.AccessKeyId,
  secretAccessKey: assumeRoleData.Credentials!.SecretAccessKey,
  sessionToken: assumeRoleData.Credentials!.SessionToken,
};

const ssmClient = new SSMClient({
  region: REGION,
  credentials: tempCredentials, // 注入临时凭证
});

// 方式二:使用SDK内置的临时凭证提供者(更推荐,自动处理凭证过期)
// const ssmClient = new SSMClient({
//   region: REGION,
//   credentials: fromTemporaryCredentials({
//     params: assumeRoleParams,
//     region: REGION,
//   }),
// });

// 获取SSM参数
const getParamCmd = new GetParameterCommand({ 
  Name: 'test',
  WithDecryption: false
});

const paramResult = await ssmClient.send(getParamCmd);
console.info(paramResult);

Amplify环境额外注意事项

  • 确保Amplify的认证凭证不会与手动切换的角色凭证冲突,避免凭证链优先级导致的异常。
  • 确认AssumeRole的目标角色信任策略中,已添加Amplify身份池的ARN,允许Amplify用户/身份切换到该角色。
  • 验证目标角色拥有ssm:GetParameter权限,且SSM参数的资源策略允许该角色访问。

内容的提问来源于stack exchange,提问作者Dave Barrineau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:55:24