用途
本技能面向在 OCI(Oracle Cloud Infrastructure)上管理身份与访问的工程师,帮助编写正确的 IAM 策略、排查权限错误、配置动态组并调试 IDCS 联合身份。
主要能力
策略编写与常见错误规避
技能强调生产环境中的安全实践:
- 禁止使用过于宽泛的策略,例如
Allow any-user to manage all-resources in tenancy,应改为显式指定组、资源与隔间,并可结合条件限制,如Allow group AppDevelopers to manage instance-family in compartment AppDev where target.instance.name =~ 'dev-*'。 - 策略必须位于目标隔间或其上级(根租户),放在子隔间会导致静默失败。
- 禁止在生产策略中使用
any-user,应使用显式组成员关系。 - 禁止用用户主体语法授权实例,实例应使用动态组。
- 禁止在动态组规则中硬编码资源 OCID,应使用隔间或标签匹配。
权限排查
- 404 NotAuthorizedOrNotFound:OCI 故意模糊该错误,资源不存在或调用者缺少
inspect权限均返回 404。排查路径包括确认资源是否存在、调用者是否具备inspect、策略是否位于目标隔间或以上、动态组/实例主体是否匹配、跨隔间访问时策略位置是否正确。 - 403 NotAuthorized:调用者已识别但缺少权限。常见原因包括动词错误、资源类型错误、条件不匹配、策略传播延迟(10–60 秒)。
- 动词层级:
inspect < read < use < manage。
策略语法要点
- 资源类型族:
instance-family(不含卷)、volume-family、object-family、database-family等,需注意区分。 - 条件子句(WHERE):支持基于标签、资源名称正则、请求属性以及组合条件(
all/any)。 - 位置语法:
in compartment、in tenancy、in resource;没有内置的“隔间及所有后代”语法,需将策略放在父隔间。
动态组模式
- 按隔间:
ALL {instance.compartment.id = '<compartment-ocid>'} - 按标签:
ANY {instance.freeform-tags.app = 'webserver'} - 限制性 AND 规则:
ALL {instance.compartment.id = '<compartment-ocid>', instance.freeform-tags.environment = 'production'} - 测试动态组成员资格:使用
oci compute instance get、oci iam dynamic-group get检查规则匹配,并在实例内运行oci os ns get验证实例主体。
认证方式
技能对比了 API Key、Instance Principal、Resource Principal、Session Token 的适用场景与关键约束。
IDCS 联合注意事项
- OCI 组名必须与 IDCS 组名完全一致(区分大小写)。
- 用户能登录控制台但看不到资源,通常缺少针对联合组的 OCI IAM 策略。
- “Invalid credentials” 可能表示 OCI 租户设置中未配置 IDCS 联合。
- 组成员关系不同步通常因 OCI 组名与 IDCS 组名不匹配。
隔间层级设计
建议按环境划分层级(Production、Development、SharedServices),而非扁平结构,以明确爆炸半径和成本报告。
使用方式
技能以知识文档形式提供,包含策略示例、排查流程图和命令行示例。当需要编写复杂策略、查询服务特定动词与权限列表、排查策略评估顺序或实施最小权限时,可加载 references/oci-iam-policies-reference.md 参考文件;快速语法示例、403/404 排查和动态组规则无需加载该文件。
适用场景
- 编写或审查 OCI IAM 策略
- 排查 403/404 权限错误
- 配置动态组
- 调试 IDCS 联合身份
- 设计隔间层级
限制
本技能聚焦 OCI 特有的 IAM 与身份管理,不涉及其他云平台。具体服务动词和权限列表需参考附加参考文件。