注:

为您的 Oracle Cloud 租户设置初始管理员模型

简介

云安全性需要一个共同的责任模型。Oracle 作为云提供商,负责提供安全的基础设施和平台服务。您作为租户所有者,负责管理和控制对您在租户中创建的资源的访问。首次创建 Oracle Cloud Infrastructure (OCI) 租户时,有一个用户账户是租户管理员组的成员,用于授予对整个租户及其内所有资源的完全访问权限。

当您开始添加其他管理员、分配权限、创建资源并填充数据时,务必提前考虑您的安全模型,这样您就不必弄清楚如何清理道路上的问题。

本教程中介绍的安全模型是一个通用的设计,应该根据组织的特定安全策略和租户管理方法进行调整。Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 策略模型非常灵活,可以轻松调整或修改,以适应不同的设计。

目标

先决条件

任务 1:配置初始租户设置

要简化为租户访问创建基线模型的过程,并创建高级角色以在 OCI 中使用租户级别资源,可以使用 OCI CLI 脚本初始权利并从 Cloud Shell 运行。

下面提供了为以下核心访问功能集创建组和策略语句以及为所有 OCI 管理员提供基线访问级别的模板脚本。

这些策略的目的是创建适用于大多数客户的初始权利集。以下各节介绍了有关这些特定访问功能和潜在的其他策略的更多详细信息。

这些组应与 OCI IAM 身份域中已存在的角色一起使用;包括为环境配置验证机制的安全管理员;以及用于管理用户入职和分配的用户管理员。在外部身份管理解决方案中管理用户的部署中,用户管理员可能不需要。

如果您不熟悉 OCI IAM 策略语法,请查看 OCI IAM 文档以了解策略语句的结构。

基线访问脚本

注:此脚本仅适用于具有 IAM 域的 OCI 环境。一些较旧的租户在其环境中可能没有 IAM 域。要确认您的环境是否具有 IAM 域,请按照此处的说明进行操作。

#!/bin/bash

#Update the below with details for the environment
tenancy_ocid=ocid1.tenancy.oc1..aaaaaaaa....

#Group names
tenancy_manager_group=TenancyManagers
pol_admin_group=PolicyAdmins
sec_admin_group=SecurityAdmin
sec_analyst_group=SecurityAnalysts

#All_Users_Policy
oci iam policy create -c $tenancy_ocid --name "All_Users_Policy" \
--description "General purpose permissions intended for all users of the tenancy." \
--statements "[\"allow any-user to inspect tag-defaults in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to inspect limits in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to inspect tenancies in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to inspect compartments in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to read policies in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to read objectstorage-namespaces in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to read announcements in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to use cloud-shell in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\"]"

#Tenancy Managers
oci iam group create --name $tenancy_manager_group \
--description "Group for Tenancy Managers for OCI, who can manage tenancy-level constructs, such as budgets and regions."

oci iam policy create -c $tenancy_ocid --name "Tenancy_Managers_Policy" \
  --description "Policy statements which define the 'Tenancy Manager' role, which allows for managing tenancy-level configuration and objects." \
  --statements "[\"define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq\", \
                \"allow group ${tenancy_manager_group} to read usage-report in tenancy\", \
                \"allow group ${tenancy_manager_group} to read resource-availability in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage quotas in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage tenancies in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage objectstorage-namespaces in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage buckets in tenancy where request.operation = 'UpdateNamespaceMetadata'\", \
                \"allow group ${tenancy_manager_group} to manage usage-budgets in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage organizations-family in tenancy\", \
                \"allow group ${tenancy_manager_group} to {AUDIT_CONFIGURATION} in tenancy\", \
                \"endorse group ${tenancy_manager_group} to read objects in tenancy usage-report\"]"

#Policy Admins
oci iam group create --name $pol_admin_group \
--description "Group for Policy Administrators for OCI, who create and maintain IAM Policies and supporting resources."

oci iam policy create -c $tenancy_ocid --name "Policy_Admins_Policy" \
--description "Policy statements which define the 'Policy Admin' role, who create and maintain IAM Policies and supporting resources." \
--statements "[\"allow group ${pol_admin_group} to inspect groups in tenancy\", \
              \"allow group ${pol_admin_group} to read users in tenancy\", \
              \"allow group ${pol_admin_group} to manage groups in tenancy where target.group.name != 'Administrators'\", \
              \"allow group ${pol_admin_group} to manage compartments in tenancy\", \
              \"allow group ${pol_admin_group} to manage dynamic-groups in tenancy\", \
              \"allow group ${pol_admin_group} to manage domains in tenancy where request.permission != 'DOMAIN_RESOURCES_ADMINISTER'\", \
              \"allow group ${pol_admin_group} to manage network-sources in tenancy\", \
              \"allow group ${pol_admin_group} to manage policies in tenancy\", \
              \"allow group ${pol_admin_group} to manage tag-namespaces in tenancy\", \
              \"allow group ${pol_admin_group} to manage iamworkrequests in tenancy\"]"

#Security Admin
oci iam group create --name $sec_admin_group \
--description "Group for Security Admins for OCI, who can manage Cloud Guard and Data Safe"

oci iam policy create -c $tenancy_ocid --name "Security_Admins_Policy" \
  --description "Policy statements which define the 'Security Admin' role, which allows for managing Cloud Guard and Data Safe." \
  --statements "[\"allow group ${sec_admin_group} to inspect groups in tenancy\", \
                \"allow group ${sec_admin_group} to read repos in tenancy\", \
                \"allow group ${sec_admin_group} to manage cloud-guard-family in tenancy\", \
                \"allow group ${sec_admin_group} to manage data-safe in tenancy\"]"

#Security Analyst
oci iam group create --name $sec_analyst_group \
--description "Group for Security Analysts for OCI, which provides read access to resources in the tenancy, and the ability to use Cloud Guard"

oci iam policy create -c $tenancy_ocid --name "Security_Analysts_Policy" \
  --description "Policy statements which define the 'Security Analyst' role, which allows for read access to the tenancy, and the ability to work with Cloud Guard." \
  --statements "[\"allow group ${sec_analyst_group} to read all-resources in tenancy\", \
                \"allow group ${sec_analyst_group} to read audit-events in tenancy\", \
                \"allow group ${sec_analyst_group} to read cloud-guard-family in tenancy\", \
                \"allow group ${sec_analyst_group} to use cloud-guard-config in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-detectors in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-problems in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-detector-recipes in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-managed-lists in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-user-preferences in tenancy\"]"

任务 2:更新脚本

  1. 在您的环境中执行脚本之前,将脚本复制到文本编辑器以进行任何所需的调整。

  2. tenancy_ocid 变量更新为租户的正确值。可以从租户详细信息页面(位于 https://cloud.oracle.com/tenancy)或通过单击 OCI 控制台仪表盘中的租户名称获取租户 OCID。

    图中显示了租户概览屏幕,其中突出显示了 OCID 项

  3. 如果需要,更新组名称。组名称可能需要与命名方案保持一致,特别是如果有意从外部身份管理系统填充它们。

  4. 查看并更新策略语句以符合组织的要求。以下各节概述了修改这些策略语句以及其他策略语句的注意事项。

了解权限模型

概括地说,此脚本实施的权利设计将租户管理职责划分为更窄的角色,从而更好地反映环境中可能存在的不同类型的管理员。此外,它还旨在防止在租户级别运行的用户在专用 OCI 区间之外创建基础设施资源。

确保在区间中创建资源可以改进租户监管,因为可以在区间级别配置预算和资源限额。此外,它还可以简化用于管理这些资源的策略模型,因为区间可以在这些策略中直接引用。

此脚本旨在保守,仅向每个组授予最少的一组权限。根据您的组织打算如何使用 OCI,可能需要额外的权限。以下各节详细讨论脚本创建的权利,并包括可能更改的示例。

通过“所有用户”策略进行基线访问

在 OCI 中,用户没有访问权限,除非已配置策略来提供该访问权限。为了提高用户工作效率并为用户提供有关租户的有意义信息,该脚本将为所有用户创建一组基线访问。这些策略授权使用 Cloud Shell,以及读取公告和检查订阅区域的能力。

建议的策略还设计为帮助用户在需要额外的访问或资源时发出通知请求,即允许他们查看可能会限制其与租户交互(包括服务限制和策略)的对象。

通常,建议使用默认 OCI IAM 身份域进行 OCI 资源管理,不允许通过任何其他身份域进行身份验证的用户访问 OCI 控制台。因此,提供的脚本限制对通过默认域进行验证的用户的访问。您的安全设计可能支持使用多个身份域来管理 OCI 访问。例如,对于生产管理员,您可能具有生产域,对于非生产管理员,您可能具有非生产域。在这种情况下,可以修改基线访问策略中的条件来捕获每个域,如下所示:

... where all{ request.domain.name in ('<prod_domain_name>, '<non-prod_domain_name>'), request.principal.type = 'user' }

根据租户设计,您可能希望添加以下策略。

allow any-user to use tag-namespaces in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }

此策略允许所有用户对其可以修改的资源应用、更新或删除定义的标记。如果资源所有者应该能够为了自己的跟踪目的或为了访问管理目的修改标记,则可能需要这样做。如果您的设计将标记默认值用于成本跟踪或其他用途,则可能不合适。

租户管理器

租户管理器权利适用于对租户具有监管责任的用户,包括管理成本和预算以及租户订阅的区域。

脚本为租户管理员创建的策略可能需要进行细微调整才能提供对使用情况报告的访问。该脚本使用默认租户标识符进行成本分析,但是,某些租户可能使用替代租户标识符,具体取决于其状态。如果租户管理器无法访问使用情况报告,则应更新策略以使用 OCI 控制台的使用情况报告部分中显示的值。即,

图中显示了未授权的使用情况报告页,其中显示了所需的租户 ID。

策略管理员

可能最重要的一点是,便利不再使用“管理员”组,即指定“策略管理员”权利。这些权利由负责配置租户内的访问权利的管理员使用。在提供的脚本创建的模型中,策略管理员负责定义权利,但不将用户分配给这些组。用户管理权利通过在 IAM 域中分配“用户管理员”角色来授予。在某些部署中,可能会为单个管理员分配两个职责,具体取决于组织的安全设计。

注:“策略管理”权利的范围非常窄,但由于可以用来创建策略来授予环境内任何级别的访问权限,包括升级自己的访问级别,因此应将其视为高权限权利。

安全管理员

“安全管理员”角色适用于负责在环境中配置安全服务(例如 Cloud Guard 和数据安全)的用户。

您可能还希望添加以下语句,以使安全管理员能够配置租户级别的预警:

allow group SecurityAdmins to manage cloudevents-rules in tenancy where target.compartment.id = '<tenancy_ocid>'
allow group SecurityAdmins to use metrics in tenancy

这些功能允许安全管理员针对租户级别发生的事件配置预警,包括登录或创建 Cloud Guard 问题。这些事件将要求关联通知等操作有意义,但操作不需要位于根(租户)区间中。负责处理这些事件的服务可以改为位于用于其他安全用途的子区间中。例如,可以添加如下策略来授权为安全目的配置通知:

allow group SecurityAdmins to manage ons-family in compartment security_resources

安全分析师

“安全分析师”角色适用于负责查看 OCI 租户中的操作和事件的用户。要调查并验证与 Cloud Guard 问题相关的问题,安全分析师需要对整个租户的读取访问权限。

任务 3:使用 Cloud Shell 运行脚本

对脚本进行任何必要的修改后,可以在 OCI 控制台中使用 Cloud Shell 执行该脚本。

注:不需要 Cloud Shell,但提供了执行脚本的简单机制,因为该脚本预配置了 OCI CLI,并且使用登录用户的验证上下文。

  1. 从 OCI 控制台标头中的开发人员工具图标打开 Cloud Shell。

    图像显示“开发者工具”下拉列表,其中突出显示了“Cloud Shell”菜单项

    Cloud Shell 可能需要一些时间来初始化,特别是首次访问时。

  2. 将更新的脚本复制到 Cloud Shell 环境,例如使用 vi

    $vi policy_scaffold.sh
    

    vi 中,按 i 进入 [INSERT] 模式,然后将脚本的内容粘贴到文件中,再按 esc,然后按 :wq 保存并退出。

  3. 使脚本可执行,并运行该脚本以创建初始权利。

    $chmod +x policy_scaffold.sh
    $./policy_scaffold.sh
    
  4. 监视输出以确保正确创建了每个组和策略对象。可以手动解决问题,也可以通过调整后从脚本中重新执行单个 OCI CLI 命令来解决问题。

任务 4:分配用户和保护管理员组

脚本执行后,可以将用户分配到创建的组,为其授予关联的权利。

分配几个管理角色后,最好将 OCI 管理员组限制为紧急访问方案。OCI 至少需要为 "Administrators"(管理员)组分配一个用户账户,以便在身份断开或配置错误时恢复对租户的访问。否则,可能会创建用户无法分配访问权限的情况,并且您的所有管理员都可能被锁定在您的环境中。

有关详细信息和详细建议,请参阅在 Oracle Cloud Infrastructure 中管理紧急访问账户

后续步骤

构建一组初始租户管理角色后,这些角色可以用作基础来简化单个项目的角色创建,也可以扩展这些核心管理员的功能。

此处使用的模型有两个主要目标。首先,它允许从 "Administrators"(管理员)组中删除 OCI 环境的管理员,并使其成为更适合其特定职责的角色。其次,它阻止具有租户级别访问权限的用户在根区间中创建基础设施资源。创建其他策略时,建议维护此设计原则并仅创建针对根下方区间的策略。除了安全优势,这还允许简化成本跟踪和项目治理。

要了解详细信息,请查看 Oracle Cloud Infrastructure 安全指南

确认

更多学习资源

探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心