云身份:IAM 角色与服务账户
在云平台中配置遵循最小权限原则的 IAM 角色和服务账户,并避免通配符权限和长期有效密钥等常见错误。
云身份:IAM 角色与服务账户 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
云身份基础
在云环境中,身份就是新的边界。每个操作——启动 VM、读取数据库、调用 API——都根据调用方身份进行授权。云 IAM(身份和访问管理)系统定义了谁可以对哪些资源执行什么操作。与网络位置能够提供隐式信任的本地部署环境不同,云 IAM 会将每个请求都视为需要明确授权,无论请求来自何处。
AWS IAM 中的用户、组和角色
AWS IAM 有三种主要身份类型。IAM Users代表拥有长期凭据(访问密钥 + 私密密钥)的个人或应用。IAM Groups用于将用户归组并分配共享权限。IAM Roles是拥有临时凭据的身份,用户、AWS 服务(EC2、Lambda)或其他账户都可以通过 AssumeRole 使用它们。与长期访问密钥相比,角色更受推荐,因为其凭据会自动过期,从而降低凭据暴露风险。
# IAM role trust policy — allows EC2 to assume this role
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': { 'Service': 'ec2.amazonaws.com' },
'Action': 'sts:AssumeRole'
}]
}
# EC2 instance with this role attached can call AWS APIs
# using temporary credentials from the instance metadata serviceIAM policy 中的最小权限
IAM policy 定义身份可以对哪些资源执行哪些操作。最小权限原则要求 policy 仅授予完成任务所需的具体操作。常见违规情况包括:对操作使用 * 通配符(授予某项服务中的所有操作)、对资源使用 *(授予对所有资源的访问权限),以及将 AdministratorAccess 等范围过大的托管 policy 附加到服务账户。每个通配符都应有充分理由,并接受定期审查。
# Overly permissive policy (AVOID)
{
'Effect': 'Allow',
'Action': 's3:*', # all S3 actions
'Resource': '*' # all buckets
}
# Least-privilege policy (PREFERRED)
{
'Effect': 'Allow',
'Action': ['s3:GetObject', 's3:ListBucket'],
'Resource': [
'arn:aws:s3:::my-specific-bucket',
'arn:aws:s3:::my-specific-bucket/*'
]
}GCP 中的服务账号
在谷歌云平台(GCP)中,非人类工作负载使用服务账号进行身份验证——服务账号是由系统管理的身份实体,配有 JSON 密钥文件或 Workload Identity Federation。每个服务账号都应遵循最小权限原则:仅将其绑定到它需要调用的 GCP 服务。服务账号密钥(从控制台下载的 JSON 文件)是长期有效的凭据,必须像密码一样对待——定期轮换,绝不能提交到源代码中或上传到公开代码仓库。
# Check service account permissions (gcloud)
gcloud projects get-iam-policy my-project \
--flatten='bindings[].members' \
--format='table(bindings.role, bindings.members)' \
--filter='bindings.members:serviceAccount'
# Prefer Workload Identity over service account keys
# (no downloadable key files — uses workload federation tokens)Azure 托管身份
Azure 托管身份(以前称为 MSI)相当于 AWS 中供服务使用的 IAM 角色——它们允许 Azure 资源(VM、应用服务、函数)向 Azure API 进行身份验证,而无需存储凭据。托管身份有两种类型:系统分配的托管身份与特定资源绑定,并会在该资源被删除时一并删除。用户分配的托管身份是可以在多个资源之间共享的独立对象。托管身份消除了存储任何密钥或机密的需求。
# Azure CLI — assign managed identity to a VM
az vm identity assign \
--name myVM \
--resource-group myRG \
--identities /subscriptions/.../userAssignedIdentities/myIdentity
# The VM can now call Azure Key Vault without any stored credentials:
# Token is fetched automatically from the Instance Metadata Service长期有效的凭据:风险
长期有效的凭据——永不过期的静态访问密钥、API 令牌和服务账号密钥文件——是云环境中风险最高的因素之一。如果这些凭据通过 GitHub、S3 存储桶、日志或被入侵的开发人员笔记本电脑泄露,就会立即授予访问权限,直到有人手动撤销为止。组织应执行以下措施:审计所有长期有效的凭据,按计划轮换凭据,优先采用基于角色或联合身份的访问方式以生成短期令牌,并在凭据出现在公开代码仓库中时立即发出警报。
# Find IAM access keys older than 90 days (AWS)
aws iam generate-credential-report
aws iam get-credential-report --query 'Content' --output text | \
base64 -d | grep -v 'N/A' | \
awk -F',' '$10 > 90 {print $1, $10}'
# Keys older than 90 days should be rotated or deletedIAM 角色链与权限提升
当某个身份利用一组权限为自身授予额外权限时,就会发生 IAM 权限提升。典型的提升路径包括:为自己的用户附加权限更宽松的策略,创建具有提升权限的新 IAM 用户,将角色(iam:PassRole)传递给某项服务,以及更新 Lambda 函数的执行角色。AWS 的 IAM Access Analyzer 可以检测这些模式,而 IAM 权限边界则可以严格限制任何身份最多能够获得的权限。
# Dangerous permission combination (enables privilege escalation):
# iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion
# Attacker can create a new policy version with AdministratorAccess
# Or: iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction
# Attacker creates Lambda with a privileged role, invokes it
# Defense: permission boundaries limit maximum grantable permissions跨账号角色承担
云组织通常使用多个账号(开发、预发布、生产、安全)作为爆炸半径边界。跨账号角色承担允许一个账号中的身份承担另一个账号中的角色,从而让集中式工具能够跨账号运行。安全控制措施包括:在信任策略中要求提供 External ID,以防止混淆代理攻击;通过 Principal ARN 限制可以承担角色的账号;以及在 CloudTrail 中记录所有跨账号角色承担操作,以便审计。
# Trust policy with External ID (confused deputy protection)
{
'Effect': 'Allow',
'Principal': { 'AWS': 'arn:aws:iam::PARTNER-ACCOUNT-ID:root' },
'Action': 'sts:AssumeRole',
'Condition': {
'StringEquals': {
'sts:ExternalId': 'unique-shared-secret-12345'
}
}
}IMDS 与元数据服务安全
AWS EC2 实例可以从 实例元数据服务(IMDS)获取其 IAM 角色凭据,地址为 http://169.254.169.254。SSRF 漏洞类型在这里尤其危险:如果应用容易受到 SSRF 攻击,攻击者就可以让服务器从 IMDS URL 获取数据,从而窃取实例的 IAM 角色凭据。IMDSv2(要求使用会话令牌)可以缓解基于 SSRF 的凭据窃取,所有 EC2 实例都应强制使用 IMDSv2。
# Enforce IMDSv2 on a new EC2 instance (requires token for IMDS)
aws ec2 run-instances \
--metadata-options 'HttpTokens=required,HttpEndpoint=enabled' \
...
# IMDSv1 (insecure) just needs a GET request:
# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# IMDSv2 requires a PUT to get a session token firstIAM Access Analyzer 与策略审查
IAM Access Analyzer(AWS)会自动识别与外部主体共享的资源,以及授予超出预期权限的 IAM 策略。它会分析存储桶策略、角色信任策略和 KMS 密钥策略,并标记并非明确预期的外部访问。定期审查 IAM 策略——无论是手动审查,还是使用 Cloudsplaining、PMapper 或 Permissions Boundary Analyzer 等工具——对于在攻击者发现权限提升路径之前识别这些路径至关重要。
Workload Identity 联邦
Workload Identity Federation允许外部工作负载(GitHub Actions、本地系统和其他云提供商)使用短期 OIDC 令牌向云 IAM 进行身份验证,而不是使用长期有效的服务账号密钥。GitHub Actions 工作流可以在作业持续期间使用其 OIDC 令牌承担 AWS IAM 角色,作业结束后令牌即会过期。这种方式消除了 CI/CD 流水线中长期有效凭据泄露这一整类风险。
快速检查
测试您对本课 CompTIA Security+(SY0-701)相关概念的理解。
课程回顾
本课您学习了以下内容:对于云工作负载,IAM 角色能够提供临时凭据,因此优于长期有效的访问密钥;最小权限策略应避免使用通配符,只针对特定资源授予特定操作权限;以及IMDSv2、权限边界和工作负载身份联合可以消除常见的凭据暴露路径。接下来,我们将探讨 Cloud Security Posture Management(CSPM)。
常见问题解答
「云身份:IAM 角色与服务账户」课时是免费的吗?
是的 — 「云身份:IAM 角色与服务账户」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「云身份:IAM 角色与服务账户」这节课中我会学到什么?
在云平台中配置遵循最小权限原则的 IAM 角色和服务账户,并避免通配符权限和长期有效密钥等常见错误。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「云身份:IAM 角色与服务账户」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 共同责任模型:IaaS、PaaS、SaaS
- 云存储安全与数据暴露风险
- 云身份:IAM 角色与服务账户
- 云安全态势管理(CSPM)