# 云服务厂商入门指南 > 💡 **学习指南**:云服务厂商不是"买服务器的网站",而是"像水电公司一样提供计算能力的基础设施"。本章节会围绕一个核心问题展开:**从零开始,如何理解并使用云服务?** 我们会用真实场景、生动类比和实战步骤,帮你建立云服务的完整认知地图。 在开始之前,建议你先了解: - **基础网络概念**:如果你还不熟悉 IP 地址、端口、域名等概念,建议先阅读 [网络基础知识](./web-basics.md) - **API 是什么**:如果你对 API 还不了解,可以先看 [API 入门](./api-intro.md) --- ## 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 | #### **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%) ``` **选型原则**: 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)**: ```bash # 方式1:用密码登录 ssh root@你的服务器公网IP # 输入密码(密码不会显示,直接输完回车) # 方式2:用密钥登录(更安全,推荐) ssh -i 你的私钥.pem root@你的服务器公网IP ``` **Windows 服务器**: - 使用远程桌面(RDP) - 输入:`你的服务器公网IP:3389` - 用户名:`Administrator` - 密码:你设置的密码 #### **第五步:部署你的应用** ```bash # 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(只显示一次!) ```python # 示例:你的 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 示例**: ```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 示例**: ```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-至今)** - **场景**:成千上万台服务器,几百个开发者 - **新问题**: - 服务器数量动态变化 - 开发者需要访问不同的服务 - 需要细粒度的权限控制(谁能做什么) - **解决方案**:**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 文档 - 例子: ```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,不要硬编码密钥 - **问题**:密钥可能泄露 - **例子**: ```python # ❌ 错误:硬编码密钥 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. 输入以下策略: ```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/*" ] } ] } ``` 4. 命名策略:`S3DevBucketReadWrite` #### **步骤 3:将策略附加到用户** 1. 在用户详情页,点击"添加权限" 2. 选择"附加现有策略" 3. 搜索并勾选 `S3DevBucketReadWrite` 4. 点击"添加权限" #### **步骤 4:生成访问密钥** 1. 在用户详情页,点击"创建访问密钥" 2. **重要**:立即复制 `Access Key ID` 和 `Secret Access Key`(只显示一次!) #### **步骤 5:测试权限** ```python 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** | 只使用密码登录 | 密码泄露后账号被盗 | 启用多因素认证 | | **不审计** | 离职员工账号仍活跃 | 前员工可以继续访问 | 离职立即禁用账号 | **代码示例对比**: ```python # ❌ 危险:密钥泄露风险 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** | 内容分发网络 | 全球加速服务,缓存静态资源 |