1. Oracle Cloud身份与访问管理(IAM)总览

在Oracle Cloud Infrastructure(OCI)中,身份与访问管理(Identity and Access Management,简称IAM)并不是一个独立于云资源之外的管理工具,而是贯穿整个租户(Tenancy)的“控制平面”。无论是创建一台计算实例、访问一个对象存储桶,还是调用一个API,OCI都会先回答两个问题:你是谁,以及你能做什么。IAM就是回答这两个问题的核心机制,也是组织治理在云上落地的第一道基础设施。

理解OCI IAM,需要先建立一个基本认知:OCI的权限模型是“默认拒绝”的。任何主体(用户、实例、服务)在未被显式授权之前,对任何资源都没有访问权限。所有访问能力都来自策略(Policy)的授予,而策略又必须依附于某种主体和某种资源范围。这个“默认拒绝、显式授权”的原则,决定了IAM的组件之间不是松散的并列关系,而是一条清晰的授权链路。

核心组件及其职责

OCI IAM的核心组件包括用户、组、动态组、策略、区间和域。它们各自承担不同职责,又通过策略语句相互连接。

用户(User)是代表某个自然人、应用程序或系统账户的身份实体。每个用户拥有唯一的登录名、密码或API密钥,并可以属于一个或多个组。用户是“身份”的载体,但用户本身不携带任何权限——权限永远来自其所属组或直接授予该用户的策略。

组(Group)是用户的集合,是权限授予的主要对象。在OCI中,最佳实践是“权限授予组,而不是授予单个用户”。当新员工加入时,只需将其加入对应组,即可继承该组的全部权限;当员工离职时,只需将其从组中移除或禁用用户,权限即被回收。组是组织治理中“角色”概念的实现载体。

动态组(Dynamic Group)是OCI中一个非常有特色的组件。它不包含具体用户,而是通过匹配规则(Matching Rule)自动纳入满足条件的计算实例、函数或服务。例如,可以定义一条规则,将所有带有特定标签的实例纳入某个动态组,然后为该动态组授予访问对象存储的权限。这样,实例无需存储任何密钥,就能安全地访问所需资源。动态组是“工作负载身份”的核心实现方式。

策略(Policy)是OCI中权限授予的唯一形式。一条策略由“主体 + 动词 + 资源类型 + 位置 + 条件”构成,例如:Allow group NetworkAdmins to manage virtual-network-family in compartment NetworkProd。策略可以授予在租户根级别、区间级别或特定资源级别。策略是声明式的,不描述“如何做”,只描述“允许谁对什么做什么”。

区间(Compartment)是OCI中用于组织和管理资源的逻辑容器。区间可以嵌套,形成层级结构,通常对应组织的部门、项目或环境(如生产、测试、开发)。区间是策略作用范围的关键维度:同一条策略,作用在根区间和作用于某个子区间,效果完全不同。区间设计直接决定了权限边界是否清晰。

域(Domain)是OCI IAM中用于管理身份生命周期的容器,通常与企业的身份源(如Microsoft Active Directory、Oracle Identity Cloud Service)对应。一个租户可以拥有多个域,每个域独立管理自己的用户、组和身份验证策略。域的存在,使得OCI可以同时支持多个身份体系,例如员工身份、合作伙伴身份和客户身份,而不会相互干扰。

OCI IAM 核心组件关系与授权链路 域(Domain)— 身份生命周期容器 用户 User 自然人 / 应用账户 组 Group 权限授予的主要对象 动态组 Dynamic Group 实例 / 函数 / 服务身份 策略 Policy Allow group X to manage Y in Z 唯一权限授予形式 区间(Compartment)— 资源组织与权限边界 根区间 Root 租户级策略作用域 生产区间 Prod 计算 / 存储 / 网络 测试区间 Test 开发 / 验证资源 网络区间 Network VCN / 子网 / 网关 安全区间 Security 审计 / 密钥 / 日志 策略作用于区间 默认拒绝 未显式授权 = 无权限 用户/组 动态组 策略 区间 域 授权链路:身份 → 策略 → 区间资源

组件之间的关系:一条完整的授权链路

把上述组件串起来看,OCI IAM的授权逻辑可以概括为一条链路:身份(用户/动态组)→ 策略 → 区间 → 资源。用户通过组获得策略中定义的主体身份,策略声明了该主体在哪个区间、对哪类资源、拥有什么级别的操作权限,区间则限定了资源的边界。缺少任何一个环节,授权都无法成立。

举一个具体的例子。假设某企业有一个名为NetworkAdmins的组,组内有用户zhangsan。管理员在根区间创建了生产网络区间NetworkProd,并编写策略:

Allow group NetworkAdmins to manage virtual-network-family in compartment NetworkProd
Allow group NetworkAdmins to read instances in compartment NetworkProd

第一条策略允许NetworkAdmins组在NetworkProd区间内管理所有虚拟网络资源(VCN、子网、路由表、安全列表等);第二条策略允许该组读取该区间内的计算实例信息,但不能创建或删除实例。当zhangsan登录OCI控制台后,他只能看到NetworkProd区间内的网络资源,并且只能对网络资源执行管理操作,对实例只能查看。这就是“最小权限”原则在OCI中的具体体现。

再考虑动态组的场景。假设有一个运行在AppProd区间内的计算实例,需要读取ObjectStore区间内的一个存储桶。传统做法是在实例上配置API密钥,但密钥存在泄露风险。使用动态组,可以定义匹配规则:

Any {instance.compartment.id = 'ocid1.compartment.oc1..aaaa...AppProd'}

然后创建策略:

Allow dynamic-group AppInstances to read objects in compartment ObjectStore where target.bucket.name = 'app-logs'

这样,实例无需任何密钥,即可通过实例 principals 自动获得读取指定存储桶的权限。动态组将“工作负载身份”从“密钥管理”中解放出来,是OCI IAM区别于传统IAM的重要能力。

与组织治理的关联

IAM不仅是技术配置,更是组织治理在云上的映射。组织治理关注的是“谁在什么范围内、以什么方式、对什么资源负责”,而OCI IAM的组件恰好提供了这种映射能力。

区间结构通常对应组织的部门或项目结构。例如,一个企业可以按“根区间 → 业务线区间 → 环境区间(生产/测试/开发)”三层来组织资源。这种结构使得权限边界与组织边界对齐:业务线A的管理员无法看到业务线B的资源,生产环境的管理员与测试环境的管理员可以完全分离。

组则对应组织中的角色。例如,NetworkAdmins对应网络运维团队,AppDevelopers对应应用开发团队,Auditors对应审计团队。每个组被授予与其职责匹配的策略,而不是按个人授予权限。当人员岗位变动时,只需调整其组归属,权限自动跟随角色变化。

域则对应组织的身份源。大型企业往往同时存在员工目录、合作伙伴目录和客户目录。通过多个域,OCI可以分别对接这些身份源,并独立管理各自的认证策略和生命周期。例如,员工域可以强制多因素认证,合作伙伴域可以设置更短的会话超时,客户域可以开放自助注册。

治理建议:在OCI中落地组织治理时,建议先设计区间层级,再定义组和角色,最后编写策略。区间是权限的“容器”,组是权限的“主体”,策略是权限的“内容”。三者顺序颠倒,容易导致权限边界混乱或策略冗余。

关键设计原则

在实际使用OCI IAM时,有几条原则值得始终遵循。第一,权限授予组,不授予个人。个人权限难以审计和回收,组权限则可以通过成员管理集中控制。第二,区间设计先于策略编写。区间是策略的作用域,区间结构不合理,策略就会变得复杂且难以维护。第三,优先使用动态组管理云上工作负载。动态组消除了密钥分发和轮换的负担,同时降低了密钥泄露的风险。第四,策略尽量使用最小权限动词。OCI策略动词包括inspect、read、use、manage,权限依次递增。能用read完成的操作,不要授予manage。第五,利用域隔离不同身份体系。不要让员工身份、合作伙伴身份和客户身份混在同一个域中,否则认证策略和生命周期管理会相互牵制。

OCI IAM的组件并不复杂,但组件之间的关系和组合方式决定了云上安全与治理的质量。理解“身份 → 策略 → 区间 → 资源”这条链路,是后续深入学习策略语法、区间设计、动态组规则和域管理的基础。在接下来的章节中,我们将逐一展开每个组件的具体配置方法和治理实践。