AWS IAM 信任链 和 EKS IRSA
最近读了一下AWS IAM的文档,此外,AWS 的 EKS 可以结合 IAM 一起使用,而且是推荐的用法,可以最小权限化, 比如创建 NodeGroup 时创建一个 Node Role,默认情况下,EC2 和 里面运行的pod都会使用这个权限来运行, 如果想要将权限绑定到 pod,还可以进一步细化权限,创建 pod 的时候绑定 role:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-iam-role
pod绑定:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: my-service-account
containers:
- name: my-container
image: my-image
这样 pod就可以以 my-iam-role
的身份来运行。
由于懒得打字,下面的部分都是 DeepSeek 总结出来的😂,总结的还怪好的咧。
以下是 AWS IAM 信任链的核心知识总结,帮助你快速掌握其核心概念和应用场景:
1. 信任链的定义
IAM 信任链(Trust Chain)指通过 角色委托(Role Assumption) 建立的权限传递机制。
- 核心场景:允许一个实体(用户/角色/服务)临时获取另一个角色的权限。
- 关键术语:
- 信任策略(Trust Policy):定义谁(Principal)可以扮演(Assume)该角色。
- 访问策略(Access Policy):定义角色被扮演后拥有的具体权限。
2. 信任链的核心组件
(1) IAM 角色(Role)
- 角色是权限的载体,本身不关联用户或资源,需被其他实体“扮演”。
关键字段:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:user/Alice"}, // 允许扮演角色的主体 "Action": "sts:AssumeRole" // 必须包含 sts:AssumeRole 权限 }] }
(2) 临时凭证(Temporary Credentials)
- 通过 STS(Security Token Service)生成,包含临时密钥、令牌和过期时间。
- 有效期默认 1 小时,可配置(15分钟至12小时)。
(3) 服务相关角色(Service-Linked Roles)
- AWS 服务自动创建的预定义角色(如 AWS Lambda 执行角色),自动信任对应服务。
3. 信任链的典型场景
(1) 跨账户访问
- 场景:允许 Account A 的用户访问 Account B 的资源。
- 步骤:
- Account B 创建角色 Role-B,配置信任策略允许 Account A 的特定用户/角色。
- Account A 的用户通过
AssumeRole
API 获取 Role-B 的临时凭证。
- Account B 创建角色 Role-B,配置信任策略允许 Account A 的特定用户/角色。
(2) 服务间委托
- 场景:允许服务(如 EC2)调用其他服务(如 S3)。
- 方法:为 EC2 实例附加 IAM 角色,角色信任策略自动允许 EC2 服务调用
sts:AssumeRole
。
(3) 身份联合(Identity Federation)
- 场景:允许外部身份(如企业 AD 用户)通过 SAML/OIDC 获取 AWS 临时权限。
4. 信任策略(Trust Policy) vs. 访问策略(Access Policy)
对比项 | 信任策略 | 访问策略 |
---|---|---|
作用对象 | 角色(Role) | 用户/组/角色/资源 |
核心权限 | 控制谁可以扮演角色 | 控制被授权者的具体操作权限 |
关键 Action | sts:AssumeRole |
如 s3:GetObject , ec2:StartInstances |
5. 最佳实践
- 最小权限原则
- 仅授予角色必要的权限,信任策略中严格限制可扮演角色的主体。
使用外部 ID
跨账户委托时,通过
Condition
字段添加sts:ExternalId
,防止混淆代理问题。"Condition": { "StringEquals": {"sts:ExternalId": "unique-secret-id"} }
监控与审计
- 启用 CloudTrail 记录
AssumeRole
事件。 - 使用 IAM Access Analyzer 分析信任策略风险。
- 启用 CloudTrail 记录
6. 常见问题排查
- 权限冲突:检查角色访问策略是否与用户原有权限冲突。
- 跨账户失败:
- 确保目标角色的信任策略包含源账户/用户 ARN。
- 检查是否配置了
sts:ExternalId
(如适用)。
- 服务角色无法使用:确认服务是否支持服务相关角色,并检查信任策略中的服务标识符(如
ec2.amazonaws.com
)。
通过理解信任链的机制和策略配置,可以有效管理 AWS 环境中的跨实体权限委托,提升安全性。建议结合 AWS 控制台实操角色创建和策略配置以加深理解。
更多文章
本站热门
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- frp 源码阅读与分析(一):流程和概念
- 用peewee代替SQLAlchemy
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(二):shim, docker-init和docker-proxy
- Docker组件介绍(一):runc和containerd
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Golang的template(模板引擎)简明教程