1. OCI 制品目录概述
OCI 制品目录(Oracle Cloud Infrastructure Registry,简称 OCIR)是 Oracle 云原生的私有容器镜像与 OCI 制品托管服务,兼容 Open Container Initiative(OCI) 分发规范。它不仅是容器镜像的存储仓库,更是 Helm Chart、CNAB、OPA Bundle 等任意 OCI 制品的统一注册中心。在权限边界评审中,理解制品目录的结构与核心概念是制定最小权限策略的前提。
1.1 什么是 OCI 制品目录
OCI 制品目录是一个 多租户、区域级 的私有制品仓库服务,部署在 OCI 区域内,通过 IAM 策略控制访问。它具备以下关键特征:
- 完全托管:无需自行搭建 Harbor、Docker Registry 等基础设施。
- 原生集成:与 OCI VCN、OKE、Resource Manager、DevOps 服务深度打通。
- OCI 标准兼容:支持 OCI Image Spec、Distribution Spec、Artifact Spec。
- 私有网络访问:可通过 Service Gateway 或 VCN 内网拉取,无需暴露公网。
- 不可变标签与版本控制:支持标签不可变(immutable tag)和制品版本追溯。
tenancy 级别的策略可以覆盖所有区域仓库,而 compartment 级别策略仅影响该 compartment 内的仓库。评审时需区分这两种作用域。
1.2 核心概念
OCIR 围绕四个核心概念构建:Repository(仓库)、Artifact(制品)、Tag(标签)、Manifest(清单)。下表梳理了每个概念的定义与权限关注点:
| 概念 | 定义 | 权限边界关注点 |
|---|---|---|
| Repository | 制品的命名空间容器,路径格式:ocir.<region>.oci.oraclecloud.com/<namespace>/<repo-name> |
仓库级别的读写策略;是否允许跨 compartment 共享仓库 |
| Artifact | 存储在仓库中的具体对象,可以是容器镜像、Helm Chart、OPA Bundle 等 | 制品类型限制;是否允许推送非镜像制品 |
| Tag | 指向某个 Manifest 的可变或不可变引用,如 latest、v1.0.0 |
不可变标签策略是否启用;标签覆盖权限 |
| Manifest | 描述制品元数据的 JSON 文档,包含层信息、配置、签名等 | Manifest 的读取权限直接影响制品拉取;是否允许匿名拉取 |
1.3 与 OCI Registry 的关系
在 OCI 语境下,Registry 是服务层面的逻辑入口,而 Repository 是组织制品的容器。一个 Registry 可以包含多个 Repository,每个 Repository 又包含多个 Artifact。下图展示了从 Registry 到具体制品的层级关系:
1.4 制品目录的 URL 结构
OCIR 的仓库路径遵循固定格式,理解该结构有助于在 IAM 策略中精确匹配资源:
# 完整仓库路径格式
ocir.<region>.oci.oraclecloud.com/<object-storage-namespace>/<repo-name>
# 示例:美国阿什本区域,命名空间为 abcdefghijkl,仓库名为 myapp/backend
ocir.us-ashburn-1.oci.oraclecloud.com/abcdefghijkl/myapp/backend
# 拉取指定标签的制品
docker pull ocir.us-ashburn-1.oci.oraclecloud.com/abcdefghijkl/myapp/backend:v2.3.1
resource 字段可以使用通配符匹配仓库路径。例如 resource.type = 'ocir-repository' 配合 resource.name = 'ocir.us-ashburn-1.oci.oraclecloud.com/abcdefghijkl/myapp/*' 可限制仅访问 myapp 下的所有仓库。
1.5 制品类型支持
OCIR 不仅存储容器镜像,还支持多种 OCI 制品类型。在权限边界评审中,需要确认是否允许推送非镜像制品,因为不同类型的制品可能对应不同的安全风险:
- 容器镜像(Docker/OCI Image):最常见的制品类型,包含文件系统层和配置。
- Helm Chart:Kubernetes 应用打包格式,以 OCI 制品形式存储。
- OPA Bundle:Open Policy Agent 策略包,用于策略即代码场景。
- CNAB:Cloud Native Application Bundle,多云应用打包规范。
- 自定义 OCI Artifact:任何符合 OCI Artifact Spec 的二进制或元数据包。
artifact-type,或启用制品签名验证。
1.6 与 OCI IAM 的集成关系
OCIR 的权限模型完全基于 OCI IAM,没有独立的用户系统。下表总结了 OCIR 与 IAM 的集成要点:
| IAM 组件 | 在 OCIR 中的角色 | 权限边界示例 |
|---|---|---|
| 用户/组 | 身份主体,通过策略授予 OCIR 操作权限 | Allow group ContainerDevelopers to manage repos in compartment Prod |
| 动态组 | 用于 OKE 节点、函数、实例等自动获取权限 | Allow dynamic-group OKEWorkerNodes to read repos in compartment Prod |
| 策略语句 | 定义对 OCIR 资源的动词(read/inspect/use/manage) | Allow group DevOps to use repos in compartment Staging where request.region = 'us-ashburn-1' |
| 资源类型 | ocir-repository 是 OCIR 对应的 IAM 资源类型 |
resource.type = 'ocir-repository' |
下图展示了 IAM 策略如何作用于 OCIR 资源层级:
1.7 本章小结
OCI 制品目录是云原生制品管理的核心组件,其权限边界评审需要从以下维度展开:
- 资源层级:Registry → Repository → Artifact → Manifest,策略作用域逐级细化。
- 路径结构:仓库 URL 中的 namespace 和 repo-name 是策略匹配的关键字段。
- 制品类型:不同制品类型(镜像、Chart、Bundle)可能对应不同的安全策略。
- IAM 集成:OCIR 无独立认证,所有权限通过 IAM 策略控制,需关注动态组和条件限定。
- 标签管理:不可变标签策略可防止标签被恶意覆盖,是权限边界的重要补充。