MCP与云服务
3963 字约 13 分钟
AIAgentMCP云服务
2026-07-24
通过 MCP 接入云服务(AWS、GCP、Azure 等),让 Agent 能够操作对象存储、调用计算函数、查询数据库、收发消息、读取监控指标和调用 AI 服务。云服务接入的核心挑战在于:认证集成、权限映射、成本控制和区域感知。
一、基本定义
MCP 云服务接入是指通过 MCP Server 将云平台提供的服务能力暴露给 AI 应用。与传统 API 集成不同,MCP 提供了标准化的能力发现和调用机制,使同一个 Server 可以同时暴露多种云服务。
核心设计问题:
- 云服务的哪些能力应该暴露为 Resource(只读数据,如配置、指标、对象元数据)
- 哪些应该暴露为 Tool(可执行操作,如上传文件、触发函数、创建实例)
- 如何在多云环境下统一认证和权限模型
- 如何控制 API 调用成本和防止意外资源创建
二、典型云服务接入
2.1 对象存储(S3、GCS、Blob Storage)
对象存储是最常见的云服务接入场景,适合同时暴露为 Resource 和 Tool:
| 能力 | MCP 类型 | 说明 | 风险等级 |
|---|---|---|---|
| 列出存储桶 | Resource | 返回桶列表和元数据 | 低 |
| 列出对象 | Resource | 指定前缀下的对象列表 | 低 |
| 读取对象内容 | Tool | 下载并返回对象内容 | 中 |
| 上传对象 | Tool | 上传文件到指定路径 | 高 |
| 删除对象 | Tool | 删除指定对象 | 很高 |
| 生成预签名 URL | Tool | 生成临时访问链接 | 中 |
Resource 示例:
- s3://my-bucket/objects?prefix=data/ → 列出 data/ 下的对象
- s3://my-bucket/objects/report.csv → 对象元数据(大小、修改时间、ETag)关键约束:大文件不应整体读入模型上下文,应返回摘要或元数据。
2.2 计算服务(EC2、Cloud Functions、Cloud Run)
计算服务的接入需要格外谨慎,因为操作可能是不可逆的且涉及成本:
| 能力 | MCP 类型 | 说明 | 风险等级 |
|---|---|---|---|
| 列出实例/函数 | Resource | 当前运行的资源列表 | 低 |
| 查看实例状态 | Resource | CPU、内存、运行状态 | 低 |
| 启动/停止实例 | Tool | 改变实例运行状态 | 高 |
| 调用函数 | Tool | 触发 Cloud Functions / Lambda | 中 |
| 部署函数 | Tool | 更新函数代码 | 很高 |
| 终止实例 | Tool | 不可逆操作 | 极高 |
2.3 数据库服务(RDS、Cloud SQL)
云数据库接入与通用数据库接入类似,但增加了云服务特有的考量。参见 MCP与数据库。
额外需要处理的云服务特有问题:
- 实例的启停和扩缩容操作
- 备份和恢复操作
- 连接字符串和凭证的动态获取
- 数据库参数组/配置的管理
2.4 消息服务(SQS、Pub/Sub、Service Bus)
消息服务的接入使 Agent 能够发送和接收消息:
| 能力 | MCP 类型 | 说明 |
|---|---|---|
| 列出队列/主题 | Resource | 可用消息通道列表 |
| 查看队列属性 | Resource | 消息数量、消费者数量 |
| 发送消息 | Tool | 向队列/主题发布消息 |
| 接收消息 | Tool | 从队列拉取消息 |
| 确认消息 | Tool | 确认消息已处理 |
注意:消息可能包含提示注入内容,外部消息尤其需要隔离处理。参见 MCP安全边界。
2.5 监控服务(CloudWatch、Stackdriver、Azure Monitor)
监控数据天然适合暴露为 Resource:
Resource 示例:
- cloudwatch://metrics/aws/ec2?namespace=CPUUtilization → EC2 CPU 指标
- stackdriver://metrics/gce_instance/cpu → GCE CPU 指标
- monitor://alerts/active → 当前活跃告警| 能力 | MCP 类型 | 说明 |
|---|---|---|
| 查询指标数据 | Tool | 获取指定时间范围的指标 |
| 创建告警规则 | Tool | 设置新的监控告警 |
| 查看告警历史 | Resource | 历史告警列表 |
| 查看 Dashboard | Resource | 监控面板配置 |
2.6 AI 服务(Bedrock、Vertex AI、Azure OpenAI)
通过 MCP 接入其他云 AI 服务,可以实现模型能力的组合:
| 能力 | MCP 类型 | 说明 |
|---|---|---|
| 列出可用模型 | Resource | 平台支持的模型列表 |
| 文本生成 | Tool | 调用 LLM 生成文本 |
| 图像生成 | Tool | 调用图像模型 |
| 嵌入计算 | Tool | 获取文本 Embedding |
| 查看调用配额 | Resource | 当前 API 配额和用量 |
三、认证集成
3.1 IAM 角色
云服务的 IAM 角色是 MCP Server 访问云资源的身份基础:
- AWS:IAM Role + STS AssumeRole,Server 通过 Role 获取临时凭证
- GCP:Service Account + IAM,Server 绑定 Service Account
- Azure:Managed Identity,Server 使用系统或用户分配的 Identity
3.2 服务账户
服务账户是 MCP Server 访问云服务的非人类身份:
- 每个 MCP Server 应该使用独立的服务账户
- 服务账户的权限遵循最小权限原则
- 服务账户的密钥应该通过 Secret Manager 管理
- 参见 MCP认证与授权 中关于服务身份的讨论
3.3 临时凭证(STS)
临时凭证是云服务认证的最佳实践:
- AWS STS(Security Token Service)签发 15 分钟到 1 小时的临时凭证
- GCP 通过 Service Account Token 生成短期 Access Token
- Azure AD 签发短期 Bearer Token
临时凭证的优势:
- 泄露后影响有限(自动过期)
- 不需要管理长期密钥
- 可以绑定会话级别的条件策略
3.4 凭证轮换
云服务凭证的轮换策略:
| 凭证类型 | 轮换周期 | 方式 |
|---|---|---|
| STS 临时凭证 | 15-60 分钟 | 自动刷新 |
| Service Account Key | 90 天 | Secret Manager 管理 |
| API Key | 90 天 | 控制台或 CLI 轮换 |
| Access Token | 1 小时 | OAuth / STS 自动刷新 |
四、权限映射
4.1 云服务 IAM → MCP 权限
云服务的 IAM 策略需要与 MCP 权限模型对齐:
云服务 IAM 权限 MCP 权限映射
─────────────────────────────────────────────────
s3:GetObject → Resource:read
s3:PutObject → Tool:execute (上传)
s3:DeleteObject → Tool:execute (删除,高风险)
lambda:InvokeFunction → Tool:execute
ec2:StartInstances → Tool:execute (需要审批)
ec2:TerminateInstances → 默认禁止
cloudwatch:GetMetricData → Resource:read / Tool:execute关键原则:云服务的细粒度 IAM 权限应该映射到 MCP 的风险分级体系中。参见 MCP权限设计。
4.2 最小权限策略
MCP Server 的云服务权限应该仅包含完成其功能所需的最小权限集:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/data/*"
]
}
]
}4.3 资源级权限
云服务的 IAM 支持资源级别的权限控制,应该充分利用:
- 限定到具体的存储桶和路径前缀
- 限定到具体的数据库实例
- 限定到具体的函数名称
- 通过 Tag 条件限制操作范围
五、Resource 设计
5.1 存储桶中的对象 → Resource
对象存储的元数据天然适合暴露为 Resource:
URI 设计:
cloud://aws/s3/bucket-name/objects?prefix=data/&max-keys=100
cloud://gcp/gcs/bucket-name/objects/path/to/file.csv/metadata
返回内容:
- 对象键名、大小、修改时间
- Content-Type、ETag
- 存储类别(Standard / IA / Glacier)注意:对象内容本身不应直接作为 Resource URI 返回——大文件会消耗大量 Token。应通过 Tool 按需下载。
5.2 监控指标 → Resource
当前指标快照适合暴露为 Resource,历史查询适合 Tool:
Resource:
cloud://aws/cloudwatch/metrics/ec2/instance-id/cpu?period=5m
→ 当前 CPU 使用率
Tool:
query_metrics(service, metric, start_time, end_time, period)
→ 返回时间序列数据5.3 配置信息 → Resource
云服务的配置信息适合暴露为 Resource:
Resource:
cloud://aws/ec2/regions → 可用区域列表
cloud://aws/iam/roles → 当前账户的 IAM 角色列表
cloud://gcp/projects → 可访问的 GCP 项目列表六、Tool 设计
6.1 上传/下载文件
Tool: upload_file
参数: bucket, key, content(或 local_path), content_type
风险: 高(可能覆盖现有文件)
策略: 上传前检查目标是否存在,支持 dry-run
Tool: download_file
参数: bucket, key, max_size
风险: 中(可能下载大文件消耗 Token)
策略: 限制文件大小,大文件返回摘要6.2 创建/删除资源
Tool: create_resource
参数: service, resource_type, config
风险: 很高(创建云资源产生费用)
策略: 需要用户确认,预估成本
Tool: delete_resource
参数: service, resource_type, resource_id
风险: 极高(不可逆)
策略: 二次确认,软删除优先6.3 触发函数
Tool: invoke_function
参数: function_name, payload, async_mode
风险: 中(函数执行可能产生费用和副作用)
策略: 设置超时和内存限制,返回执行结果6.4 查询日志
Tool: query_logs
参数: service, log_group, start_time, end_time, filter_pattern
风险: 低(只读操作)
策略: 限制返回条数,支持分页七、成本控制
7.1 API 调用成本
云服务的 API 调用可能产生费用:
- 对象存储的 GET/LIST 请求按次计费
- 计算服务的函数调用按次数和时长计费
- 监控服务的 API 调用有免费额度限制
MCP Server 应该:
- 缓存频繁查询的 Resource 数据,减少重复 API 调用
- 对 Tool 调用实施限流,防止 Agent 循环调用
- 记录每次 API 调用的预估成本
7.2 数据传输成本
跨区域和跨网络的数据传输是隐性成本的主要来源:
- 同区域内传输通常免费
- 跨区域传输按流量计费
- 互联网出站流量按流量计费
- 大文件下载可能产生显著费用
MCP Server 应该:
- 优先使用同区域端点
- 大文件操作返回元数据而非全文
- 在 Tool 描述中标注数据传输可能的成本
7.3 计算成本
Agent 触发计算资源时需要考虑成本影响:
- 函数调用的执行时长和内存配置
- 实例启停的费用差异
- 预留实例与按需实例的成本差异
八、区域和可用区
云服务是区域感知的,MCP Server 必须正确处理区域信息:
- 默认区域:Server 配置中指定默认区域
- 区域参数:Tool 支持可选的
region参数 - 区域隔离:不同区域的数据不能跨区访问
- 可用区感知:某些操作(如创建 EC2 实例)需要指定可用区
URI 设计示例:
cloud://aws/s3/us-east-1/bucket-name/objects
cloud://gcp/gcs/us-central1-a/bucket-name/objects
Tool 参数示例:
create_instance(region="us-east-1", zone="us-east-1a", ...)九、安全和合规
9.1 数据安全
- 传输中的数据必须加密(TLS)
- 静态数据默认加密(SSE-KMS / CMEK)
- 敏感数据不应出现在模型上下文中
- 日志中的凭证和敏感信息必须脱敏
9.2 合规要求
不同行业对云服务使用有合规要求:
| 合规标准 | 关键要求 |
|---|---|
| SOC 2 | 访问控制、审计日志、数据加密 |
| HIPAA | 数据隔离、访问审计、加密传输 |
| GDPR | 数据位置、删除权、处理记录 |
| PCI DSS | 网络隔离、密钥管理、日志保留 |
9.3 操作审计
所有云服务操作必须有完整的审计日志:
- 操作者身份(用户 + Agent)
- 操作的云服务和区域
- 请求参数(脱敏后)
- 操作结果和耗时
- 关联的云 Trail / Audit Log 条目
参见 MCP日志与可观测性。
十、设计原则
- 区域感知:所有操作明确指定区域,不依赖隐式默认值
- 成本意识:在 Tool 描述中标注成本影响,缓存高频查询
- 最小权限:IAM 策略精确到资源和操作级别
- 临时凭证优先:使用 STS 等临时凭证机制,避免长期密钥
- 大文件隔离:不在模型上下文中传递大文件内容
- 操作分级:只读操作自动化,写操作需确认,删除操作需二次确认
- 完整审计:所有云服务操作记录审计日志
- 幂等设计:写操作支持幂等键,防止重试导致重复创建
十一、常见误区
| 误区 | 正确理解 |
|---|---|
| "Agent 可以随意创建云资源" | 资源创建涉及成本,必须需要用户确认和成本预估 |
| "使用管理员权限简化配置" | 应该为每个 MCP Server 配置最小权限的 IAM 角色 |
| "把大文件内容全部返回给模型" | 应该返回元数据和摘要,按需读取部分内容 |
| "忽视区域差异" | 不同区域的 API 端点、配额、价格都不同 |
| "硬编码长期凭证" | 应该使用 STS 临时凭证或 Managed Identity |
| "不控制 API 调用频率" | Agent 可能循环调用导致高额账单 |
| "所有云服务用同一个 Server" | 不同云服务的安全模型和操作模式差异大,应该按领域拆分 |
十二、实践检查清单
认证与权限
Resource 与 Tool 设计
成本控制
安全与审计
十三、与其他概念的关系
- MCP基础:MCP 基本概念是理解云服务接入的前提
- MCP Server设计:云服务 Server 的分层和拆分策略
- MCP认证与授权:云服务 IAM 与 MCP 认证机制的集成
- MCP权限设计:云服务权限到 MCP 权限的映射
- MCP安全边界:云服务操作的安全边界划分
- MCP资源模型:云资源元数据暴露为 Resource 的设计方法
- MCP Tool能力:云服务操作封装为 Tool 的设计模式
- MCP日志与可观测性:云服务操作的审计和监控
- MCP与数据库:云数据库接入的特殊考量
- MCP性能与扩展性:API 调用性能、缓存和限流策略
十四、适用边界
适用:
- 通过 Agent 自动化管理云基础设施
- AI 辅助查询监控指标和日志
- Agent 操作对象存储(上传、下载、管理文件)
- 触发和管理云函数
- 多云环境下的统一能力暴露
不适用:
- 高并发在线服务的直接代理(应使用 API 网关)
- 大规模基础设施自动化(应使用 Terraform / Pulumi)
- 实时流处理管道(应使用专用流处理服务)
- 复杂的网络配置操作(应使用 IaC 工具)