[控场AI]
· 7 分钟阅读· 3,727 字

Claude Code接入AWS MCP:只读权限的完整配置指南

Claude Code接入AWS MCP:只读权限的完整配置指南

用四个MCP服务器把Claude Code接入只读AWS账户,实现真实数据查询而非训练数据猜测。

文章介绍了如何在 VS Code 中通过 MCP 协议让 Claude Code 直接查询真实 AWS 账户,核心约束是全程只读。作者配置了四个 MCP 服务器:AWS 知识服务器提供最新文档,托管 AWS MCP 服务器覆盖任意 API,计费服务器提供成本数据,CloudWatch 服务器负责告警与日志,所有调用统一走只读 IAM 角色。接入托管服务器有代理签名与 OAuth 两条路径,团队配置放在 `.mcp.json` 并提交版本库,个人服务器装在 user 作用域。权限分两层:allow list 决定免确认范围,IAM 决定操作是否可能成功。实测中代理成功完成成本排查与告警查询,并在工具调用失败后重新查询而非编造答案,体现了真实数据接入的价值。

让AI代理直接查看真实AWS账户,而不是靠训练数据猜测——这是Claude Code配合MCP(Model Context Protocol)在VS Code中实现的核心能力。整套方案的关键约束只有一个:只读。代理能看,但不能改。

为什么要给Claude Code接上AWS的真实视角

Claude Code本身运行在本地VS Code里,依托Claude订阅工作。单独使用时,它对AWS的认知来自训练数据,意味着版本滞后、服务状态不明、账户情况全靠猜。MCP的价值在于给代理提供可调用的工具,把"猜"换成"查"。

作者在视频中配置了四个MCP服务器:AWS知识服务器提供最新AWS文档,托管AWS MCP服务器覆盖任意AWS API,计费服务器提供成本数据,CloudWatch服务器负责告警、指标和日志。所有对账户的调用统一走一个只读IAM角色,这是整条链路的权限底线。

广覆盖与窄聚焦的取舍

托管AWS MCP服务器通过单一端点触达数千个AWS API,覆盖面广,但代价是代理必须自己写对调用。计费、CloudWatch这类聚焦服务器则提供少量命名清晰的工具,回答更快、更容易被允许。作者的建议是先从2到4个服务器起步——每增加一个服务器,都会往代理的上下文里塞入一批工具描述,成本和干扰随之上升。

MCP(Model Context Protocol) 是 Anthropic 于 2024 年底推出的开放协议,用于在 AI 应用与外部数据源、工具之间建立标准化连接。可以把它理解为"AI 的 USB-C 接口":模型本身不直接访问数据库、云 API 或文件系统,而是通过 MCP 服务器暴露的一组工具(tools)来发起调用。每个 MCP 服务器声明自己提供哪些工具、每个工具接受什么参数,客户端(这里是 Claude Code)在启动时读取这些描述并注入模型上下文。MCP 支持多种传输方式,本地进程常用 stdio,远程服务则走 HTTP/SSE。正因为它把"能力"与"模型"解耦,同一套 AWS 工具配置可以复用到不同项目和不同模型后端,这也是文中团队共享 .mcp.json 的前提。

两种接入方式与团队共享配置

servers just for you at user scope

第一步是确认前置条件:Claude Code、用UVX运行Python MCP服务器的UV、AWS CLI v2,以及一个具备只读访问和Cost Explorer读取权限的只读角色。

个人服务器装在user作用域,这样每个项目都能加载。AWS知识服务器是纯HTTPS端点,通过claude mcp add --transport HTTP --scope user添加,不需要密钥,也不需要AWS账户。AWS MCP服务器走MCP proxy for AWS,由代理用只读profile为每个请求签名,版本需要固定。

AWS profile

接入托管AWS MCP服务器有两条路:一是代理签名模式,可以用任意CLI profile,便于切换账户并交给代理一个专用只读角色;二是跳过代理、走HTTP端点并用浏览器OAuth登录,配置更简单,但身份唯一,且角色需要额外挂一个AWS托管策略。无论走哪条路,最终决定代理能做什么的都是IAM。

团队级服务器放在仓库根目录的.mcp.json并提交到版本库。计费服务器用UVX运行并固定版本,profile用AWS_PROFILE变量传入,默认值为只读角色——这个文件里永远不放密钥。CloudWatch服务器同样处理,日志保持安静。

UVX 是 Python 包管理器 uv 提供的工具运行器,作用类似 npx:无需预先 pip install,直接按包名拉取并执行一个 Python 命令行程序,且可指定版本。文中计费与 CloudWatch MCP 服务器都以 uvx <包名>@<版本> 形式启动,因此机器上需要先装 uv。固定版本很重要——MCP 服务器的工具签名可能随版本变化,若不锁定,队友拉取最新版后工具描述可能与文档或 allow list 不匹配。MCP proxy for AWS 则是 AWS 官方提供的本地代理,它读取本地 AWS CLI profile 的凭证,为每个发往托管 MCP 端点的请求做 SigV4 签名,从而让远程服务以调用者身份执行 API 请求。这意味着权限边界完全由该 profile 所承担的 IAM 角色决定,代理本身不会放大权限。

权限分级:允许列表与IAM的双层护栏

完成配置后,在Claude Code面板输入/mcp检查连接状态。项目级的计费和CloudWatch服务器在受信任文件夹下由面板加载,命令行方式下则需要队友手动批准;user作用域下的AWS知识和AWS MCP服务器一并显示已连接。

接着在.claude目录的settings.json里决定哪些工具免确认执行:AWS知识、计费、CloudWatch这三个纯读服务器全部放行,托管AWS MCP服务器保持"先问我",因为它能发起任意API调用。提交这个文件时和其他配置一起走。

这里有两层独立护栏:允许列表决定什么工具无需询问即可运行,IAM角色决定什么操作根本不可能成功。视频中的验证很直接——问AWS当前身份,返回只读角色;尝试创建桶,返回Access denied。

Claude Code 的 allow list 配置在 settings.json 的 permissions.allow 字段中,条目形如 mcp__<服务器名>__<工具名>,支持通配。它的语义是"无需人工确认即可执行",属于交互层面的效率开关,而非安全边界——被拒绝确认的调用并不会被系统阻止,只是每次都要弹窗。真正的安全边界是第二层:IAM 策略在服务端判定请求是否合法。因此只读角色的正确做法是仅授予 ReadOnlyAccess 类托管策略加 ce:Get* 等必要读权限,并显式拒绝写操作。两层护栏职责不同:allow list 管"顺手不顺手",IAM 管"能不能"。即便 allow list 配错放行了写工具,IAM 仍会让请求返回 Access denied,这正是文中"创建桶被拒"测试所验证的。

实测:成本排查与告警查询

top five services

新会话里问一句"这周什么在花钱",要求用计费服务器给出本周对比上周的Top 5服务加一条省钱建议。因为计费在允许列表里,没有权限提示,约20秒后返回实时Cost Explorer数据:沙箱本周花费几乎为零,上周为59美分,涉及Route 53、ECR、S3。花费跳变的真实原因是11月1日两笔按月计费——Route 53托管区和税费,并不是某项支出变贵了。省钱建议是:如果该托管区不服务任何在线域名,删掉它每年可省约6美元。过程中有一次工具调用失败,因为Cost Optimization Hub未启用,Claude如实报告而不是编造答案。

第二个测试把两个日常检查合并成一个提示:us-east-1有哪些CloudWatch告警在触发,以及S3 Vectors在斯德哥尔摩(eu-north-1)是否可用。CloudWatch服务器回答前者——没有任何处于告警状态的指标或复合告警;知识服务器回答后者。

AWS availability catalog

有意思的是知识服务器的第一次查询用错了产品名而失败,随后它重新查询而非猜测,最终确认AWS可用性目录中eu-north-1已列出S3 Vectors。

成本结构与团队场景

Claude Code运行在订阅上,MCP服务器本身免费,但部分调用要钱:Cost Explorer每个API请求1美分,CloudWatch Logs Insights按扫描数据量计费。所以问题要问得聚焦。

对企业还有一个选项:把Claude Code指向Amazon Bedrock(设置CLAUDE_CODE_USE_BEDROCK=1),模型调用走企业自己的AWS账户,由IAM控制并计入AWS账单,MCP配置完全不变。

配置清单

  • 先建只读角色,再谈工具
  • 选2到4个服务器起步
  • 个人服务器放user作用域,团队服务器进.mcp.json
  • 用变量传profile,绝不写密钥
  • 固定服务器版本
  • 纯读工具放行,广覆盖服务器设为需确认
  • 开工前先跑一遍/mcp
#Claude Code#AWS MCP Servers#MCP配置#只读权限#VS Code#Amazon Bedrock#CloudWatch
分享:

相关推荐