第 1 章

AWS 基础回顾

⏱️ 120 分钟难度:
📝 25 题练习
备考助手

AWS 开发基础(Developer Fundamentals)

很多人学 DVA 一上来就想学 Lambda、DynamoDB、API Gateway,结果写着写着就卡在三件事:

  • 权限为什么拒绝
  • 本地能跑,云上不行
  • 一上流量就报错

这章的目标不是背概念,而是先把“开发调用 AWS 的底层逻辑”一次讲明白。


先看一条真实调用链(你后面所有章节都在复用)

你的代码
  -> AWS SDK/CLI
  -> 凭证来源(Credential Provider Chain)
  -> IAM 权限评估
  -> 目标服务 API(S3 / DynamoDB / Lambda...)
  -> 成功或报错
  -> CloudWatch / CloudTrail 观测

你后面遇到的 80% 问题,都能在这条链路里定位。


1. 第一件事:身份和权限先分开

身份是什么?

“谁在调用 AWS API”。

权限是什么?

“这个身份可以调用哪些 API、操作哪些资源”。

DVA identity basics flow

图解说明:

  • 这张图在讲什么:开发调用链里的身份主体和权限规则关系。
  • 你应该先看哪里:先看 Role,再看 Policy,因为程序大多数用 Role。
  • 考试怎么问:经常问“为什么不用长期 Access Key”“为什么同一份代码在不同环境权限不同”。

给初学者的结论

  • 人(开发者)可以用 User/SSO
  • 程序(Lambda/ECS/EC2)优先用 Role
  • 不要把长期密钥写在代码里

2. 第二件事:凭证到底从哪里来

很多“本地通、线上挂”的根因是凭证来源不一致。

常见凭证来源顺序(记忆版)

优先级(常见)来源典型场景
1环境变量CI/CD、容器注入
2本地 profile 文件本地开发
3AssumeRole / SSO 会话多账户开发
4运行时角色(EC2/ECS/Lambda)云上生产

考试不会强抠 SDK 的每个细节顺序,但会考“哪种方式更安全、更可运维”。

最常用 CLI 流程

aws configure --profile dev
aws sts get-caller-identity --profile dev

第一条是配置,第二条是确认“你现在到底是谁”。


3. 第三件事:为什么推荐 STS 临时凭证

长期 Access Key 像“永不过期的门禁卡”,泄露代价很大。
STS 临时凭证像“限时访客证”,过期自动失效。

典型场景

  • 本地开发临时切换到测试账户
  • CI/CD 跨账户部署
  • 临时排障需要短期权限
aws sts assume-role \
  --role-arn arn:aws:iam::123456789012:role/DVAAppRole \
  --role-session-name local-dev-session

初学者最容易踩的坑

  • AssumeRole 成功,但业务调用仍失败:Role 本身权限不够
  • 偶发 403:会话过期
  • 跨账户一直失败:Trust Policy 没放行调用方

4. 第四件事:错误处理不是“加重试”这么简单

DVA 高频报错你要会“分类处理”。

错误本质问题第一检查点
AccessDenied权限IAM Policy / Resource Policy
InvalidAccessKeyId凭证profile/环境变量是否正确
ExpiredToken会话STS 会话是否过期
ThrottlingException限流重试策略 + 退避
ResourceNotFoundException资源定位Region / ARN / 名称

正确重试思路

  • 只对可重试错误重试(如限流、短暂网络错误)
  • 使用指数退避 + jitter
  • 不要对权限错误无限重试
import random
import time

def backoff_sleep(attempt, base=0.2, cap=10):
    time.sleep(min(cap, base * (2 ** attempt) + random.uniform(0, 0.3)))

5. 第五件事:观测要跟上(否则你永远靠猜)

CloudWatch 负责“看现在”

  • Metrics:趋势(延迟、错误率、吞吐)
  • Logs:细节(具体报错、请求上下文)
  • Alarm:触发通知

CloudTrail 负责“查责任链”

  • 谁在什么时候调用了哪个 API
  • 特别适合追 AccessDenied 和越权操作

CloudTrail Audit

图解说明:

  • 这张图在讲什么:API 调用审计链路。
  • 你应该先看哪里:先看 principal,再看 action,再看时间线。
  • 考试怎么问:问“如何审计调用历史、定位权限拒绝来源”。

6. 一张选型表:遇到场景直接选

场景推荐方案原因
本地开发调试Profile + AssumeRole接近企业真实流程
Lambda 访问 DynamoDBLambda Execution Role无需硬编码密钥
ECS 访问 S3ECS Task Role最小权限、易审计
跨账户只读审计STS AssumeRole临时凭证更安全
密钥管理Secrets Manager支持轮换,不写死在代码里

7. 章节小测(按实战思路)

  1. 本地可调用 S3,部署到 ECS 后失败,第一步应该查什么?
  • A. S3 存储类型
  • B. ECS Task Role 权限
  • C. CloudFront 配置
  • D. Route53 记录

答案:B

  1. 遇到 ThrottlingException,最合理处理是?
  • A. 立即循环重试
  • B. 指数退避 + jitter
  • C. 直接忽略
  • D. 关闭日志

答案:B

  1. 需要跨账户访问资源且不想长期密钥,优先方案是?
  • A. 共享 root 账号
  • B. 新建长期 IAM User
  • C. STS AssumeRole
  • D. 把密钥写进代码

答案:C


8. 本章你必须带走的 4 句话

  1. 程序身份优先 Role,不要长期 Access Key。
  2. 先确认“我是谁”,再排权限。
  3. 权限错不要盲目加 *,先看调用链最小动作。
  4. 没有 CloudWatch/CloudTrail,就等于闭眼排障。

官方参考

📝 章节练习 (25 题)
开始练习