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

Angular应用中通过角色扮演获取AWS凭证的最佳方案

Angular中使用AWS SDK通过角色扮演访问CloudWatch Logs的方案

核心思路

通过AWS STS(Security Token Service)的AssumeRole接口获取目标角色的临时凭证,再用该凭证初始化CloudWatch Logs客户端。

步骤1:安装依赖

首先安装STS客户端包:

npm install @aws-sdk/client-sts

步骤2:实现角色扮演与客户端初始化

以下是完整的TypeScript代码示例:

import { CloudWatchLogsClient } from "@aws-sdk/client-cloudwatch-logs";
import { STSClient, AssumeRoleCommand } from "@aws-sdk/client-sts";

async function getCloudWatchClient(
  region: string,
  targetRoleArn: string,
  sourceCredentials: { accessKeyId: string; secretAccessKey: string }
) {
  // 初始化STS客户端,使用有权限扮演目标角色的源账号凭证
  const stsClient = new STSClient({
    region,
    credentials: sourceCredentials,
  });

  // 发起角色扮演请求
  const assumeRoleCmd = new AssumeRoleCommand({
    RoleArn: targetRoleArn,
    RoleSessionName: "AngularCloudWatchSession", // 自定义会话名,用于审计追踪
  });

  const stsResponse = await stsClient.send(assumeRoleCmd);
  const tempCreds = stsResponse.Credentials;

  if (!tempCreds) {
    throw new Error("无法获取临时凭证");
  }

  // 用临时凭证初始化CloudWatch Logs客户端
  return new CloudWatchLogsClient({
    region,
    credentials: {
      accessKeyId: tempCreds.AccessKeyId!,
      secretAccessKey: tempCreds.SecretAccessKey!,
      sessionToken: tempCreds.SessionToken!,
    },
  });
}

// 使用示例
const targetRegion = "us-east-1";
const targetRoleArn = "arn:aws:iam::123456789012:role/CloudWatchReadOnlyRole";
// 源账号凭证:必须拥有扮演目标角色的权限
const sourceCreds = {
  accessKeyId: "SOURCE_ACCESS_KEY",
  secretAccessKey: "SOURCE_SECRET_KEY",
};

getCloudWatchClient(targetRegion, targetRoleArn, sourceCreds)
  .then((client) => {
    // 在此处调用CloudWatch Logs API,例如DescribeLogGroups
    console.log("CloudWatch客户端初始化成功");
  })
  .catch((err) => {
    console.error("客户端初始化失败:", err);
  });

关键说明

  1. 本地凭证文件的限制
    Angular作为浏览器端应用,无法直接读取本地~/.aws/credentials文件(浏览器无本地文件系统访问权限)。如果是Angular Universal服务端渲染场景,AWS SDK v3会自动遵循默认凭证链,自动读取本地凭证文件,此时无需手动传入sourceCredentials,直接初始化STS客户端即可。

  2. 角色权限配置

  • 目标角色需配置信任策略,允许源账号的IAM用户/角色扮演它:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::源账号ID:user/源用户名"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 目标角色需附加权限策略,允许访问CloudWatch Logs:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams",
            "logs:GetLogEvents"
          ],
          "Resource": "*"
        }
      ]
    }
    
  1. 安全建议
    前端应用禁止硬编码长期凭证,建议通过后端API分发临时凭证,或使用AWS Cognito联合身份认证,让用户通过身份提供商登录后自动获取有权限扮演角色的临时凭证,避免凭证泄露风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:00:33