Files
test-repo/docs/zh-cn/appendix/cloud-services.md
T
sanbuphy 8a7eda8014 refactor(docs): reorganize file structure and update content
fix(docs): correct links and paths in multiple files
style(docs): adjust formatting and alignment in README files
docs: update content in multiple markdown files
2026-02-10 17:23:27 +08:00

32 KiB
Raw Blame History

云服务厂商入门指南

💡 学习指南:云服务厂商不是"买服务器的网站",而是"像水电公司一样提供计算能力的基础设施"。本章节会围绕一个核心问题展开:从零开始,如何理解并使用云服务? 我们会用真实场景、生动类比和实战步骤,帮你建立云服务的完整认知地图。

在开始之前,建议你先了解:

  • 基础网络概念:如果你还不熟悉 IP 地址、端口、域名等概念,建议先阅读 网络基础知识
  • API 是什么:如果你对 API 还不了解,可以先看 API 入门

0. 引言:为什么越来越多公司不买服务器了?

想象一下这个场景:

小明在 2010 年创业,想做一个网站。他经历了什么?

  1. 买服务器:花 2 万块钱买了一台戴尔服务器
  2. 找机房:联系 IDC 机房,每个月付 3000 元托管费
  3. 装系统:自己安装 Linux、配置环境
  4. 担心硬件:硬盘坏了要自己换,机器过热要自己解决
  5. 流量暴增:用户突然多了,系统撑不住了,又要买新服务器

一年后,小明花了 5 万,服务器利用率却只有 10%。


小红的公司在 2024 年创业,她是怎么做的?

  1. 打开云服务商网站:注册账号
  2. 点几下鼠标:创建一台云服务器(2 分钟完成)
  3. 按量付费:用多少付多少,不用不花钱
  4. 自动扩容:流量大了,点一下升级配置
  5. 全球部署:想开美国分部?换个地域就行

一个月后,小红花了 500 元,服务器利用率 80%。

直觉上,我们会以为是:"云服务就是租服务器"。

但云服务的本质远不止于此——它是一场计算能力的革命

从传统托管到云服务的演变

过去:买服务器 → 找机房 → 装系统 → 担心硬件 → 流量暴增时束手无策

现在:注册账号 → 点几下鼠标 → 按需付费 → 自动扩容 → 全球部署


1. 什么是云服务厂商?(概念篇)

1.1 一句话定义

云服务厂商,就是把计算能力、存储能力、网络能力包装成标准化的服务,像自来水公司提供水、电力公司提供电一样,通过互联网提供给用户使用的公司。

关键特点

  • 按需使用:用多少买多少,不用不花钱
  • 随时扩容:需要更多资源?点一下就行
  • 按秒计费:有些服务甚至按秒计费,极其灵活
  • 全球覆盖:在几十个国家都有数据中心
  • 自助服务24 小时都能操作,不需要人工审批

1.2 云服务 VS 传统托管

对比维度 传统 IDC 托管 云服务
启动时间 几天到几周(买硬件、上架) 几分钟(点几下鼠标)
成本模式 固定成本(一次性买服务器) 可变成本(按使用量付费)
扩容难度 需要买新服务器、上架、配置 点一下升级配置
维护责任 自己换硬盘、修网络 厂商全管,你只管用
地理覆盖 只能在一个地方 全球几十个地域
技术门槛 需要懂硬件、网络、运维 开发者就能用

1.3 云服务的"三巨头"分类

就像餐厅有不同的经营模式,云服务也有三种:

类型 特点 典型代表 适用场景
公有云 谁都能用,资源共享 AWS、阿里云、Azure 绝大多数企业和个人
私有云 自己搭,独享资源 OpenStack、VMware 大型企业、政府、银行
混合云 公有 + 私有结合 各厂商都有解决方案 既需要合规又需要弹性的场景

👉 本书重点讲公有云,因为它最常用、最适合学习。


2. 著名的云服务厂商有哪些?(格局篇)

2.1 国际三巨头(AWS、Azure、Google Cloud

国际三巨头对比

特性 AWS Azure Google Cloud
市场份额 32% (第一) 23% (第二) 10% (第三)
服务种类 200+ (最全) 100+ 100+
技术优势 成熟稳定 企业集成 Kubernetes、AI
价格 偏高 中等 相对便宜
适合场景 出海、初创 传统企业 容器化、AI

AWSAmazon Web Services

  • 出身:亚马逊 2006 年推出的云服务
  • 地位:全球市场份额第一(约 32%
  • 特点
    • 服务种类最全(200+ 种服务)
    • 功能最成熟稳定
    • 文档和社区资源丰富
    • 价格偏高,但性价比好
  • 适合:出海企业、初创公司、大型互联网公司

Microsoft Azure

  • 出身:微软 2010 年推出的云服务
  • 地位:全球市场份额第二(约 23%
  • 特点
    • 与 Windows、Office 生态深度集成
    • 企业级客户资源丰富
    • 混合云能力强
    • 对 .NET 开发者友好
  • 适合:传统企业、微软技术栈公司

Google Cloud Platform (GCP)

  • 出身:谷歌 2011 年推出的云服务
  • 地位:全球市场份额第三(约 10%
  • 特点
    • 在 Kubernetes、数据分析、AI 领域领先
    • 技术创新能力强
    • 价格相对便宜
    • 市场份额较小,生态不如前两家
  • 适合:技术驱动型公司、容器化应用、AI 项目

2.2 国内三巨头(阿里云、腾讯云、华为云)

阿里云

  • 出身:阿里巴巴 2009 年成立的云计算部门
  • 地位:中国市场份额第一(约 40%
  • 特点
    • 国内最早、最成熟
    • 服务种类齐全
    • 电商、双十一技术积累深厚
    • 价格相对较高
  • 适合:国内企业、电商相关项目

腾讯云

  • 出身:腾讯 2013 年成立的云服务部门
  • 地位:中国市场份额第二(约 15%
  • 特点
    • 游戏、音视频能力强
    • 与微信、QQ 生态结合好
    • 价格相对便宜
    • 近几年发展迅速
  • 适合:游戏、社交、直播类项目

华为云

  • 出身:华为 2015 年成立的云服务部门
  • 地位:中国市场份额第三(约 10%
  • 特点
    • 硬件技术积累强
    • 政府和企业客户资源丰富
    • 安全合规能力强
    • AI 芯片(昇腾)有特色
  • 适合:政府项目、大型国企、制造业

2.3 其他值得关注的厂商

厂商 特色 适合场景
百度智能云 AI 能力强(文心一言) AI 应用、自动驾驶
字节火山引擎 视频云、推荐算法 短视频、直播
京东云 电商、物流技术 供应链相关项目
天翼云 / 移动云 运营商背景 政府项目、合规要求高
UCloud / 青云 中立云厂商 不想绑定大厂的创业公司

2.4 怎么选云服务商?

选型决策流程

问题1:你的用户主要在哪里?
├─ 中国 → 阿里云 / 腾讯云
└─ 海外 → AWS / Azure

问题2:你的技术栈是什么?
├─ .NET → Azure
├─ Kubernetes / 大数据 → Google Cloud
└─ 通用 → AWS

问题3:你的项目阶段?
├─ 测试 / 试水 → 按需付费
└─ 生产环境 → 包年包月(省 30-60%)

选型原则

  1. 看目标市场

    • 用户在中国 → 选阿里云、腾讯云
    • 用户在海外 → 选 AWS、Azure
    • 全球业务 → 选有多地域的厂商
  2. 看技术栈

    • 用微软技术 → 选 Azure
    • 用 Kubernetes、大数据 → 选 GCP
    • 用 AI/ML → 看 AWS、GCP、百度云
  3. 看成本

    • 小项目试水 → 选便宜的(腾讯云、UCloud)
    • 大规模生产 → 看总体成本(AWS 长期可能更省钱)
  4. 看生态

    • 已用其他服务(如 GitHub、Office 365)→ 选同生态的

现实建议

初学者/小项目:选阿里云或腾讯云(文档是中文,客服在国内)

出海项目:选 AWS(最成熟、全球覆盖最好)

大企业:可能需要多云策略(不同业务用不同云)


3. 一般怎么用云服务?(实战篇)

3.1 从注册到上线的完整流程

第一步:注册账号

注册流程

步骤 操作 说明
1 打开官网 https://www.aliyun.com/
2 点击"免费注册" 填写邮箱、密码
3 验证手机号 输入短信验证码
4 实名认证 上传身份证或企业资质
5 绑定支付 信用卡或支付宝

⏱️ 预计耗时10-20 分钟

需要准备什么

  • 邮箱地址(建议用企业邮箱)
  • 手机号码(用于验证)
  • 信用卡或支付宝(用于实名认证和付费)

注册过程

  1. 打开云服务商官网(如 https://aws.amazon.com/cn/https://www.aliyun.com/
  2. 点击"免费注册"
  3. 填写邮箱、密码
  4. 验证手机号
  5. 实名认证(上传身份证或企业资质)
  6. 绑定支付方式

⏱️ 耗时:约 10-20 分钟

第二步:了解基础概念

在使用云服务之前,必须理解几个核心概念:

云服务核心概念

概念 通俗解释 例子
地域 (Region) 数据中心在哪个城市 华东(杭州)、美东(弗吉尼亚)
可用区 (AZ) 一个城市内的多个数据中心 华东 1 可用区 A、B、C
实例 (Instance) 一台虚拟服务器 2 核 4G 的云服务器
镜像 (Image) 操作系统模板 CentOS 7.9、Ubuntu 20.04

👉 选择原则:地域离用户越近,延迟越低

地域(Region

  • 是什么:云服务的数据中心所在地区
  • 例子:华东(杭州)、美东(弗吉尼亚)、亚太(新加坡)
  • 选择原则:离你的用户越近越好(延迟更低)

可用区(Availability Zone, AZ

  • 是什么:一个地域内的多个数据中心,相互隔离
  • 例子:华东 1 可用区 A、华东 1 可用区 B
  • 作用:提高可用性(一个可用区挂了,另一个还能用)

实例(Instance

  • 是什么:一台虚拟服务器
  • 例子:一台 2 核 4G 的云服务器
  • 计费:按时长(按小时/月)或按量(按秒/按请求数)

第三步:创建第一台云服务器

创建云服务器配置清单

配置项          推荐选择(测试环境)
─────────────────────────────────────
付费模式        按量付费(不用可关)
地域            华东-杭州(或离你最近的)
实例规格        2 核 4G(够用)
镜像            Ubuntu 20.04 或 CentOS 7.9
存储            40GB 系统盘(默认)
网络            默认 VPC 网络
带宽            按使用流量付费(省钱)
密码            设置并牢记 root 密码

⏱️ 创建耗时1-2 分钟

实战:在阿里云创建一台云服务器(ECS)

  1. 登录控制台

    • 注册成功后,登录云控制台
  2. 找到 ECS 服务

    • 搜索"云服务器 ECS"或在产品列表中找到
  3. 点击"创建实例"

  4. 选择配置

    - 付费模式:按量付费(测试)或 包年包月(长期)
    - 地域:选择离你最近的(如华东-杭州)
    - 实例规格:2 核 4G(测试够用了)
    - 镜像:选择操作系统(如 CentOS 7.9 或 Ubuntu 20.04
    - 存储:40GB 系统盘(默认够用)
    - 网络:默认 VPC 网络即可
    - 带宽:按使用流量付费(测试省钱)
    
  5. 设置密码

    • 设置 root 用户密码(记得保存!)
  6. 确认订单并启动

    • 检查配置无误后,点击"确认订单"
    • 等待 1-2 分钟,实例创建完成

⏱️ 耗时:约 5 分钟

第四步:连接云服务器

Linux 服务器(推荐使用 SSH

# 方式1:用密码登录
ssh root@你的服务器公网IP
# 输入密码(密码不会显示,直接输完回车)

# 方式2:用密钥登录(更安全,推荐)
ssh -i 你的私钥.pem root@你的服务器公网IP

Windows 服务器

  • 使用远程桌面(RDP
  • 输入:你的服务器公网IP:3389
  • 用户名:Administrator
  • 密码:你设置的密码

第五步:部署你的应用

# 1. 更新系统
sudo yum update -y  # CentOS
# 或
sudo apt update && sudo apt upgrade -y  # Ubuntu

# 2. 安装必要软件(以安装 Node.js 为例)
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs

# 3. 上传代码(可以用 git 或 scp)
git clone https://github.com/yourusername/yourproject.git
cd yourproject

# 4. 安装依赖
npm install

# 5. 启动应用
npm start

3.2 常见使用场景

场景 1:托管个人网站 / 博客

  • 需要的服务:云服务器(ECS+ 域名
  • 配置建议1 核 2G 足够
  • 成本:约 50-100 元/月
  • 技术栈Nginx + 静态文件 / WordPress

场景 2:部署 API 后端

  • 需要的服务:云服务器 + 数据库(RDS
  • 配置建议2 核 4G 起步
  • 成本:约 200-500 元/月
  • 技术栈Node.js/Python + MySQL/PostgreSQL

场景 3:存储图片 / 视频

  • 需要的服务:对象存储(OSS/S3
  • 配置建议:按存储量和流量计费
  • 成本:几元到几百元/月不等
  • 优势:不用自己管硬盘,自动备份,CDN 加速

场景 4:使用 AI 服务

  • 需要的服务API 调用(如通义千问、文心一言)
  • 配置建议:按调用次数计费
  • 成本:几分钱到几元/千次调用
  • 优势:不用自己买 GPU,直接调用 API

4. 如何购买和调用 API?(计费篇)

4.1 云服务的计费模式

云服务计费模式对比

计费模式 类比 适合场景 节省潜力
按需付费 单买票 测试环境、短期项目 %(基准)
包年包月 月票/年票 长期稳定负载 30-60%
竞价实例 候补票 容错批处理任务 60-90%
Serverless 计程车 事件驱动、流量波动大 视场景 40-70%

云服务的计费方式有很多种,理解它们能帮你省很多钱:

按需付费(Pay-as-you-go

  • 特点:用多少付多少,不用不花钱
  • 适用:测试环境、流量不稳定的项目
  • 例子
    • 云服务器:按小时计费
    • 对象存储:按 GB + 请求次数计费
    • AI API:按调用次数计费

包年包月 / 预留实例

  • 特点:承诺使用一定时长(1 年/3 年),享受折扣
  • 折扣:通常 30-60% off
  • 适用:长期稳定运行的生产环境
  • 例子:一台 2 核 4G 服务器
    • 按需:200 元/月
    • 包 1 年:140 元/月(省 30%)

竞价实例 / 抢占式实例

  • 特点:价格很低(最多能省 90%),但可能被强制回收
  • 适用:批处理任务、容错性高的任务
  • 例子:数据处理任务、渲染任务
  • 风险:云厂商资源紧张时,会强制收回实例

Serverless 按调用次数

  • 特点:不用关心服务器,只关心调用次数
  • 计费:调用次数 + 计算时间 + 流量
  • 适用API 接口、事件驱动任务
  • 例子:阿里云函数计算
    • 前 100 万次调用:免费
    • 超出后:1.33 元/百万次

4.2 购买 API 调用的完整流程

调用通义千问 API 为例:

购买 API 调用流程

1. 开通服务 → 进入 AI 开放平台,点击"立即开通"
2. 获取密钥 → 进入 API-KEY 管理,创建密钥(只显示一次!)
3. 配置权限 → 创建 RAM 用户,授予最小权限
4. 调用测试 → 用 Python 或 JavaScript 发起第一次调用

⚠️ 重要提示:API Key 只显示一次,请立即保存!

步骤 1:开通 API 服务

  1. 打开云厂商的"AI 开放平台"或"机器学习平台 PAI"
  2. 找到"通义千问"或"DashScope"
  3. 点击"立即开通"或"免费试用"

⏱️ 耗时:约 2 分钟

步骤 2:获取 API Key

  1. 进入控制台的"API-KEY 管理"
  2. 点击"创建我的 API-KEY"
  3. 重要:复制并保存这个 Key(只显示一次!)
# 示例:你的 API Key 长这样
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

步骤 3:配置权限(IAM

API Key 安全最佳实践

安全实践 说明 示例
环境变量 从环境变量读取密钥 os.environ['API_KEY']
最小权限 只授予必要的权限 只能调用 AI API,不能删除服务器
定期轮换 定期更换密钥 每 90 天轮换一次
监控告警 监控异常调用 调用频率异常时立即通知

不要做

  • 把密钥写在代码里
  • 把密钥提交到 GitHub
  • 在公网传输明文密钥

在调用 API 之前,需要确保你的 API Key 有正确的权限:

  1. 进入"访问控制(RAM"或"权限管理(IAM"

  2. 创建一个"用户"或"角色"

  3. 给这个用户/角色授权:

    • 只授权需要的权限(最小权限原则)
    • 例如:只能调用通义千问,不能删除服务器
  4. 生成 AccessKey ID 和 AccessKey Secret

步骤 4:调用 API

Python 示例

import requests
import json

# 你的 API Key(需要从云厂商控制台获取)
API_KEY = "sk-your-api-key-here"

# API 地址(以通义千问为例)
url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"

# 请求头
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# 请求体
data = {
    "model": "qwen-turbo",
    "input": {
        "messages": [
            {"role": "user", "content": "你好,请介绍一下你自己"}
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}

# 发送请求
response = requests.post(url, headers=headers, json=data)

# 处理响应
if response.status_code == 200:
    result = response.json()
    print(result["output"]["choices"][0]["message"]["content"])
else:
    print(f"请求失败:{response.status_code}, {response.text}")

JavaScript 示例

const fetch = require('node-fetch');

const API_KEY = 'sk-your-api-key-here';
const url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation';

async function callQwen() {
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'qwen-turbo',
      input: {
        messages: [
          { role: 'user', content: '你好,请介绍一下你自己' }
        ]
      },
      parameters: {
        result_format: 'message'
      }
    })
  });

  const result = await response.json();
  console.log(result.output.choices[0].message.content);
}

callQwen();

4.3 计费陷阱与省钱技巧

常见计费陷阱

常见计费陷阱与解决方案

陷阱 问题 后果 解决方案
忘记关实例 测试完忘记关云服务器 一个月后收到几千元账单 设置自动释放时间
流量超了 以为是"包年包月",实际是"按流量计费" 一个视频火了,流量费几千元 明确计费模式,使用 CDN
免费额度用完 以为一直免费,实际有上限 额度用完后开始按高价计费 设置费用告警
请求爆炸 代码 Bug,无限循环调用 API 一晚上产生几百万次调用 设置请求频率限制
  1. 忘记关实例

    • 问题:测试完忘记关云服务器,还在计费
    • 后果:一个月后收到几千元账单
    • 解决:设置自动释放时间,或用按量付费+定时关机
  2. 流量超了

    • 问题:以为带宽是"包年包月",结果是"按流量计费"
    • 后果:一个视频火了,流量费几千元
    • 解决:明确计费模式,使用 CDN 降低流量成本
  3. 免费额度用完

    • 问题:以为一直免费,其实免费额度有上限
    • 后果:免费额度用完后开始按高价计费
    • 解决:设置费用告警,超过一定额度立刻通知
  4. 请求次数爆炸

    • 问题:代码 Bug,无限循环调用 API
    • 后果:一晚上产生几百万次调用,账单几千元
    • 解决:设置请求频率限制和费用上限

省钱技巧

  1. 使用免费额度

    • 大部分云服务都有免费试用
    • 例如:阿里云新用户 3 个月免费
    • AWS 12 个月免费 tier
  2. 购买预留实例

    • 长期运行的服务,买包年包月
    • 能省 30-60%
  3. 使用竞价实例

    • 批处理任务用竞价实例
    • 能省 70-90%
  4. 合理选择存储类型

    • 热数据用标准存储
    • 冷数据用低频访问或归档存储
    • 能省 50-80%
  5. 设置费用告警

    • 云厂商都支持设置"预算告警"
    • 超过某个金额立刻发邮件/短信通知

5. 权限管理(IAM)是什么?怎么起源?(安全篇)

5.1 为什么需要权限管理?

想象一下这个场景:

场景对比:为什么需要权限管理?

场景 没有权限管理 有权限管理(IAM
操作权限 开发者 A 不小心删除了生产数据库 开发者 A 只能操作测试环境
离职管理 开发者 B 离职后还能继续访问 开发者 B 离职后账号立即被禁用
操作追溯 不知道谁在什么时候做了什么 所有操作都有日志记录

结论:权限管理不是"可有可无",而是云安全的第一道防线

5.2 权限管理的起源

早期:单机时代(1980s-1990s

  • 场景:一台服务器,几个人共用
  • 权限管理
    • 操作系统用户:root, user1, user2
    • 文件权限:chmod 755 file.txt
  • 问题:只能控制"谁能访问这台机器"

网络时代(2000s

  • 场景:多台服务器,很多应用
  • 权限管理
    • 每台服务器单独设置用户
    • 用 LDAP/Active Directory 统一管理
  • 问题:配置复杂,容易出错

云计算时代(2010s-至今)

  • 场景:成千上万台服务器,几百个开发者
  • 新问题
    • 服务器数量动态变化
    • 开发者需要访问不同的服务
    • 需要细粒度的权限控制(谁能做什么)
  • 解决方案IAMIdentity and Access Management

5.3 IAM 的核心概念

IAM 核心概念

概念 定义 例子
用户 (User) 代表一个人或应用 alice@company.com
组 (Group) 多个用户的集合 developers
角色 (Role) 临时身份,可被应用调用 EC2-to-S3-Read-Only
策略 (Policy) 定义权限规则的 JSON 文档 允许读取 S3,禁止删除

用户(User

  • 是什么:代表一个"人"或"应用"
  • 例子:alice@company.com, backend-service
  • 作用:可以登录、拥有自己的密码/密钥

组(Group

  • 是什么:多个用户的集合
  • 例子:developers 组, admins
  • 作用:批量授权(给组授权,组内所有用户自动继承)

角色(Role

  • 是什么:一种"临时身份",可以被应用或服务调用
  • 例子:EC2-to-S3-Read-Only 角色
  • 作用:
    • 你的服务器(EC2)需要访问 S3
    • 不需要存储密钥,而是"扮演"一个角色
    • 更安全,密钥不会泄露

策略(Policy

  • 是什么:定义"能做什么、不能做什么"的规则
  • 格式:JSON 文档
  • 例子:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*"
    },
    {
      "Effect": "Deny",
      "Action": "s3:Delete*",
      "Resource": "*"
    }
  ]
}

解读

  • 允许读取(Get)和列出(Listmy-bucket 里的所有文件
  • 禁止删除(Delete)任何地方的文件

5.4 权限管理的最佳实践

权限管理最佳实践

原则 说明 正确做法 错误做法
最小权限 只授予必要的权限 只给读取开发环境 S3 的权限 给开发者管理员权限
职责分离 不要把所有权力给一个人 开发人员创建服务器,财务查看账单 一个人既能创建服务器又能计费
定期审计 定期检查权限 每季度检查一次用户权限 离职员工账号仍然活跃
启用 MFA 多因素认证 登录时需要密码+手机验证码 只使用密码登录
使用角色 用 Role 代替密钥 EC2 绑定角色自动获取凭证 把密钥写在代码里

原则 1:最小权限原则(Least Privilege

  • 含义:只授予完成任务所需的最小权限
  • 例子
    • 错误:给开发者"管理员"权限
    • 正确:给开发者"只能读取开发环境的 S3"权限

原则 2:职责分离

  • 含义:不要把所有权力给一个人
  • 例子
    • 错误:一个人既能创建服务器,又能计费
    • 正确:开发人员能创建服务器,财务人员能查看账单

原则 3:定期审计

  • 含义:定期检查谁有什么权限
  • 例子
    • 每季度检查一次用户权限
    • 离职员工的账号立即禁用
    • 长期不用的账号删除

原则 4:启用 MFA(多因素认证)

  • 含义:登录时不仅需要密码,还需要手机验证码
  • 重要性:防止密码泄露后账号被盗
  • 例子
    登录流程:
    1. 输入密码
    2. 打开手机认证器(如 Google Authenticator
    3. 输入 6 位动态验证码
    4. 验证通过,登录成功
    

原则 5:使用角色而不是密钥

  • 含义:服务器访问云资源时,用 Role,不要硬编码密钥
  • 问题:密钥可能泄露
  • 例子
# ❌ 错误:硬编码密钥
AWS_ACCESS_KEY = "AKIAIOSFODNN7EXAMPLE"
AWS_SECRET_KEY = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

# ✅ 正确:使用角色(自动获取临时凭证)
# EC2 实例绑定了某个角色后,SDK 会自动使用这个角色
import boto3
s3 = boto3.client('s3')  # 自动使用实例角色

5.5 实战:创建一个受限用户

实战:创建受限用户(5 步)

步骤 1:创建用户
├─ 进入 IAM/RAM 控制台
├─ 点击"创建用户"
└─ 用户名:developer-test

步骤 2:创建自定义策略
├─ 选择 JSON 编辑模式
├─ 输入权限规则(只允许读写 dev-bucket
└─ 命名策略:S3DevBucketReadWrite

步骤 3:附加策略到用户
├─ 在用户详情页点击"添加权限"
└─ 搜索并勾选刚创建的策略

步骤 4:生成访问密钥
├─ 点击"创建访问密钥"
└─ ⚠️ 立即复制密钥(只显示一次!)

步骤 5:测试权限
├─ 测试访问 dev-bucket(应该成功)
└─ 测试访问 prod-bucket(应该失败)

步骤 1:创建用户

  1. 进入"IAM"或"RAM"控制台
  2. 点击"创建用户"
  3. 用户名:developer-test
  4. 访问方式:选择"编程访问"(会生成 AccessKey

步骤 2:创建自定义策略

  1. 点击"权限"→"创建策略"
  2. 选择"JSON"编辑模式
  3. 输入以下策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::dev-bucket",
        "arn:aws:s3:::dev-bucket/*"
      ]
    }
  ]
}
  1. 命名策略:S3DevBucketReadWrite

步骤 3:将策略附加到用户

  1. 在用户详情页,点击"添加权限"
  2. 选择"附加现有策略"
  3. 搜索并勾选 S3DevBucketReadWrite
  4. 点击"添加权限"

步骤 4:生成访问密钥

  1. 在用户详情页,点击"创建访问密钥"
  2. 重要:立即复制 Access Key IDSecret Access Key(只显示一次!)

步骤 5:测试权限

import boto3

# 使用刚才创建的密钥
s3 = boto3.client(
    's3',
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY'
)

# 测试:应该成功
s3.list_objects_v2(Bucket='dev-bucket')

# 测试:应该失败(因为策略只允许 dev-bucket)
try:
    s3.list_objects_v2(Bucket='prod-bucket')
except Exception as e:
    print(f"访问被拒绝(符合预期):{e}")

5.6 常见错误与安全风险

常见安全错误与风险

错误类型 错误做法 后果 正确做法
硬编码密钥 把密钥写在代码里 代码上传 GitHub 后泄露 从环境变量读取
过度授权 给所有人管理员权限 任何人都能删除资源 遵循最小权限原则
不启用 MFA 只使用密码登录 密码泄露后账号被盗 启用多因素认证
不审计 离职员工账号仍活跃 前员工可以继续访问 离职立即禁用账号

代码示例对比

# ❌ 危险:密钥泄露风险
AWS_KEY = "AKIAIOSFODNN7EXAMPLE"
SECRET = "wJalrXUtnFEMI/K7MDENG..."

# ✅ 安全:从环境变量读取
import os
AWS_KEY = os.environ['AWS_ACCESS_KEY_ID']
SECRET = os.environ['AWS_SECRET_ACCESS_KEY']

后果:代码上传到 GitHub 后,密钥泄露,黑客可以用你的账号挖矿、删除数据。


6. 总结:云服务的本质

通过本章的学习,我们可以得出几个核心结论:

从实践来看

  • 云服务不是"租服务器",而是"购买计算能力的基础设施服务"
  • 选对云服务商可以省 30-50% 的成本
  • 权限管理是云安全的第一道防线,必须重视

从成本视角看

  • 按需付费适合测试和流量不稳定的项目
  • 包年包月适合长期运行的生产环境
  • 设置费用告警,避免意外高额账单

从安全视角看

  • 永远不要把密钥写在代码里
  • 遵循最小权限原则
  • 启用 MFA,定期审计权限

下一步建议

  1. 选择一个云服务商(建议国内选阿里云/腾讯云,海外选 AWS)
  2. 注册账号,创建第一台云服务器
  3. 学习基础的 Linux 操作命令
  4. 了解并实践 IAM 权限管理
  5. 尝试调用一个 AI API(如通义千问)

名词对照表

英文术语 中文对照 解释
Cloud Service Provider 云服务厂商 提供云计算服务的公司,如 AWS、阿里云
Region 地域 云服务的数据中心所在地区,如华东-杭州
Availability Zone (AZ) 可用区 一个地域内的多个数据中心,相互隔离
Instance 实例 一台虚拟服务器
ECS 弹性计算服务 阿里云的云服务器服务
EC2 Elastic Compute Cloud AWS 的云服务器服务
OSS 对象存储服务 阿里云的对象存储
S3 Simple Storage Service AWS 的对象存储
IAM 身份与访问管理 权限管理服务,控制谁能做什么
RAM Resource Access Management 阿里云的权限管理服务
AccessKey 访问密钥 用于 API 调用的身份凭证
MFA 多因素认证 需要密码+验证码的登录方式
Policy 策略 定义权限规则的 JSON 文档
Role 角色 可以被应用或服务调用的临时身份
VPC 虚拟私有云 隔离的虚拟网络环境
CDN 内容分发网络 全球加速服务,缓存静态资源