以各家官方文档为基准,先讲清统一的授权骨架(身份 / 角色 / 策略 / 边界 / 跨账户),再逐云拆解,最后用你给的 OCBC 三云接入清单作为真实样本,解码它在每朵云里到底建了什么、为什么这么建。
无论 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 顺序三朵云高度一致。
Explicit Deny 一票否决;组织/边界层只缩不减;跨账户/租户访问必须两端都允许。这是理解多云 IAM 的关键工具。横向看一行,你就知道三朵云里"同一个东西"分别叫什么。点击行可展开官方定义。
| 概念(统一) | AWS | Azure | OCI |
|---|---|---|---|
| 组织 / 租户根 | AWS Organization + root account | Microsoft Entra Tenant + Management Group | Tenancy(根 compartment) |
| 账户 / 订阅 / 区间 | AWS Account(member account) | Subscription | Compartment |
| 人用户 | IAM User(或 IAM Identity Center) | Entra ID User | IAM User(在 Domain 下) |
| 工作负载身份(服务账号首选) | IAM Role(assume 拿 STS 临时凭证) | Managed Identity / Service Principal | Dynamic Group(资源集合)或 IAM User + API key |
| 组 | IAM Group | Entra Group / Entra Role | IAM Group(普通与 Dynamic) |
| 权限定义 | Policy(JSON) | Role Definition | Policy statement |
| 授权动作 | Attach policy to user/role | Role Assignment(scope 继承) | Policy “Allow group X to manage …” |
| 信任 / 谁能用我 | Trust Policy(谁可 AssumeRole) | Service Principal / FIC 信任 | Dynamic Group rule / policy subject |
| 组织级边界策略 | SCP / RCP | Management Group Policy | 父 Compartment / Tenancy 策略 |
| 跨账户 / 租户访问 | sts:AssumeRole(跨 account) | Role Assignment at 订阅/MG scope | Cross-tenancy policy(endorse/define) |
请求路径:身份(User/Role)→ 挂在身份上的 policy + trust → 组织边界(SCP/RCP、Permissions Boundary)→ 求值。服务账号用 Role 而非 User。
IAM User(长期密钥,少用)、IAM Role(临时凭证,首选)、Group(人的集合)。
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"
}]
}
Azure 把"身份"归到 Microsoft Entra ID(原 Azure AD),"授权"归到 Azure RBAC(基于 Azure Resource Manager)。授权单元是 Role Assignment = 主体 + 角色定义 + scope。
User、Service Principal(非人 App 的安全主体)、Managed Identity(免密钥,最推荐的服务账号形态)、Group。
Role Definition(权限集合,如 Contributor / 自定义角色)+ Role Assignment,绑定到某个 scope 上。
Management Group → Subscription → Resource Group → Resource。上层分配向下继承。
# 作用域从大到小,高层分配自动下钻
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}
绑定单资源生命周期,资源删除即删。适合单一 VM 上的独立负载。
独立资源,可挂多个资源、权限稳定可复用。多 VM 共享同一身份时首选。
工作负载直接通过 Azure.Identity SDK / MSAL 向 Entra 取 token,全程无密钥,无需 CyberArk 之类保管密码。这点和 AWS Role、OCI Dynamic Group 思路一致:服务账号默认不发长期密钥。
OCI 的授权语言最接近"自然语言":Allow <subject> to <verb> <resource-type> in <compartment>。核心容器是 Compartment,天然支持层级隔离。
租户(Tenancy)下可建层级 compartment 做资源隔离、计费、策略边界。策略写在 compartment 上向下继承。
IAM User(在 Domain 下)、IAM Group(普通)、Dynamic Group(按 rule 匹配资源,非人主体的首选)。
每条 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)。
你给的 OCBC_Public_Cloud_Integration_Prerequisite_v15.xlsx 是 OCBC 把内部 Cloud Management Platform(CMP,5 个节点) 接入 AWS / Azure / OCI 的前置 checklist。本质:给 CMP 在每朵云里建一个"服务账号",让它能发现/开通/管理虚拟机 + 读监控 + 读账单。下面逐云解码它的实体设计与对应策略。
cmpEC2InstanceRoleStage 1# 单一 Role 信任策略(每成员账户重复)
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}]
}三朵云的求值骨架高度一致:默认拒绝 → Explicit Deny 否决 → 各天花板须全放行 → 任一 Explicit Allow 通过。下方按真实顺序实现,勾选不同组合看结论。
把前面的内容浓缩成可执行的检查项。无论哪朵云,顺序都是:选身份形态 → 写最小权限 → 写信任/范围 → 进密钥库 → 审计。
* 通配(除非临时调试)Condition / where 收窄(来源 IP、标签)