如何通过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é
相关产品推荐
相关产品推荐

