首页 AWS 多账号架构中的 Break-Glass 应急账号设计与实践
文章
取消

AWS 多账号架构中的 Break-Glass 应急账号设计与实践

在 AWS 多账号架构中,Break-Glass(破窗/应急)账号是安全体系最后一道防线。当 SSO 挂了、SCP 改坏了、权限全锁了的时候,这是唯一能进去的路。

设计原则

Break-Glass 账号的核心原则:不依赖任何可能出问题的组件

原则说明
独立于 SSOSSO 可能配置错误、管理员离职、IAM Identity Center 故障
独立于日常权限体系日常 SCP 可能误封所有操作
Root 凭据安全存储邮箱 + 密码 + MFA 存放在密码管理器
平时不用仅应急时启用,避免暴露面

使用方式

Emergency 账号平时不用,仅在紧急情况下介入。两种入口都可以:

  • SSO 登录:如果 SSO 还能用,直接通过 IAM Identity Center 进去
  • Root 登录:如果 SSO 挂了,用安全存储的 Root 凭据(邮箱+密码+MFA)登录

进去之后的流程取决于登录方式:

SSO 登录→ 直接通过 Switch Role 进入目标账号操作。SSO 颁发的临时凭证本身可审计。

Root 登录→ 先创建临时 IAM 用户,再用 IAM 用户登录后 Switch Role。原因是 AWS Root 用户不能执行 sts:AssumeRole,无法直接 Switch Role 到其他账号:

1
2
3
4
5
6
7
8
9
Root 登录
    ↓
创建临时 IAM 用户(AdministratorAccess)
    ↓
用 IAM 用户的凭证登录
    ↓
Switch Role 到目标账号恢复操作
    ↓
操作完成后删除临时 IAM 用户及凭证

Cross-Account AssumeRole 机制

Emergency 账号通过临时 IAM 用户登录后,使用 AWS 控制台的 Switch Role 功能进入其他账号:

1
2
3
4
5
6
7
临时 IAM 用户登录 Emergency 账号
    ↓  Switch Role
Management(修复 CT / SSO)
Log-Archive(检查日志)
Audit(修复安全服务)
Billing(检查账单)
Prod(修复生产环境)

前提是目标账号的 OrganizationAccountAccessRole(AWS Organizations 在每个账号中自动创建)信任 Emergency 账号。需要在目标账号中修改信任策略:

1
2
3
4
5
6
7
8
9
{
  "Action": "sts:AssumeRole",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::${EMERGENCY_ACCOUNT_ID}:root"
    ]
  }
}

注意信任的是 Emergency 账号的 Root(arn:aws:iam::${EMERGENCY_ACCOUNT_ID}:root),不是某个 IAM 用户。临时 IAM 用户在 Emergency 账号内继承账号权限,可以通过 Switch Role 进入任何信任该账号的目标角色。

SCP 豁免策略

Emergency 账号的 SCP 比普通账号宽松,确保在极端情况下不封锁自己。

Security OU 下只有一个层级,Audit、Log-Archive、Emergency 都在同一 OU。通过 SCP 条件按账号豁免:

1
2
3
4
5
6
7
{
  "Condition": {
    "StringNotEquals": {
      "aws:PrincipalAccount": "${EMERGENCY_ACCOUNT_ID}"
    }
  }
}

严格规则附加到 Security OU,但 Emergency 账号通过 aws:PrincipalAccount 条件跳过。

总结

Break-Glass 账号的核心价值在于独立性和可用性——不依赖 SSO、不依赖日常权限体系、凭据独立存储。配置好跨账号 AssumeRole 链路和 SCP 豁免策略,就能在极端情况下保住一条通往所有账号的修复路径。

本文由作者按照 CC BY 4.0 进行授权

AWS Control Tower vs 手动部署多账号架构:对比与实践注意点

CT Control Tower Guardrails 与原生 SCP 的分工原则