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

如何通过Node.js编程获取AWS Roles Anywhere临时凭证?

使用AWS SDK v3通过IAM Roles Anywhere编程获取临时凭证

你之前找错了API入口——IAM Roles Anywhere有专门的SDK客户端,并非用STS的AssumeRoleCommand或GetSessionTokenCommand,而是通过RolesAnywhereClient中的CreateSessionCommand生成临时凭证。以下是具体实现步骤:

1. 安装依赖

先安装AWS SDK v3的Roles Anywhere客户端及必要工具库:

npm install @aws-sdk/client-rolesanywhere @aws-sdk/util-credentials fs

2. 准备证书文件

确保你持有以下文件(即ACM CA中生成的客户端证书相关文件):

  • 客户端私钥文件(如client-key.pem)
  • 客户端证书文件(如client-cert.pem)
  • CA根证书链文件(部分场景可选)

3. 编写核心代码

以下是Node.js环境下的完整示例,读取证书并调用CreateSession获取临时凭证:

const { RolesAnywhereClient, CreateSessionCommand } = require("@aws-sdk/client-rolesanywhere");
const fs = require('fs');
const path = require('path');

// 配置客户端区域(需与创建Roles Anywhere资源的区域一致)
const client = new RolesAnywhereClient({ region: "us-east-1" });

async function getRolesAnywhereCredentials() {
  // 读取本地证书和私钥文件
  const privateKey = fs.readFileSync(path.resolve(__dirname, './client-key.pem'), 'utf8');
  const certificate = fs.readFileSync(path.resolve(__dirname, './client-cert.pem'), 'utf8');

  const params = {
    // 替换为你的信任锚点ARN
    trustAnchorArn: "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-xxxxxx",
    // 替换为你的Profile ARN
    profileArn: "arn:aws:rolesanywhere:us-east-1:123456789012:profile/p-xxxxxx",
    // 替换为目标IAM角色ARN
    roleArn: "arn:aws:iam::123456789012:role/your-target-role",
    // 传入证书与私钥内容
    certificate: certificate,
    privateKey: privateKey,
    // 可选:设置会话有效期,最大为3600秒(1小时)
    sessionDuration: 3600
  };

  try {
    const command = new CreateSessionCommand(params);
    const response = await client.send(command);
    // 提取临时凭证
    const credentials = response.credentials;
    console.log("获取到临时凭证:", credentials);
    return credentials;
  } catch (error) {
    console.error("获取凭证失败:", error);
    throw error;
  }
}

// 调用示例
getRolesAnywhereCredentials();

4. 使用临时凭证调用其他AWS服务

拿到凭证后,可用于初始化其他AWS服务客户端,例如S3:

const { S3Client, ListBucketsCommand } = require("@aws-sdk/client-s3");

async function listS3Buckets() {
  const credentials = await getRolesAnywhereCredentials();
  const s3Client = new S3Client({
    region: "us-east-1",
    credentials: {
      accessKeyId: credentials.accessKeyId,
      secretAccessKey: credentials.secretAccessKey,
      sessionToken: credentials.sessionToken
    }
  });

  const command = new ListBucketsCommand({});
  const response = await s3Client.send(command);
  console.log("S3存储桶列表:", response.Buckets);
}

listS3Buckets();

关键注意事项

  • 需确保目标IAM角色的信任策略允许Roles Anywhere服务扮演该角色,且Roles Anywhere的Profile已关联此角色。
  • 使用的客户端证书必须由你创建的ACM CA签发,且信任锚点已关联该CA。
  • 临时凭证有效期最大为1小时,到期后需重新调用CreateSession生成新凭证。

内容的提问来源于stack exchange,提问作者Maxime Dupré

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:32:43