注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
深入了解基于标记的 Oracle Cloud Infrastructure Identity and Access Management 策略
简介
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 策略是稳健、安全的云环境的基石。它们提供强大、灵活的机制来控制对 OCI 资源的访问,确保只有授权用户和服务才能对指定资源执行特定操作。
OCI IAM 策略的核心是以用户可读的语法编写的一组声明性语句,指示谁可以访问什么并在哪些条件下访问。通过这些策略,组织可以实施最小权限原则,仅向用户和服务授予执行其任务所需的权限,而不再授予其他权限。这样可以最大限度地降低安全风险,同时保持运营效率。
OCI IAM 策略在 OCI 层次结构的各个级别应用,包括区间、租户和特定资源,从而高度适应复杂的组织结构。通过 OCI 的策略继承和区间化,管理员可以根据特定安全性和运营要求建立细粒度控制。有关 OCI 策略的详细信息,请参阅策略入门。
在本教程中,我们将深入探讨策略优化的重要性,探索优化策略的最佳实践以实现最佳结果,并重点介绍可以充分利用策略优化的方案。
目标
-
揭秘策略组件和语法。
-
了解为什么优化 OCI IAM 策略对于可扩展性和策略限制至关重要。
-
提供具体可行的优秀实践。
-
强调标记在策略管理中的作用。
-
通过展示实际用例来突出显示常见挑战和解决方案。
先决条件
-
访问 OCI 租户。
-
基本了解 OCI 概念。
-
了解 OCI IAM。
-
熟悉策略语法。
-
了解区间化和标记基础知识。
-
最小特权原则意识。
-
OCI 策略限制知识。
-
具有治理和合规性标准的经验。
揭秘策略组件和语法
要有效地优化 OCI IAM 策略,了解其结构和关键组件至关重要。OCI 中的策略通过指定谁(主要)、对什么(资源)和什么(范围)来定义权限。下面我们对此进行细分:
OCI IAM 策略的关键组件
-
主体(主题):请求访问的实体,可以是以下实体之一:
-
用户: OCI 中的单个账户,通常代表人员。有关更多信息,请参见管理用户。
-
组:具有共享访问需求的用户的集合。有关更多信息,请参见使用组。
-
动态组:由特定规则标识的一组 OCI 资源(例如,计算实例、函数)。动态组中的资源将根据标记或元数据等标准自动进行分组。有关更多信息,请参见 Managing Dynamic Groups 。
-
资源主用户:服务(例如 OCI Functions 或 Oracle Autonomous Database)代表自身行事。资源主体允许服务使用 OCI 和其他资源进行安全验证,而无需显式凭证。有关更多信息,请参见 Resource Principal Authentication 。
-
实例主用户:特定于计算实例的一种资源主用户。它允许实例使用 OCI IAM 策略直接与 OCI 服务(例如 OCI Object Storage 或 Identity)交互,而无需在实例上运行的应用程序中嵌入身份证明。有关详细信息,请参阅实例主用户。
-
-
操作(动词):指定主体可以执行的操作:
inspect
:查看有关资源的元数据。read
:查看资源内的元数据和数据。use
:执行读取操作和有限管理操作。manage
:执行所有操作,包括创建和删除资源。
有关详细信息,请参阅操作。
-
资源 (Resource-Type):定义操作应用于的 OCI 资源的类型,例如:
- 计算实例、存储桶、VCN、数据库等。
- 可以使用区间按层次结构对资源进行组织,以实现更好的管理。
有关详细信息,请参阅资源。
-
范围(位置):指定策略应用的位置:
- 区间:资源的逻辑容器,用于启用分层组织。
- 租户:整个 OCI 账户,通常用于全局权限。
有关详细信息,请参阅位置。
-
匹配规则(条件):指定一个或多个条件。将 any 或 all 分别用于逻辑 OR 或 AND 的多个条件。
- 单个条件的语法:
variable =|!= value
。 - 多个条件的语法:
any|all {<condition>,<condition>,...}
。
有关详细信息,请参阅条件。
- 单个条件的语法:
奖金提示:了解 OCI IAM 策略中的集合交集概念
只有当两组值之间存在重叠时,OCI IAM 策略中的 set-intersect 才用于授予访问权限。这样可确保根据组成员资格、资源标记或其他属性动态授予权限,而不是对策略中的特定用户或组进行硬编码。
-
OCI IAM 策略中的集合交集示例
Allow any-user to manage database-family-resources in tenancy where sets-intersect(request.groups.name, target.resource.compartment.tag.database.admins)
断开策略语句:
-
允许任意用户:此策略适用于 OCI 中的任何已验证用户(无论特定组成员身份如何)。
-
管理数据库系列资源:授予对所有与数据库相关的资源(自治数据库、数据库系统、备份等)的完全管理控制权。
-
在租户中:该策略适用于整个租户(所有区间)。
-
其中 set-intersect(
request.groups.name
,target.resource.compartment.tag.database.admins
)request.groups.name
:表示用户所属的组。target.resource.compartment.tag.database.admins
:区间上的一个标记,其中包含可管理该区间中数据库资源的允许组列表。- sets-intersect(...):确保仅当用户至少属于标记中列出的一个组时才授予访问权限。
-
大规模的 OCI IAM 策略模型
OCI IAM 策略是保护 OCI 工作负载的基本要素之一。能够为客户扩展和支持大量负载至关重要。因此,我们创建了一个策略模型,该模型需要在 OCI 的策略限制内使用少量策略,适用于任何规模的工作负载。以下是采用可扩展策略模型的一些原因。有关更多信息,请参见IAM With Identity Domains Limits 。
优化 OCI IAM 策略是维护安全、可扩展、高效的云环境,同时保持在 OCI 策略限制内的关键任务。这就是为什么这个过程至关重要:
-
策略限制和约束条件: OCI 对可以在租户和区间内创建的策略数实施特定限制。如果策略未优化,则可以在大规模或复杂环境中快速用尽这些限制。
-
主要原因包括:
- 避免冗余:针对不同的区间或资源重复定义类似策略可能会导致策略膨胀,从而更难管理。
- 保持在 OCI 策略限制内: OCI 的每个策略和每个租户的策略语句数最大。优化可确保您不会过早达到这些限制。
-
-
增强可管理性:随着企业的发展,管理多个区间中的数百个策略可能会变得难以管理,而无需进行调优。优化的策略:
- 通过减少策略总数来简化管理。
- 提高清晰度,避免规则重叠或冲突,从而简化调试和审计。
-
跨复杂环境的可扩展性:通过优化策略,您可以通过以下方式实现无缝扩展:
-
性能优化: OCI 在每次访问请求期间评估策略。大量冗余或过于具体的策略可能会增加评估时间,从而导致访问控制决策变慢。优化的策略可减少开销,确保更快、更高效的运营。
-
遵循最小权限原则:在优化可扩展性时,维护最小权限原则至关重要。广泛且不受检查的策略可能会危及安全性,因此在最小访问和可扩展性之间取得平衡至关重要。
标记在策略管理中的作用
标记是 OCI 中的一项强大功能,它通过对资源进行细粒度控制来显著增强策略管理。标记是元数据标签,表示为可以附加到资源的键 - 值对。它们可帮助大规模组织、管理和实施访问控制,尤其是在拥有多个团队和项目的复杂云环境中。有关更多信息,请参阅标记概览。
标记如何增强策略管理
-
简化资源标识:标记提供了一种基于项目、环境、所有者或部门等属性对资源进行分类的统一方法。这简化了将策略应用于特定资源子集的过程。
示例:使用
Project: ProjectX
标记资源可启用目标访问策略。Allow group Developers to manage instances in tenancy where tag.Project = 'ProjectX'
-
启用动态策略实施:基于标记的策略适应不断变化的资源属性。例如,如果新实例使用
Environment: Production
进行标记,它将自动继承为生产环境定义的策略。策略示例:
Allow group QA to inspect instances in tenancy where tag.Environment = 'Test'
-
简化多项目和多团队监管:标记通过将资源与特定团队或项目关联来帮助隔离访问。这降低了跨多个组管理权限的复杂性。
-
简化自动化:标记可以推动自动化的工作流,以实现资源创建、监视和生命周期管理。例如,成本跟踪脚本可以检索标记有 CostCenter 的所有资源:市场营销以生成详细的费用报表。
-
改进成本管理和报告:使用标记可以对特定项目、部门或环境进行细粒度成本归因。这有助于组织更有效地跟踪支出和优化预算。
标记监管:控制标记管理
要保持策略管理的一致性、可靠性和安全性,应严格控制标记创建和修改。监管可确保标记正确应用并符合组织标准。将标记管理限制在一组特定的个人或组中是组织云环境中保持控制、一致性和安全性的关键要素。
-
为什么要限制标记管理?
标记是组织和控制资源的强大工具,但如果管理不善,可能会导致访问控制不一致或未经授权,成本跟踪问题和治理挑战。通过实施围绕谁可以管理标记的严格策略,组织可以确保只有授权人员才能创建、修改或删除关键标记,从而保持环境的完整性。
-
防止未经授权的更改:标记通常与重要的业务流程关联,例如成本分配、资源分类和访问控制。允许无限制地访问修改标记可能会导致未经授权或意外更改,这可能会中断操作或导致资源分配错误。
-
确保一致的标记标准:组织可以利用标准化标记方案来组织资源并轻松跟踪。通过将标记管理限制为一组已定义的管理员,组织可以确保遵守这些标准,防止标记做法不成体系和不一致。
-
维护安全性和合规性:可以利用标记来强制实施安全策略和合规性要求。例如,标记可以定义环境(例如,生产、开发)或敏感数据分类。仅允许授权用户修改这些标记可确保敏感环境受到保护并正确实施访问控制。
-
降低策略配置错误的风险: OCI 中基于标记的策略(如资源访问控制)取决于一致且准确的标记使用情况。如果错误的组或个人可以修改或删除标记,则可能会无意中导致访问策略过于宽泛或限制性。
-
-
如何在 OCI 中限制标记管理
在 OCI 中,您可以通过创建和应用 OCI IAM 策略来控制标记管理,这些策略定义谁可以执行标记操作,例如创建、更新或删除标记。可以定制这些策略来授予对特定用户、组或区间的访问权限,从而确保只有经过授权的个人才能更改关键标记。
以下是将标记管理限制为特定个人或组的一些方法:
-
使用基于组的访问控制:控制标记管理的第一步是确保仅向特定组授予管理标记所需的权限。例如,可以向指定的组(如
TagAdmins
)授予处理标记创建和更新的独占权限。OCI IAM 策略示例:
Allow group TagAdmins to manage tag-namespaces in tenancy
此策略确保只有
TagAdmins
组才能在整个租户中创建、修改或删除标记和标记名称空间。为了使某些组(例如 devops 工程师或 Terraform Runner 组)能够通过控制台将这些创建的标记用于脚本,您可以定义以下策略。Allow group devopsTeam to use tag-namespaces in tenancy Allow group terraformRunner to use tag-namespaces in tenancy Allow dynamic-group terraformRunner to use tag-namespaces in tenancy
-
将区间级别策略用于粒度控制:标记管理策略可以在区间级别应用,因此只有某些区间具有标记管理访问权限。例如,如果您希望将标记管理限制到特定项目或业务单位,则可以应用策略来限制标记在相关区间内的访问。
区间特定标记管理的策略示例:
Allow group TagAdmins to manage tag-namespaces in compartment ProjectA
这样可以确保
TagAdmins
组中的用户只能管理ProjectA
区间中的标记,从而限制他们对其他区间的访问。此外,您可以创建组来仅允许用户使用创建的标记,而不能在区间级别修改它们。Allow group TagUser to use tag-namespaces in compartment ProjectA
-
使用标记名称空间标记控制: OCI 支持
tag namespaces
,后者将相关标记分组在一起。您可以控制谁可以管理特定名称空间中的标记,从而更细粒度地控制谁可以访问特定类型的标记。特定于名称空间的标记管理的策略示例:
Allow group TagAdmins to manage tag-namespaces in tenancy where tag.namespace = 'Billing'
这样可以确保只有具有
TagAdmins
权限的用户才能管理计费名称空间中的标记,从而围绕成本跟踪标记进行更严格的监管。 -
审计和监视标记更改:为了确保标记管理保持安全,组织应实施审计和监视策略来跟踪对标记所做的任何更改。OCI 审计日志提供与标记创建、删除和修改相关的操作可见性。监视这些日志有助于识别任何未经授权的修改标记或任何表明管理不善的模式的尝试。
-
基于标记的 OCI IAM 策略,适用于实际使用场景
现在,在上面学到的所有内容中,让我们根据实际使用场景中的用户原则和实例原则来优化 OCI IAM 策略。但在我们这样做之前,每个客户都需要一些共同的政策,无论其用例如何。
-
常见 OCI IAM 策略:
-
OCI IAM 用户管理策略:
IAMAdmin
组负责管理 OCI IAM 相关配置,例如 OCI IAM 域、用户和组。Allow group IAMAdmin to manage domains in tenancy Allow group IAMAdmin to manage users in tenancy Allow group IAMAdmin to manage groups in tenancy
-
适用于标记管理的 OCI IAM 策略:
InfoSec
组负责管理与安全相关的配置,例如 OCI IAM 策略、用户和标记名称空间。Allow group InfoSec to manage tag-namespaces in tenancy Allow group InfoSec to manage policies in tenancy Allow group InfoSec to use users in tenancy Allow group InfoSec to manage groups in tenancy where all {target.group.name != ‘Administrators’, target.group.name != ‘InfoSec’}
-
OCI IAM 策略(Terraform 运行程序):
terraform-runner
组专门用于执行 Terraform 自动化脚本以进行基础设施预配。Allow group terraform-runner to use tag-namespaces in tenancy Allow group terraform-runner to manage instance-family in compartment Tenants Allow group terraform-runner to manage virtual-network-family in compartment Tenants Allow group terraform-runner to manage volume-family in compartment Tenants Allow group terraform-runner to manage object-family in compartment Storage Allow group terraform-runner to manage secret-family in compartment Tenants Allow group terraform-runner to manage key-family in compartment Tenants
-
为用户主体扩展 OCI IAM 策略
OCI IAM 策略模型:在此策略模型中,目标是编写少量更易于管理的策略,这些策略由数据(在本例中为标记)提供信息,也称为基于属性的访问控制。我们将分配给目标资源或目标资源区间的标记称为权限标记,以进行访问控制。
权限标记:为租户中的每个动词(操作)+ 资源类型组合定义权限标记。它们定义需要分配给目标资源的一组用户的唯一权限。该列表不是一次设置和完成的。从少量权限标记开始。在策略模型上获取句柄后,可以添加更多权限标记。在本教程中,我们将创建 permission tag namespace (权限标记名称空间)作为 mgmt
。此外,我们将创建一个标记名称空间(我们将调用此 infosec
),其中包含一个名为 gname
的标记键。
-
对于具有四种资源类型的以下区间结构以及为这些资源分配管理和使用权限,我们将创建权限标记。
-
对于需要分配给目标的每个权限(大多数情况下为区间),请创建一个组。我们将权限标记分配给资源(使用区间默认标记)和资源区间。标记值是对目标资源具有给定权限的组。
-
定义权限标记后,我们可以编写策略。最终结果是,在租户中定义的每个权限标记仅需要一个策略。给定权限的相同策略将在整个租户中运行。
-
在我们引入更多工作负载时,如果要管理更多的资源类型,则可能需要为这些权限标记添加更多权限标记和策略。否则,只需为具有应具有访问权限的用户组的新工作量分配现有权限标记。我们不必为新负载编写任何新策略。
此方法将在此处讨论的所有示例中保持一致,作为定义 OCI IAM 组和策略的基础。
示例 1:每个应用程序的区间
步骤 1:全面了解客户的业务概览
CompanyA 是一家不断增长的技术公司,为客户开发和部署多个云原生应用。每个应用都符合特定的客户群,并具有严格的安全性和合规性要求。为了确保隔离、可扩展性和高效的访问控制,CompanyA 使用结构化隔间方法组织其 OCI 资源。
步骤 2:为工作量设计区间结构
如前所述,CompanyA 采用 OCI IAM 策略模型来扩展其 OCI IAM 策略。他们为应用创建了单独的区间,以保持资源隔离。
注:只有管理员才能管理
mgmt
和infosec
标记名称空间。
步骤 3:设计 Verb+Resource 类型的以下权限标记组合
在 OCI 中创建组。
-
使用具有创建组的权限的管理账户登录到 OCI IAM 域。
-
转到 Identity and Security(身份和安全),然后单击 Identity(身份)下的 Domains(域)。
-
选择您的区间,然后单击要为其创建组的域。
-
单击组。
-
根据权限标记定义组。(可选)将您的用户添加到这些组中。
注:您必须为权限和目标的唯一组合创建组。如果同一功能组用户 (NetworkAdmin) 需要有权跨所有目标管理网络,则只需一个组即可跨所有目标管理访问。
以下是这些标记的权限标记和 OCI IAM 组。按照以上步骤为定义的每个权限标记创建组。
-
根区间:根区间用作顶层管理层。在哪里,我们的管理员组将被标记为权限标记。以下标记包括:
- 管理员:管理整体租户管理的
manageall
权限。 - UseAdministrators:
useall
权限,用于跨租户访问资源。 - 审计者:对资源具有只读访问权限的
readall
权限,可用于跨租户监视。
- 管理员:管理整体租户管理的
-
每个应用程序区间模型:CompanyA 有多个基于云的应用程序。我们将为每个应用程序创建一个单独的父区间。让我们来了解一下此模型如何作为父区间应用于应用程序 1 (App1) 和应用程序 2 (App2) 。
-
应用 1 (App1):在 OCI 上托管的面向客户的应用。
- 网络区间:所有网络相关资源的区间,例如 VCN、子网等。现在,让我们创建权限标记及其相应的 OCI IAM 组。
- App1NetworkAdmin:用于管理 App1 网络资源的工程师的
managenetwork
资源权限标记。 - App1NetworkUser:需要有限访问 App1 网络配置的开发人员的
usenetwork
资源权限标记。 - App1NetworkReader:用于验证网络设置 App1 的审计者的
readnetwork
资源权限标记。
- App1NetworkAdmin:用于管理 App1 网络资源的工程师的
- 计算区间:适用于计算实例的区间。现在,让我们创建权限标记及其相应的 OCI IAM 组。
- App1ComputeAdmin:面向系统管理员的
managecompute
资源权限标记,用于为 App1 后端预配和扩展计算实例。 - App1ComputeUser:面向部署和测试 App1 后端服务的开发人员的
usecompute
资源权限标记。 - App1ComputeReader:审计者的
readcompute
资源权限标记,用于监视 App1 的计算资源使用情况。
- App1ComputeAdmin:面向系统管理员的
- 数据区间:与数据库和存储相关的资源的区间。现在,让我们创建权限标记及其相应的 OCI IAM 组。
- App1DataAdmin:面向管理 Oracle Autonomous Databases 和 OCI Object Storage for App1 的数据库管理员的
managedb
资源权限标记。 - App1DataUser:
usedb
资源权限标记,供数据科学家访问数据集以进行与 App1 相关的分析。 - App1DataReader:审计者查看 App1 数据库配置的
readdb
资源权限标记。
- App1DataAdmin:面向管理 Oracle Autonomous Databases 和 OCI Object Storage for App1 的数据库管理员的
- 网络区间:所有网络相关资源的区间,例如 VCN、子网等。现在,让我们创建权限标记及其相应的 OCI IAM 组。
-
应用 2 (App2):适用于 CompanyA 运营的内部企业资源计划 (ERP) 系统。
注:在此处,我们还将遵循相同的区间结构方法,并在父 App2 区间下创建网络区间、计算区间和数据区间。为了避免冗余,我们将记下 App2 的权限标记和 OCI IAM 组。
-
网络区间:
- App2NetworkAdmin:
managenetwork
资源权限标记。 - App2NetworkUser:
usenetwork
资源权限标记。 - App2NetworkReader:
readnetwork
资源权限标记。
- App2NetworkAdmin:
-
计算区间:
- App2ComputeAdmin:
managecompute
资源权限标记。 - App2ComputeUser:
usecompute
资源权限标记。 - App2ComputeReader:
readcompute
资源权限标记。
- App2ComputeAdmin:
-
数据区间:
- App2DataAdmin:
managedb
资源权限标记。 - App2DataUser:
usedb
资源权限标记。 - App2DataReader:
readdb
资源权限标记。
- App2DataAdmin:
-
-
注:将权限标记应用于目标(目标可以是资源或区间),以指示哪个组在目标上对 App1 和 App2 具有该特定权限。
步骤 4:为这些权限标记编写 OCI IAM 策略
我们将使用此处讨论的相同方法为 CompanyA 创建策略:更少一些 - 为组扩展 OCI IAM 策略。为此,请使用一个名为 gname
的标记键创建一个标记名称空间(我们将调用此 infosec
)。
-
使用具有创建策略权限的管理账户登录到 OCI IAM 域。
-
转到 Identity and Security(身份和安全),然后单击 Identity(身份)下的 Policies(策略)。
-
选择根区间,然后单击创建策略。
-
在策略中输入名称、说明,然后添加策略语句。单击创建。
-
所有资源策略:
Allow any-user to manage all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageall) Allow any-user to use all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useall) Allow any-user to read all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readall)
注:按照相同的过程定义以下所有提到的策略并添加其各自的策略语句。
-
Cloudguard 策略:
Allow any-user to manage cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecspm) Allow any-user to use cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecspm) Allow any-user to read cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcspm)
-
网络策略:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to use virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useetwork) Allow any-user to read virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readnetwork)
-
计算策略:
Allow any-user to manage instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecompute) Allow any-user to use instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecompute) Allow any-user to read instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcompute)
-
数据库策略:
Allow any-user to manage database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managedb) Allow any-user to use database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usedb) Allow any-user to read database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readdb)
-
示例 2:每个客户/租户的区间
步骤 1:全面了解客户的业务概览
CompanyB 解决方案是一家先进的独立软件供应商 (Independent Software Vendor,ISV),它在云基础设施、数据管理和分析方面提供基于租户的 SaaS 应用。CompanyB 为各行各业的多个客户提供无缝、安全且可扩展的解决方案。他们的成功取决于将 OCI 与精心设计的区间结构结合使用,以高效管理资源,同时满足安全性和合规性要求。
步骤 2:为工作量设计区间结构
CompanyB 隔离了客户的负载,并创建了专用子区间。此外,它们还具有网络区间、共享存储和数据库区间。即使是 CompanyB 也遵循 OCI IAM 策略模型来扩展其 OCI IAM 策略。
步骤 3:设计 Verb+Resource 组合类型的以下权限标记
要创建组,请参见示例 1 步骤 3。您必须为下面定义的所有权限标记创建组。
-
根区间—集中监管:根组件充当中央层,用于监管 OCI 租户中的所有资源和活动。在哪里,我们的管理员组将被标记为权限标记。以下标记包括:
- 管理员:管理整体租户管理的
manageall
权限。 - UseAdministrators:
useall
权限,用于跨租户访问资源。 - 审计者:对资源具有只读访问权限的
readall
权限,可用于跨租户监视。
- 管理员:管理整体租户管理的
-
网络区间—运营干线:网络区间支持 CompanyB 的云网络基础设施,从而在所有资源之间实现连接。这包括虚拟云网络 (Virtual Cloud Network,VCN)、子网、网关和负载平衡器。让我们为其定义权限标记和相应的 OCI IAM 组。
- NetworkAdmin:用于管理 CompanyB 网络资源的工程师的
managenetwork
资源权限标记。 - NetworkUser:需要有限访问 CompanyB 网络配置的开发人员的
usenetwork
资源权限标记。 - NetworkReader:用于验证网络设置 CompanyB 的审计者的
readnetwork
资源权限标记。
- NetworkAdmin:用于管理 CompanyB 网络资源的工程师的
-
租户区间—适用于不同客户负载的隔离区:租户区间的结构是为了隔离每个客户端(租户)的资源和工作负载。这可确保 CompanyB 提供安全、私有的服务,同时保持运营效率。
-
租户 1 区间:租户 1 表示使用 CompanyB 进行应用程序开发和日志记录服务的主要企业客户端。以下是权限标记和相应的 OCI IAM 组:
t1devadmin
:对于租户 1 的开发团队,manageappdev
资源权限具有管理权限,可用于配置和部署定制应用程序。t1devuser
:useappdev
资源权限,用于监视和调整应用程序资源。租户 1 的开发人员将这些资源用于日常开发和测试。t1logsadmin
和t1devuser
:managelogs
和uselogs
资源对日志记录和监视角色的权限可确保管理员配置日志记录服务,而开发人员则可访问日志来调试和优化应用程序。t1devadmin
和t1devuser
:租户 1 的managecspm
和usecspm
资源权限,因为它们还侧重于安全状况,并且能够监视和补救安全风险。
-
Tenant 2 and Tenant 3 Compartments: The structure for Tenant 2 and Tenant 3 mirrors that of Tenant 1, with roles like
t2devadmin
,t2devuser
,t3devadmin
,t3devuser
,t2logsadmin
andt3logsadmin
ensuring that each tenant operates in a fully isolated environment.此方法使 CompanyB 能够保持一致的监管,同时满足特定的租户需求。 -
共享区间—适用于所有租户的集中式资源:共享区间包括多个租户利用的数据库和对象存储等资源,但在逻辑上隔离以保证隐私和安全。
- 数据库区间:
dbadmin
: CompanyB 数据库管理员的managedb
资源权限用于处理所有租户使用的共享数据库,包括预配、缩放和打补丁。dbuser
:特定于租户的用户的usedb
资源权限访问各自的数据库方案或服务。dbreader
:审计者的readdb
资源权限具有只读访问权限,以确保数据库配置符合安全策略。
- 存储区间: OCI 对象存储集中管理,每个租户都有专用存储桶:
osadmin
:负责管理共享对象存储资源的manageobject
资源权限。osuser
:useobject
特定于租户的存储资源权限(例如t1osur
、t2osur
、t3osur
)可确保租户仅访问各自的存储桶。osreader
:合规性团队的readobject
资源权限会查看存储配置和使用模式。
- 数据库区间:
-
步骤 4:为这些权限标记编写 OCI IAM 策略
要创建策略,请参见示例 1 步骤 4。您必须创建以下策略。
-
所有资源策略:
Allow any-user to manage all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageall) Allow any-user to use all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useall) Allow any-user to read all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readall)
-
Cloudguard 策略:
Allow any-user to manage cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecspm) Allow any-user to use cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecspm) Allow any-user to read cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcspm)
-
网络策略:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to use virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useetwork) Allow any-user to read virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readnetwork)
-
日志策略:
Allow any-user to manage logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managelogs) Allow any-user to use logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.uselogs) Allow any-user to read logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readlogs)
-
Appdev 策略:
Allow any-user to manage instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageappdev) Allow any-user to use instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useappdev) Allow any-user to read instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readappdev)
-
数据库策略:
Allow any-user to manage database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managedb) Allow any-user to use database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usedb) Allow any-user to read database-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readdb)
-
存储策略:
Allow any-user to manage object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageobject) Allow any-user to use object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useobject) Allow any-user to read object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readobject)
示例 3:大型企业区间结构
步骤 1:全面了解客户的业务概览
CompanyC Solutions 是一家专注于创新软件解决方案的跨国组织,它决定将其关键任务工作负载迁移到 OCI。该公司在金融和医疗保健等高度监管的行业开展业务,其中安全性、合规性和可扩展性至关重要。
步骤 2:为工作量设计区间结构
现在,让我们了解 CompanyC 的区间结构,该结构遵循 OCI IAM 策略模型来扩展其 OCI IAM 策略。
步骤 3:设计 Verb+Resource 类型的以下权限标记组合
要创建组,请参见示例 1 步骤 3。必须为以下所有权限标记创建组。
-
根区间—集中监管:根组件充当中央层,用于监管 OCI 租户中的所有资源和活动。在哪里,我们的管理员组将被标记为权限标记。以下标记包括:
- 管理员:管理整体租户管理的
manageall
权限。 - UseAdministrators:
useall
权限,用于跨租户访问资源。 - 审计者:对资源具有只读访问权限的
readall
权限,可用于跨租户监视。
- 管理员:管理整体租户管理的
-
PROD 区间:用于托管直接影响业务运营和最终用户的关键任务生产工作负载的区间。每个应用都具有专用的子区间来进行资源隔离和优化管理。让我们为其定义权限标记和相应的 OCI IAM 组。
- NetworkAdmin:用于管理 CompanyC 的网络资源的工程师的
managenetwork
资源权限标记。 - NetworkReader:用于验证网络设置 CompanyC 的审计者的
readnetwork
资源权限标记。 - ComputeAdmin:
managecompute
资源权限标记,供系统管理员为 CompanyC 预配和扩展计算实例。 - ComputeReader:审计者的
readcompute
资源权限标记,用于监视 CompanyC 的计算资源使用情况。 - StorageReader:存储管理团队管理存储配置的
manageobject
资源权限。 - StorageReader:合规性团队的
readobject
资源权限会查看存储配置和使用模式。 - SecurityAdmin:
managecspm
对区间产品的资源权限,因为它们还侧重于安全状况,能够监视和补救安全风险。
现在,我们将继续为特定于应用的子区间定义权限标记和相应的 OCI IAM 组。为了节省时间,我们已合并为所有 3 个不同的应用程序区间定义了权限。
- 应用程序区间:
- PRApp1NetAdmin、PRApp2NetAdmin 和 PRApp3NetAdmin:使用
managenetwork
资源权限标记管理 OCI IAM 组,以便工程师分别管理 App1 、App2 和 App3 的网络资源。 - PRApp1NetUser、PRApp2NetUser 和 PRApp3NetUser:使用
usenetwork
资源权限标记管理 OCI IAM 组,以便工程师分别管理 App1 、App2 和 App3 的网络资源。 - PRApp1ComputeAdmin、PRApp2ComputeAdmin 和 PRApp3ComputeAdmin:使用
managecompute
资源权限标记管理 OCI IAM 组,以便工程师分别为 App1 、App2 和 App3 管理 OCI 计算实例。 - PRApp1ComputeUser、PRApp2ComputeUser 和 PRApp3ComputeUser:使用 OCI Compute 实例分别为 App1 、App2 和 App3 的工程师管理具有
usecompute
资源权限标记的 OCI IAM 组。 - PRApp1StorageAdmin、PRApp2StorageAdmin 和 PRApp3StorageAdmin:使用
manageobject
资源权限标记管理 OCI IAM 组,以便工程师分别为 App1 、App2 和 App3 管理 OCI 对象存储。 - PRApp1StorageUser、PRApp2StorageUser 和 PRApp3StorageUser:使用 OCI Object Storage 分别为 App1 、App2 和 App3 的工程师管理具有
useobject
资源权限标记的 OCI IAM 组。
- PRApp1NetAdmin、PRApp2NetAdmin 和 PRApp3NetAdmin:使用
- NetworkAdmin:用于管理 CompanyC 的网络资源的工程师的
-
NPROD 区间:专用于暂存、开发和质量保证环境。此区间的结构与 PROD 类似,以确保一致性。让我们为其定义权限标记和相应的 OCI IAM 组。
- NetworkAdmin:用于管理 CompanyC 网络资源的工程师的
managenetwork
资源权限标记。 - NetworkReader:用于验证网络设置 CompanyC 的审计者的
readnetwork
资源权限标记。 - ComputeAdmin:
managecompute
资源权限标记,供系统管理员为 CompanyC 预配和扩展 OCI 计算实例。 - ComputeReader:用于监视 CompanyC 的 OCI 计算资源使用情况的审计者的
readcompute
资源权限标记。 - StorageReader:存储管理团队管理存储配置的
manageobject
资源权限。 - StorageReader:合规性团队的
readStorage
资源权限会查看存储配置和使用模式。 - SecurityAdmin:
managecspm
对区间 NPROD 的资源权限,因为它们还侧重于安全状况,并且能够监视和补救安全风险。
同样,现在我们将继续为特定于应用的子区间定义权限标记和相应的 OCI IAM 组。
- 应用程序区间:
- NPApp1NetAdmin、NPApp2NetAdmin 和 NPApp3NetAdmin:使用
managenetwork
资源权限标记管理 OCI IAM 组,以便工程师分别管理 App1 、App2 和 App3 的网络资源。 - NPApp1NetUser、NPApp2NetUser 和 NPApp3NetUser:使用
usenetwork
资源权限标记管理 OCI IAM 组,以便工程师分别管理 App1 、App2 和 App3 的网络资源。 - NPApp1ComputeAdmin、NPApp2ComputeAdmin 和 NPApp3ComputeAdmin:使用
managecompute
资源权限标记管理 OCI IAM 组,以便工程师分别为 App1 、App2 和 App3 管理 OCI 计算实例。 - NPApp1ComputeUser、NPApp2ComputeUser 和 NPApp3ComputeUser:使用 OCI Compute 实例分别为 App1 、App2 和 App3 的工程师管理具有
usecompute
资源权限标记的 OCI IAM 组。 - NPApp1StorageAdmin、NPApp2StorageAdmin 和 NPApp3StorageAdmin:使用
manageobject
资源权限标记管理 OCI IAM 组,以便工程师分别为 App1 、App2 和 App3 管理 OCI 对象存储。 - NPApp1StorageUser、NPApp2StorageUser 和 NPApp3StorageUser:使用 OCI Object Storage 分别为 App1 、App2 和 App3 的工程师管理具有
useobject
资源权限标记的 OCI IAM 组。
- NPApp1NetAdmin、NPApp2NetAdmin 和 NPApp3NetAdmin:使用
- NetworkAdmin:用于管理 CompanyC 网络资源的工程师的
-
共享区间:共享区间托管用于监视的资源,例如日志记录和 Cloud Guard OCI 服务。它还具有多个租户使用的加密和解密密钥,同时确保逻辑隔离以维护隐私和安全。您的应用程序中需要访问这些服务的所有管理员都将添加到为这些服务创建的 OCI IAM 组中。让我们为其定义权限标记和相应的 OCI IAM 组。
-
Oracle Cloud Guard 区间:
cspmAdmin
:具有managecspm
资源权限标记的管理员管理 OCI IAM 组,用于管理 Oracle Cloud Guard 的 PROD 和 Non PROD 区间。cspmUser
:具有usecspm
资源权限标记的 OCI IAM 组,适用于工程师使用/监视 Oracle Cloud Guard 的 PROD 和 Non PROD 区间。cspmReader
:对于为 PROD 和 Non PROD 区间读取 Oracle Cloud Guard 的工程师,具有readcspm
资源权限标记的 OCI IAM 组。
-
OCI 日志记录区间:
logsAdmin
:具有managelogs
资源权限标记的管理员管理 OCI IAM 组,用于管理 PROD 和 Non PROD 区间的 OCI 日志记录。logsUser
:具有uselogs
资源权限标记的 OCI IAM 组,适用于使用/监视 PROD 和 Non PROD 区间的 OCI 日志记录工程师。logsReader
:对于为 PROD 和 Non PROD 区间读取 OCI Logging 的工程师,具有readlogs
资源权限标记的 OCI IAM 组。
-
密钥区间:
kmsAdmin
:具有managekeys
资源权限标记的管理员管理 OCI IAM 组,用于管理 PROD 和 Non PROD 区间的密钥储存库。kmsUser
:具有usekeys
资源权限标记的 OCI IAM 组,适用于使用/监视 PROD 和 Non PROD 区间的密钥储存库的工程师。kmsReader
:对于为 PROD 和 Non PROD 区间读取密钥储存库的工程师,具有readkeys
资源权限标记的 OCI IAM 组。
-
-
游乐场区间:用于实验、开发和测试的灵活且隔离的环境。此区间与生产或合规性限制无关,因此非常适合创新。在此处,对于子区间,我们只有一个 OCI IAM 管理员组,并为测试要求所需的所有 OCI 资源提供管理权限。
-
开发区间:
DevAdmin
:使用managenetwork
、managecompute
、manageobject
、managekeys
、managelogs
资源权限管理开发管理员的 OCI IAM 组,以测试开发区间中的新实施。
-
测试区间:
TestAdmin
:使用managenetwork
、managecompute
、manageobject
、managekeys
、managelogs
资源权限为开发管理员管理 OCI IAM 组,以测试测试区间中的新实施。
-
性能测试区间:
PerfTestAdmin
:使用managenetwork
、managecompute
、manageobject
、managekeys
、managelogs
资源权限为开发管理员管理 OCI IAM 组,以测试性能测试区间中的新实施。
-
步骤 4:为这些权限标记编写 OCI IAM 策略
要创建策略,请参见示例 1 步骤 4。您必须创建以下策略。
-
所有资源策略:
Allow any-user to manage all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageall) Allow any-user to use all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useall) Allow any-user to read all-resources in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readall)
-
日志策略:
Allow any-user to manage logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managelogs) Allow any-user to use logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.uselogs) Allow any-user to read logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readlogs)
-
Cloudguard 策略:
Allow any-user to manage cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecspm) Allow any-user to use cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecspm) Allow any-user to read cloud-guard-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readcspm)
-
密钥策略
Allow any-user to manage keys in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managekeys) Allow any-user to use keys in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usekeys) Allow any-user to read keys in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.readkeys)
-
应用程序策略:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to use virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useetwork) Allow any-user to manage instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managecompute) Allow any-user to use instance-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.usecompute) Allow any-user to manage object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageobject) Allow any-user to use object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.useobject)
-
游乐场政策:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managenetwork) Allow any-user to manage object-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.manageobject) Allow any-user to manage logging-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.mgmt.managelogs) Allow any-user to manage vaults in compartment Playground where request.principal.group.tag.infosec.gname=target.compartment.tag.mgmt.manageVaults Allow any-user to manage keys in compartment Playground where request.principal.group.tag.infosec.gname=target.compartment.tag.mgmt.manageKeys
注:对于此类方案,每次启动新工作量时:
- 检查是否需要任何其他权限标记。如果您这样做,请为这些权限标记创建它们以及 OCI IAM 策略。
- 创建组以管理对新工作负载区间的访问。
- 使用权限标记和创建的组对工作负载区间进行标记。
用于细粒度访问控制的基于标记的权限模型
到目前为止,我们已经讨论过为一组资源创建管理、用户或读取权限的所有示例。但是,大多数客户需要细粒度的访问控制才能遵循最少的权限模型。教程的重点是了解策略模型,这就是为什么我们谈论了一个简单的用例。但是,请允许我举出四个网络人员的示例,以及如何为这四个角色设计细粒度权限标记和 OCI IAM 策略。
-
NetworkOwner:此人员或团队拥有 OCI 租户的网络实施。他们有权设置 FastConnect 并有权管理所有应用程序的网络。
-
NetworkAdmin:此团队拥有应用程序团队的网络实施。它们可以为应用程序团队创建 VCN。但是,他们无权设置网络防火墙或 FastConnect。
-
NetworkOperator:此团队拥有应用程序的网络。团队可以在应用的 VCN 或共享 VCN 中创建应用子网。但是,他们无权管理或更新 VCN。
-
NetworkUser:这是需要对应用程序网络资源使用权限的应用程序管理员团队。
我们将 networkowner
、networkadmin
、networkoperator
和 networkuser
定义为网络区间上的四个标记。对于这些标记,我们将分配有权访问网络区间的组名。
-
NetworkOwner 策略:
Allow any-user to manage virtual-network-family in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkowner)
-
NetworkAdmin 策略:
Allow any-user to manage vcns in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage subnets in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage route-tables in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage security-lists in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage network-security-groups in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage dhcp-options in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage local-peering-gateways in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage service-gateways in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin) Allow any-user to manage internet-gateways in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkadmin)
-
NetworkOperator 策略:
Allow any-user to {VCN_ATTACH,VCN_DETACH} in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to inspect vcns in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage subnets in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage route-tables in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage security-lists in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage network-security-groups in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator) Allow any-user to manage dhcp-options in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkoperator)
-
NetworkUser 策略:
Allow any-user to inspect vcns in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use subnets in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use vnics in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use security-lists in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser) Allow any-user to use network-security-groups in tenancy where sets-intersect(request.groups.name,target.resource.compartment.tag.Net.networkuser)
为实例主用户扩展 OCI IAM 策略
示例 1:OCI 中的共享存储和密钥的多租户实例访问控制
步骤 1:全面了解客户的业务概览
XYZ Cloud Solutions 是一家 SaaS 提供商,提供托管在 OCI 上的文档管理系统 (DMS)。该平台为多个企业客户提供服务,每个客户都需要严格隔离数据,同时利用共享基础设施。
客户要求:
- 每个企业(租户)都应具有单独的实例来处理和管理文档。
- 每个租户的密钥(API 密钥、数据库凭证)只能由该租户的实例访问。
- 所有租户都将其文档存储在集中式 OCI Object Storage 区间中,但他们只能访问自己的存储桶。
- 该系统应支持自动扩展和轻松引导新租户。
步骤 2:为工作量设计区间结构
现在,我们来了解 XYZ 云解决方案的区间结构。XYZ 云解决方案遵循 OCI IAM 策略模型来扩展 OCI IAM 策略。
-
租户隔离与区间:
- 为每个企业客户创建一个专用 OCI 区间(Tenant1、Tenant2 等)。
- 在计算实例(VM、函数或容器)各自的区间中部署。
- 具有访问控制的集中存储。
-
维护 OCI 对象存储存储桶的共享存储区间:
- 每个租户都有一个带有
Enterprise.Tenant=<TenantName>
标签的专用存储桶。 - OCI IAM 策略确保每个租户的实例只能从自己的存储桶进行读取。
- 使用 OCI Vault 进行密钥管理。
- 每个租户都有一个带有
-
将数据库身份证明、API 密钥和加密密钥存储在 OCI Vault 中:
- 每个租户的密钥都使用
Enterprise.Tenant=<TenantName>
进行标记。 - OCI IAM 策略仅允许该租户的实例检索其密钥。
- 治理的企业标记策略。
- 每个租户的密钥都使用
-
使用
Enterprise.Tenant
定义企业标记名称空间以跟踪租户所有权:- 应用区间默认标记来自动对每个租户所在区间中的资源进行标记。
- 使用基于标记的策略进行自动访问控制。
步骤 3:创建 OCI IAM 组
为了确保在 OCI 多租户环境中进行安全且隔离的访问管理,将为以下项定义策略:
-
InfoSec 组:有权管理策略、标记、用户和组的安全管理员。
-
Terraform-Runner Group:用于管理 OCI 资源的基础设施即代码 (IaC) 执行组。
注:这些组和 OCI IAM 策略已按照常见 OCI IAM 策略部分中的说明创建。
步骤 4:为定义的组创建 OCI IAM 策略
租户资源访问策略:为了保持数据隔离,租户资源只能访问自己的密钥和对象存储。
Allow any-user to use object-family in compartment Storage where request.principal.compartment.tag.Enterprise.Tenant = target.resource.tag.Enterprise.Tenant
Allow any-user to use secret-family in compartment Tenants where request.principal.compartment.tag.Enterprise.Tenant = target.resource.tag.Enterprise.Tenant
如果租户实例原则也需要创建新对象的权限,则可以创建与租户名称同名的存储桶名称,并使用租户名称标记与存储桶名称进行比较。
Allow any-user to manage objects in compartment Storage where request.principal.compartment.tag.Enterprise.Tenant = target.bucket.name
示例 2:共享 OCI 存储模型中多服务数据访问的细粒度访问控制
步骤 1:全面了解客户的业务概览
XYZ Corp 是一家快速发展的企业,专门从事数字化转型解决方案。XYZ Corp 在多个地区开展业务,利用 OCI 托管关键应用、管理数据并确保团队之间的无缝协作。
客户要求:
- 特定租户的管理服务的所有实例都可以读取共享存储区间内的管理存储桶。
- 特定租户的销售服务的所有实例都可以读取共享存储区间内的销售存储桶。
- 特定租户的供应服务的所有实例都可以读取共享存储区间内的供应存储桶。
- 特定租户的所有实例都可以读取共享存储区间中的 Shared Services Buckets 。
- 特定租户的所有实例都可读取租户区间中该租户的密钥。
步骤 2:为工作量设计区间结构
现在,我们来了解 XYZ Corp 的区间结构。XYZ Corp 采用 OCI IAM 策略模型来扩展其 OCI IAM 策略。
-
特定于租户的区间创建:
- 为每个租户创建一个专用区间。
- 属于某个租户的所有资源都应预配在该租户的区间内。
-
企业标记名称空间:
- 使用以下标记键定义 Enterprise 标记名称空间:
Enterprise.Tenant
捕获租户名称。Enterprise.Service
捕获服务类型。例如,“管理”、“销售”、“供应”或“共享”。
- 使用以下标记键定义 Enterprise 标记名称空间:
-
租户区间的默认标记:
- 为每个租户区间配置区间默认标记,确保
Enterprise.Tenant
标记自动应用于区间内的所有资源,从而捕获租户名称。
- 为每个租户区间配置区间默认标记,确保
-
资源级别标记:
- 租户区间内的每个资源都应使用
Enterprise.Service
标记,以指定服务类型。例如,管理、销售、供应等。
- 租户区间内的每个资源都应使用
-
目标资源标记(存储桶和密钥):
- 使用以下项标记每个目标资源(例如存储桶和密钥):
Enterprise.Tenant
捕获租户名称。Enterprise.Service
捕获关联的服务类型。
- 使用以下项标记每个目标资源(例如存储桶和密钥):
-
标记共享存储桶:
- 对于共享存储桶资源,请设置
Enterprise.Service = 'Shared'
以指示跨服务可访问性。
- 对于共享存储桶资源,请设置
步骤 3:创建 OCI IAM 组
为了确保在 OCI 多租户环境中进行安全且隔离的访问管理,将为以下项定义策略:
-
InfoSec 组:有权管理策略、标记、用户和组的安全管理员。
-
Terraform-Runner Group:用于管理 OCI 资源的基础设施即代码 (IaC) 执行组。
-
动态组 AdminInstances:具有匹配规则
All {tag.Enterprise.Service.value=’Admin’}
。 -
动态组 SalesInstances:具有匹配规则
All {tag.Enterprise.Service.value=’Sales’}
。 -
动态组 SupplyInstances:具有匹配规则
All {tag.Enterprise.Service.value=’Supply’}
。
注:InfoSec 和 Terraform-Runner 组和 IAM 策略已按照常见 OCI IAM 策略部分中的上述说明创建。
步骤 4:为定义的组创建 OCI IAM 策略
租户资源访问策略:为了保持数据隔离,租户资源只能访问自己的密钥和对象存储。
Allow dynamic-group AdminInstances to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Admin’}
Allow dynamic-group SalesInstances to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Sales’}
Allow dynamic-group SupplyInstances to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Supply’}
Allow any-user to use object-family in compartment Storage where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Shared’}
Allow dynamic-group AdminInstances to use secret-family in compartment Tenants where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Admin’}
Allow dynamic-group SalesInstances to use secret-family in compartment Tenants where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Sales’}
Allow dynamic-group SupplyInstances to use secret-family in compartment Tenants where all {request.principal.compartment.tag.Enterprise.Tenant=target.resource.tag.Enterprise.Tenant, target.resource.tag.Enterprise.Service=’Supply’}
相关链接
确认
-
作者 — Chetan Soni(高级云工程师)
-
贡献者 — Kiran Thakkar(首席云架构师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Deep Dive into Tag based Oracle Cloud Infrastructure Identity and Access Management Policies
G30371-01
Copyright ©2025, Oracle and/or its affiliates.