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
32 KiB
云服务厂商入门指南
💡 学习指南:云服务厂商不是"买服务器的网站",而是"像水电公司一样提供计算能力的基础设施"。本章节会围绕一个核心问题展开:从零开始,如何理解并使用云服务? 我们会用真实场景、生动类比和实战步骤,帮你建立云服务的完整认知地图。
在开始之前,建议你先了解:
0. 引言:为什么越来越多公司不买服务器了?
想象一下这个场景:
小明在 2010 年创业,想做一个网站。他经历了什么?
- 买服务器:花 2 万块钱买了一台戴尔服务器
- 找机房:联系 IDC 机房,每个月付 3000 元托管费
- 装系统:自己安装 Linux、配置环境
- 担心硬件:硬盘坏了要自己换,机器过热要自己解决
- 流量暴增:用户突然多了,系统撑不住了,又要买新服务器
一年后,小明花了 5 万,服务器利用率却只有 10%。
小红的公司在 2024 年创业,她是怎么做的?
- 打开云服务商网站:注册账号
- 点几下鼠标:创建一台云服务器(2 分钟完成)
- 按量付费:用多少付多少,不用不花钱
- 自动扩容:流量大了,点一下升级配置
- 全球部署:想开美国分部?换个地域就行
一个月后,小红花了 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 |
AWS(Amazon 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%)
选型原则:
-
看目标市场
- 用户在中国 → 选阿里云、腾讯云
- 用户在海外 → 选 AWS、Azure
- 全球业务 → 选有多地域的厂商
-
看技术栈
- 用微软技术 → 选 Azure
- 用 Kubernetes、大数据 → 选 GCP
- 用 AI/ML → 看 AWS、GCP、百度云
-
看成本
- 小项目试水 → 选便宜的(腾讯云、UCloud)
- 大规模生产 → 看总体成本(AWS 长期可能更省钱)
-
看生态
- 已用其他服务(如 GitHub、Office 365)→ 选同生态的
现实建议:
初学者/小项目:选阿里云或腾讯云(文档是中文,客服在国内)
出海项目:选 AWS(最成熟、全球覆盖最好)
大企业:可能需要多云策略(不同业务用不同云)
3. 一般怎么用云服务?(实战篇)
3.1 从注册到上线的完整流程
第一步:注册账号
注册流程:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 打开官网 | 如 https://www.aliyun.com/ |
| 2 | 点击"免费注册" | 填写邮箱、密码 |
| 3 | 验证手机号 | 输入短信验证码 |
| 4 | 实名认证 | 上传身份证或企业资质 |
| 5 | 绑定支付 | 信用卡或支付宝 |
⏱️ 预计耗时:10-20 分钟
需要准备什么:
- ✅ 邮箱地址(建议用企业邮箱)
- ✅ 手机号码(用于验证)
- ✅ 信用卡或支付宝(用于实名认证和付费)
注册过程:
- 打开云服务商官网(如
https://aws.amazon.com/cn/或https://www.aliyun.com/) - 点击"免费注册"
- 填写邮箱、密码
- 验证手机号
- 实名认证(上传身份证或企业资质)
- 绑定支付方式
⏱️ 耗时:约 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)
-
登录控制台
- 注册成功后,登录云控制台
-
找到 ECS 服务
- 搜索"云服务器 ECS"或在产品列表中找到
-
点击"创建实例"
-
选择配置
- 付费模式:按量付费(测试)或 包年包月(长期) - 地域:选择离你最近的(如华东-杭州) - 实例规格:2 核 4G(测试够用了) - 镜像:选择操作系统(如 CentOS 7.9 或 Ubuntu 20.04) - 存储:40GB 系统盘(默认够用) - 网络:默认 VPC 网络即可 - 带宽:按使用流量付费(测试省钱) -
设置密码
- 设置 root 用户密码(记得保存!)
-
确认订单并启动
- 检查配置无误后,点击"确认订单"
- 等待 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 服务
- 打开云厂商的"AI 开放平台"或"机器学习平台 PAI"
- 找到"通义千问"或"DashScope"
- 点击"立即开通"或"免费试用"
⏱️ 耗时:约 2 分钟
步骤 2:获取 API Key
- 进入控制台的"API-KEY 管理"
- 点击"创建我的 API-KEY"
- 重要:复制并保存这个 Key(只显示一次!)
# 示例:你的 API Key 长这样
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
步骤 3:配置权限(IAM)
API Key 安全最佳实践:
| 安全实践 | 说明 | 示例 |
|---|---|---|
| 环境变量 | 从环境变量读取密钥 | os.environ['API_KEY'] |
| 最小权限 | 只授予必要的权限 | 只能调用 AI API,不能删除服务器 |
| 定期轮换 | 定期更换密钥 | 每 90 天轮换一次 |
| 监控告警 | 监控异常调用 | 调用频率异常时立即通知 |
❌ 不要做:
- 把密钥写在代码里
- 把密钥提交到 GitHub
- 在公网传输明文密钥
在调用 API 之前,需要确保你的 API Key 有正确的权限:
-
进入"访问控制(RAM)"或"权限管理(IAM)"
-
创建一个"用户"或"角色"
-
给这个用户/角色授权:
- 只授权需要的权限(最小权限原则)
- 例如:只能调用通义千问,不能删除服务器
-
生成 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 | 一晚上产生几百万次调用 | 设置请求频率限制 |
-
忘记关实例
- 问题:测试完忘记关云服务器,还在计费
- 后果:一个月后收到几千元账单
- 解决:设置自动释放时间,或用按量付费+定时关机
-
流量超了
- 问题:以为带宽是"包年包月",结果是"按流量计费"
- 后果:一个视频火了,流量费几千元
- 解决:明确计费模式,使用 CDN 降低流量成本
-
免费额度用完
- 问题:以为一直免费,其实免费额度有上限
- 后果:免费额度用完后开始按高价计费
- 解决:设置费用告警,超过一定额度立刻通知
-
请求次数爆炸
- 问题:代码 Bug,无限循环调用 API
- 后果:一晚上产生几百万次调用,账单几千元
- 解决:设置请求频率限制和费用上限
省钱技巧
-
使用免费额度
- 大部分云服务都有免费试用
- 例如:阿里云新用户 3 个月免费
- AWS 12 个月免费 tier
-
购买预留实例
- 长期运行的服务,买包年包月
- 能省 30-60%
-
使用竞价实例
- 批处理任务用竞价实例
- 能省 70-90%
-
合理选择存储类型
- 热数据用标准存储
- 冷数据用低频访问或归档存储
- 能省 50-80%
-
设置费用告警
- 云厂商都支持设置"预算告警"
- 超过某个金额立刻发邮件/短信通知
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-至今)
- 场景:成千上万台服务器,几百个开发者
- 新问题:
- 服务器数量动态变化
- 开发者需要访问不同的服务
- 需要细粒度的权限控制(谁能做什么)
- 解决方案:IAM(Identity 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)和列出(List)
my-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:创建用户
- 进入"IAM"或"RAM"控制台
- 点击"创建用户"
- 用户名:
developer-test - 访问方式:选择"编程访问"(会生成 AccessKey)
步骤 2:创建自定义策略
- 点击"权限"→"创建策略"
- 选择"JSON"编辑模式
- 输入以下策略:
{
"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/*"
]
}
]
}
- 命名策略:
S3DevBucketReadWrite
步骤 3:将策略附加到用户
- 在用户详情页,点击"添加权限"
- 选择"附加现有策略"
- 搜索并勾选
S3DevBucketReadWrite - 点击"添加权限"
步骤 4:生成访问密钥
- 在用户详情页,点击"创建访问密钥"
- 重要:立即复制
Access Key ID和Secret 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,定期审计权限
下一步建议:
- 选择一个云服务商(建议国内选阿里云/腾讯云,海外选 AWS)
- 注册账号,创建第一台云服务器
- 学习基础的 Linux 操作命令
- 了解并实践 IAM 权限管理
- 尝试调用一个 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 | 内容分发网络 | 全球加速服务,缓存静态资源 |