☁ 只看某朵云:
Multi-Cloud IAM · AWS / Azure / OCI

三朵公有云的 IAM 权限模型对照:用同一套逻辑看懂

以各家官方文档为基准,先讲清统一的授权骨架(身份 / 角色 / 策略 / 边界 / 跨账户),再逐云拆解,最后用你给的 OCBC 三云接入清单作为真实样本,解码它在每朵云里到底建了什么、为什么这么建。

00总览:三朵云共享的同一套骨架

无论 AWS、Azure 还是 OCI,授权的本质都是同一件事:谁(principal)→ 在什么条件(condition)→ 能对哪些资源(resource)→ 做哪些动作(action)→ 被谁的策略允许/拒绝。差异只在实体命名与边界切法。

统一的四层心智模型(自上而下逐层收紧)

① 组织 / 租户层
组织级红线:AWS SCP/RCP、Azure Management Group 策略、OCI 父区间策略。只封顶、不授予。

② 账户 / 订阅 / 租户层
隔离与计费边界:AWS Account、Azure Subscription、OCI Tenancy(含 Compartment)。

③ 身份实体层
被授权的对象:AWS IAM User/Role、Azure Entra App/Service Principal/Managed Identity、OCI User/Group/Dynamic Group。

④ 策略 / 角色分配层
把"能做什么"绑到身份上:AWS policy、Azure Role Assignment、OCI policy 语句。Evaluation 顺序三朵云高度一致。

贯穿三云的铁律:默认全拒绝(deny by default);任一 Explicit Deny 一票否决;组织/边界层只缩不减;跨账户/租户访问必须两端都允许。

01概念对照矩阵:同一概念,三种叫法

这是理解多云 IAM 的关键工具。横向看一行,你就知道三朵云里"同一个东西"分别叫什么。点击行可展开官方定义。

概念(统一)AWSAzureOCI
组织 / 租户根AWS Organization + root accountMicrosoft Entra Tenant + Management GroupTenancy(根 compartment)
账户 / 订阅 / 区间AWS Account(member account)SubscriptionCompartment
人用户IAM User(或 IAM Identity Center)Entra ID UserIAM User(在 Domain 下)
工作负载身份(服务账号首选)IAM Role(assume 拿 STS 临时凭证)Managed Identity / Service PrincipalDynamic Group(资源集合)或 IAM User + API key
组IAM GroupEntra Group / Entra RoleIAM Group(普通与 Dynamic)
权限定义Policy(JSON)Role DefinitionPolicy statement
授权动作Attach policy to user/roleRole Assignment(scope 继承)Policy “Allow group X to manage …”
信任 / 谁能用我Trust Policy(谁可 AssumeRole)Service Principal / FIC 信任Dynamic Group rule / policy subject
组织级边界策略SCP / RCPManagement Group Policy父 Compartment / Tenancy 策略
跨账户 / 租户访问sts:AssumeRole(跨 account)Role Assignment at 订阅/MG scopeCross-tenancy policy(endorse/define)
👆 点击任意一行,查看该概念在三朵云里的官方定义要点。

02AWS IAM 架构

请求路径:身份(User/Role)→ 挂在身份上的 policy + trust → 组织边界(SCP/RCP、Permissions Boundary)→ 求值。服务账号用 Role 而非 User。

Principal

IAM User(长期密钥,少用)、IAM Role(临时凭证,首选)、Group(人的集合)。

Policy 类型

9 类:identity-based(托管/inline)、resource-based(含 Role 信任策略)、SCP/RCP、boundary、session、VPC endpoint、ACL、RAM。

求值顺序

默认拒绝 → Explicit Deny 否决 → boundary/SCP/RCP/Session 须全放行 → 任一 Explicit Allow 通过。

给"服务账号"正确授权(官方正解)

① 用 Role 不用 User;② 本账户负载挂实例/任务角色,外部负载(GitHub Actions 等)走 OIDC 联邦免密钥;③ 写 permissions policy(精确到 Action+Resource)+ trust policy(精确到 Principal,敏感场景加 ExternalId 防混淆代理人)。

# 角色信任策略:允许 ECS 任务扮演我
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": { "Service": "ecs-tasks.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }]
}
MANAGEMENT vs MEMBER Management account 是组织总闸(创建/邀请账户、挂 SCP、合并账单),默认不受自身 SCP 约束,应只做组织管理;assume role 是"借道"到另一 member account 的跨账户动作,二者不在同一维度。

03Azure IAM(基于 Entra ID + RBAC)

Azure 把"身份"归到 Microsoft Entra ID(原 Azure AD),"授权"归到 Azure RBAC(基于 Azure Resource Manager)。授权单元是 Role Assignment = 主体 + 角色定义 + scope。

身份:Entra ID

User、Service Principal(非人 App 的安全主体)、Managed Identity(免密钥,最推荐的服务账号形态)、Group。

授权:RBAC

Role Definition(权限集合,如 Contributor / 自定义角色)+ Role Assignment,绑定到某个 scope 上。

Scope 四级继承

Management Group → Subscription → Resource Group → Resource。上层分配向下继承。

Scope 层级(官方)

# 作用域从大到小,高层分配自动下钻
Management Group  /providers/Microsoft.Management/managementGroups/{name}
Subscription      /subscriptions/{subscriptionId}
Resource Group    /subscriptions/{id}/resourceGroups/{rg}
Resource          /subscriptions/{id}/resourceGroups/{rg}/providers/{ns}/{type}/{name}

服务账号正解:Managed Identity 免密钥

System-assigned

绑定单资源生命周期,资源删除即删。适合单一 VM 上的独立负载。

User-assigned(推荐)

独立资源,可挂多个资源、权限稳定可复用。多 VM 共享同一身份时首选。

工作负载直接通过 Azure.Identity SDK / MSAL 向 Entra 取 token,全程无密钥,无需 CyberArk 之类保管密码。这点和 AWS Role、OCI Dynamic Group 思路一致:服务账号默认不发长期密钥。

ENTRA × RBAC 注意区分:Entra ID 管"你是谁"(认证),RBAC 管"你能干什么"(授权)。跨订阅访问 = 在目标订阅/管理组做 Role Assignment,而非在源身份上改权限。

04OCI IAM 架构

OCI 的授权语言最接近"自然语言":Allow <subject> to <verb> <resource-type> in <compartment>。核心容器是 Compartment,天然支持层级隔离。

容器:Compartment

租户(Tenancy)下可建层级 compartment 做资源隔离、计费、策略边界。策略写在 compartment 上向下继承。

身份:User/Group

IAM User(在 Domain 下)、IAM Group(普通)、Dynamic Group(按 rule 匹配资源,非人主体的首选)。

授权:Policy

每条 policy 是 Allow/Deny subject to verb resource-type in compartment where …。支持跨租户 endorse/define。

策略语法示例

# 允许 group CMP-Admins 在 target compartment 管理实例与 VC
Allow group CMP-Admins to manage instance-family in compartment Target-CMP
Allow group CMP-Admins to manage virtual-network-family in compartment Target-CMP

# Dynamic Group:匹配带特定标签的实例,作为主体行动
# 规则:ALL {instance.compartment.id = 'ocid1.compartment..'}

# 跨租户:customer 租户 endorse 自己的 group 去 read 另一租户的资源
Define tenancy Partner as ocid1.tenancy..
Endorse group CMP-Integration to read object-family in tenancy Partner

服务账号正解

① 能避免长期密钥就避免:用 Dynamic Group 让资源(如 VM)凭自身身份调 API,无需 API key;② 必须长期凭证时(如外部 CMP 从 OCBC 网络连 OCI API),建 IAM User + API signing key(非密码),并登记到 CyberArk 这类密钥库;③ 策略用 where 条件进一步收窄(如限定来源网络 source IP)。

COMPARTMENT 即边界 OCI 没有 AWS 那种独立"账户",Compartment 承担隔离+计费+策略边界三重角色。跨 compartment 访问靠写 policy 语句的 subject/compartment,跨租户靠 endorse/define。这是它和 AWS 账户模型最大的结构差异。

05OCBC 三云接入清单解码:它到底建了什么

你给的 OCBC_Public_Cloud_Integration_Prerequisite_v15.xlsx 是 OCBC 把内部 Cloud Management Platform(CMP,5 个节点) 接入 AWS / Azure / OCI 的前置 checklist。本质:给 CMP 在每朵云里建一个"服务账号",让它能发现/开通/管理虚拟机 + 读监控 + 读账单。下面逐云解码它的实体设计与对应策略。

① 管理账户建 CMP IAM User — 仅 Management AccountStage 1

实体:IAM User svcCMPUser(仅 programmatic,存于 CyberArk)。为什么只在管理账户:CMP 用它读组织级账单(CUR),不碰成员账户业务资源。

对应 AWS 模型:长期密钥 User 是"兼容形态",官方更推荐 Role;但 OCBC 的 CMP 在自有网络里,需稳定长期凭证,故走 User + 密钥库托管。

② 每个 Member Account 建 Role cmpEC2InstanceRoleStage 1

实体:每个成员账户一个 Role,trust policy 信任 EC2 service(实例角色),permissions 限 EC2/SSM 最小权限。为什么每账户一个 Role:跨账户动作 = CMP 用管理账户 User assume 进各成员账户的该 Role,符合"每账户独立边界"。

# 单一 Role 信任策略(每成员账户重复)
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": { "Service": "ec2.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }]
}
③ 管理账户 User 挂账单只读策略(CUR S3)Stage 3

权限:读 Cost & Usage Report 所在 S3 桶。需在管理账户做,因为 CUR 汇总体在该账户。

网络前置 — CMP 节点需放通到 AWS 端点Stage 1

CMP 5 节点 → ec2/sts/ssm/s3/monitoring.*.amazonaws.com 全 TCP 443;目标 VM → SSM 消息端点。这是 IAM 之外但接入必需的连通性前提。

三朵云的"服务账号"对照结论:AWS 用 管理账户 User + 各成员账户 Role(长密钥 + 临时角色混合);Azure 用 Entra Service Principal + 每订阅自定义角色分配;OCI 用 IAM User+API key + Group + compartment 级 policy(外加 Dynamic Group 做资源主体)。共同点:都按"最小权限 + 分边界"建服务身份,临时/长期凭证都进 CyberArk 托管。

06策略求值模拟器 ▶ 三云通用逻辑

三朵云的求值骨架高度一致:默认拒绝 → Explicit Deny 否决 → 各天花板须全放行 → 任一 Explicit Allow 通过。下方按真实顺序实现,勾选不同组合看结论。

映射到三云:「天花板」在 AWS = Permissions Boundary / SCP / RCP / Session;Azure = Management Group policy(scope 上层的 denyAssignment);OCI = 父 compartment / tenancy 策略。它们都只缩不减,且从不授予权限本身。

07落地清单:给服务账号授权,三朵云通用

把前面的内容浓缩成可执行的检查项。无论哪朵云,顺序都是:选身份形态 → 写最小权限 → 写信任/范围 → 进密钥库 → 审计。

身份形态(按推荐度)

  • AWS:Role(本账户)/ OIDC 联邦(外部)> IAM User
  • Azure:User-assigned Managed Identity > Service Principal
  • OCI:Dynamic Group(资源)> IAM User + API key

最小权限

  • Action/verb 精确列,拒绝 * 通配(除非临时调试)
  • Resource 限定到具体 ARN / compartment / scope
  • 用 Condition / where 收窄(来源 IP、标签)

信任 / 范围

  • AWS trust policy 精确到 Principal + ExternalId
  • Azure scope 精确到订阅/资源组,避免整租户
  • OCI policy 的 subject/compartment 精确,跨租户用 endorse

凭证与审计

  • 长期密钥进 CyberArk / 密钥库,强制轮转
  • CloudTrail / Entra sign-in logs / OCI Audit 全开
  • Access Analyzer / 闲置权限回收定期跑
资料来源:AWS IAM User Guide(How IAM works / Policies / Evaluation logic)、Microsoft Learn Azure RBAC(overview / scope / managed identities)、Oracle OCI IAM 文档(overview / policy / dynamic group / cross-tenancy)。OCBC 表格内容取自你提供的 v15 清单(AWS/Azure/OCI 三表)。
多云 IAM 对照报告 · 基于各家官方文档与 OCBC 接入清单生成 · 交互内容均为本地运行,无外部依赖