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 的资源。
  • 步骤
    1. Account B 创建角色 Role-B,配置信任策略允许 Account A 的特定用户/角色。
    2. Account A 的用户通过 AssumeRole API 获取 Role-B 的临时凭证。

(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. 最佳实践

  1. 最小权限原则
    • 仅授予角色必要的权限,信任策略中严格限制可扮演角色的主体。
  2. 使用外部 ID

    • 跨账户委托时,通过 Condition 字段添加 sts:ExternalId,防止混淆代理问题。

      "Condition": {
      "StringEquals": {"sts:ExternalId": "unique-secret-id"}
      }
      
  3. 监控与审计

    • 启用 CloudTrail 记录 AssumeRole 事件。
    • 使用 IAM Access Analyzer 分析信任策略风险。

6. 常见问题排查

  • 权限冲突:检查角色访问策略是否与用户原有权限冲突。
  • 跨账户失败
    • 确保目标角色的信任策略包含源账户/用户 ARN。
    • 检查是否配置了 sts:ExternalId(如适用)。
  • 服务角色无法使用:确认服务是否支持服务相关角色,并检查信任策略中的服务标识符(如 ec2.amazonaws.com)。

通过理解信任链的机制和策略配置,可以有效管理 AWS 环境中的跨实体权限委托,提升安全性。建议结合 AWS 控制台实操角色创建和策略配置以加深理解。


更多文章
  • 使用软KVM切换器 barrier 共享键鼠
  • SQL 防注入及原理
  • 使用 gomock 测试 Go 代码
  • gevent不是黑魔法(二): gevent 实现
  • gevent不是黑魔法(一): greenlet 实现
  • 用 entgo 替代 gorm
  • 应用内使用crontab不是那么方便
  • 单测时要不要 mock 数据库?
  • Sentry 自建指南
  • 用selenium完成自动化任务
  • 用闲置的安卓手机做垃圾电话短信过滤
  • 推荐三个时间管理工具
  • 一次事故反思
  • 当JS遇到uint64:JS整数溢出问题
  • SQLite3 存储以及ACID原理