暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

学点有用的Oracle云知识

炬南山 2020-12-07
1291
前 言


在Oracle Cloud Infrastructure知识的学习过程中做了些笔记,方便记忆和随时翻看重点,于是就有了这个系列的文章。文章的框架和内容以Oracle认证教程和官方的OCI手册为基础,加入了个人理解以及一些与其他产品的比较。

现在OCI相关的中文资源比较少,所以根据个人理解译成了中文,加之云产品更新速度很快,因此请务必参看官方手册,以确保知识的准确性和时效性。

测试账号过期了,所以引用了很多官方文档或视频中的截图。

首先用两期篇幅介绍IAM相关内容。


IAM 概述


1、什么是 IAM



首先来看一下什么是IAM,IAM(Identity and Access Management Service)是 Oracle Cloud Infrastructure(或简称OCI)身份和访问管理服务的简称。通过IAM,我们就能够对云资源的访问进行权限方面的控制,可以控制某个用户组的访问类型,以及能够对哪些特定资源进行访问。

与Oracle数据库的访问控制机制类似,IAM也关注“谁可以使用资源”、“如何使用资源”与“使用程度”三个大的方面。但同时,IAM 增加了很多与云相关的概念,并且与访问控制紧密相关,例如:Compartment、Tenancy、Resource、Pincipal等,为了更好地理解,本节先对这些概念进行简要说明。


2、一些概念




  • 资源(RESOURCE

IAM 的目的就是控制对资源的访问,那么资源又是什么呢?所谓资源就是我们与Oracle Cloud交互时创建和使用的云对象,例如:计算实例、块存储卷、虚拟云网络(VCN)、子网、路由表等,它们分别以资源和云对象的形式表示。每个OCI资源都有一个唯一的标识符,即Oracle分配的标识符,称为Oracle Cloud ID,有时也称为OCID。其它厂商的云产品也有类似概念,比如:AWS的“资源标识符” ARN。

  • 用户(USER

所谓用户就是一个组织中(可以把“组织”理解为一个企业),管理或使用该组织Oracle Cloud Infrastructure资源的个人员工或系统。当注册OCI帐户时,第一个IAM用户是默认管理员,默认管理员设置其他IAM用户和组。用户可以实施启动实例、管理远程磁盘、使用虚拟云网络等操作。一个用户可以具有一个或多个IAM凭据。

对于用户来讲,强制执行所谓最小特权的安全原则,也就是说,第一,用户没有权限,直到他们被分配到一个或多个组里面。第二,组至少具有一项策略,该策略可以应用于tenancy(即整个帐户)或特定的Compartment。上述这两个条件必须满足,否则,用户本身无法在Oracle Cloud Infrastructure中执行任何操作。

  • 组(GROUP

什么是Group(组)?“组”的基本含义就是:需要对特定资源或隔离专区Compartment进行相同类型访问的一组用户的集合。Group是个逻辑上的概念,是一组用户的集合,他们都需要对特定资源集进行相同类型的访问,同一用户可以是多个组的成员,看起来很像Oracle数据库里面的Group。

我们可以创建任何类型的组,可以为数据库管理员,存储管理员,虚拟云网络管理员创建组,甚至可以为租户(Tenancy),隔离专区(Compartments)或区域(Regions)相关的组创建组。

  • 隔离专区(Compartments

Compartments是Oracle Cloud Infrastructure的基本组成部分,用于组织和隔离OCI上的云资源,它是一个逻辑上的概念,是一组相关资源的集合。Compartments为我们带来很多管理上的便利,例如:可以使用Compartments来衡量资源的使用情况,并方便计费核算;可以通过使用策略来控制对一组资源的访问;可以通过将一个项目或业务单位的资源与另一个项目或业务单位分开来实现资源的隔离,一种常见的方法是为组织中的每个主要部分创建一个隔离专区,比如开发部门、测试部门、财务部门等。

举例来说,我们可以将一个部门所使用的所有资源(计算实例、存储、网络等等)放在一个Compartment里面,而另外一个部门的资源放在另外一个Compartment里面,以此来方便管理和计费操作。

  • 租户(TENANCY

Tenancy是OCI自动创建的,包含了一个组织中所有的Oracle Cloud Infrastructure资源,也就是Root Compartment(根隔离专区)。用户、组、隔离专区和某些策略等IAM实体将直接在租户中创建,也可以将策略放入租户中的隔离专区。其他类型的云资源(例如:实例、虚拟网络、块存储卷等)将放置在我们创建的隔离专区中。

  • 管理员组

当一个组织注册Oracle帐户和Identity Domain时,Oracle会设置一个默认管理员该帐户,这是第一个IAM用户,并由这个用户负责初始设置其他的管理员。Tenancy附带一个名为“Administrators”的组,默认管理员为自动属于该组。这个组无法删除,并且该组中至少必须有一个用户。

Tenancy还自动生成一个策略,该策略使Administrators组可以访问所有Oracle Cloud基础结构API操作以及租户中的所有云资源,这个策略是不能被更改或删除的。放入“Administrators”组的所有其他用户将拥有对所有服务的完全访问权限,表示他们可以创建和管理IAM资源,例如组、策略和隔离专区,可以创建和管理云资源,例如虚拟云网络(VCN)、实例、块存储卷以及任何Oracle Cloud Infrastructure资源。

所以,管理员组是一个权限非常大的用户组,需要特别注意其中成员的管理

  • Principals(委托人、主体 

Principals又分为两种,一种是IAM用户(用户、组),也就是登录并访问云环境的用户。此外,还有一种特殊的Principal,称为Instance Principal,它不同于普通计算实例或数据库实例,Instance Principal允许实例和在这些实例上运行的应用程序对其他OCI服务进行API调用。假设我们正在运行一个应用程序,它需要去访问存储层,而存储服务需要对应用程序进行身份验证,Instance Principal可以让我们进行这些API调用,而无需配置用户凭据或在实例上保留配置文件。

  • 授权(Authorization

简单地说,通过了身份验证之后,是授权规定了Principal可以执行哪些操作。授权是通过策略提供特定的权限来定义的,然后将这些策略与Principal相关联。 

策略也应该遵循最小特权的安全性原则,默认情况下,不允许用户执行任何操作。策略不能附加到用户本身,而只能附加到组。

策略由一个或多个语句组成,其格式比较容易理解。例如:

从这里也可以看到,允许的主体是一个组,也就是说策略在组级别上运行,而不在用户级别。

此外,我们可以看到没有“拒绝”策略,因为基于最小特权的安全原则,在默认情况下,所有内容都被拒绝。





3、OCI资源访问流程



如下图所示,在身份和访问管理服务(IAM)相关的框架中,资源访问的流程大致如下:

  • 首先看Principals(发起请求的对象),可以认为他们是一组用户或实例,就是这些用户或实例将通过IAM机制访问一组对应的资源。

  • 对于Principals来讲,访问资源需要特定的权限。在通过身份验证之后,就到了授权环节。

  • 授权是通过定义策略中可以执行哪些特定的操作,并且赋予Principals来实现的。

  • 策略(Policies)就是在访问的过程中有哪些要求和规则限制,这些策略作用于Compartments( 隔离专区)上。

  • 资源在逻辑上被划分到Compartments中,策略作用于Compartments,我们将策略附加到组或实例,以便这些用户可以访问相应的资源。




IAM Policies IAM 策略


1、IAM策略的语法



策略可以指定谁能够访问我们所拥有的OCI资源以及如何访问。如前面所描述的,策略仅允许组(group)以特定方式使用特定隔离专区(Compartment)中的特定资源类型。

一般步骤如下:

1. 定义用户、组,以及一个或多个用来保存组织的云资源Compartment

2. 创建一个或多个策略。

3. 根据需要使用的Compartment和资源将用户分为适当的组。

4. 为用户提供他们访问控制台并使用Compartment所需的一次性密码。 

IAM策略的语法规则类似如下:

先举几个例子看一下:

更多的场景参见:OCI USER GUIDE -> IAM -> Common Policies 章节

正如我们在IAM 概述一节中提到的,由于默认情况下所有访问请求都被拒绝,所以这里并没有表示拒绝的语法。因此,我们必须明确地给出允许策略。否则,用户在Oracle Cloud Infrastructure环境中什么事情都做不了。

再看策略的几个主要组成部分:

• subject

• verb

• resource-type

• location

这里的subject就是用户所在的组,也就是组的名称。

动词(Verbs)有四种类型的动词,inspect/read/use/manage(检查、读取、使用与管理)。

location可以是Compartment或者Tenancy。

location部分列举如下:

resource-type部分指定了资源的类型,列举如下:


2、Verbs and Permissions 动词与权限

权限是授权的最小单位,它控制用户对资源执行操作的能力。权限的定义是通过使用策略来实现的,在编写策略的过程中,向组授予对特定访问权限时需要指定动词和资源类型。动词和资源类型都是已经预定义的,目的是在涉及多个访问权限时简化授权的过程。

Verbs 动词

动词包括如下四种:

检查 (inspect)表示可以列出资源列表,但无法访问任何可能属于该资源的信息或者用户指定的元数据。

• 读取(read)在检查(inspect)的基础上提供了一些额外的功能,包括:获取实际资源的元数据,以及资源本身。

• 使用(use)包括读取以及使用现有资源的能力,包括更新资源的能力。但是,在某些“更新”操作实际上包含了“创建”操作的情况下(例如,UpdatePolicy,UpdateSecurityList等),此时“ update” 功能仅适用于manage动词。通常,use不包含创建或删除该类型资源的功能,这些时候需要用到manage

• 管理(manage)包含该资源的所有权限。


权限与动词的关系

权限名称是由大写字母和下划线组成的。

按照 检查->阅读->使用->管理的顺序,访问级别逐步增加,授予的权限也逐步累积。下面的表格显示了Volume资源类型的每个动词附带的权限。 例如:定义一个策略,允许某个组"检查"Volume,实际上就是使该组具有名为VOLUME_INSPECT的权限。


Resource-type 资源类型

Oracle还定义了可以在策略中使用的Resource-type(资源类型),OCI中有两种资源类型:一种是单独资源类型(Individual resource type),第二种是聚合资源类型(Aggregate resource-type)。

从名称可以看出,每个单独的类型代表一种特定的资源类型。例如,VCN资源类型专门用于虚拟云网络(VCN)。

此外,为了简化策略的编写,多个被一起管理的单独资源类型会被组合在一起成为资源家族。聚合资源类型是OCI中一类或一组相关的资源,例如,虚拟网络类型将与VCN的管理有关的各种类型(例如,vcn,子网,路由表,安全列表等)汇集在一起。

当我们想让某个人访问OCI中的所有内容,最简单的方法是将all-resources的这种资源类型分配给他,也就意味着OCI中的所有资源都可以访问。当然,很多时候我们不能那么粗放的分配权限,还是要针对不同的用户授予相应的访问权限,需要进行细化。这个时候,我们就可以分配细致一些的权限,例如:可以按照数据库家族(database-family),实例家族(instance-family)这种来进行分配。

如果我们需要非常精细的配置,就可以按照单个资源类型来进行分配,比如VCN,子网,路由表之类。




3、高级策略



Conditions

这里所谓的高级主要体现在策略语法的 where conditions部分,可以提供授予更精细的访问权限。每个条件都包含一个或多个预定义变量,可以在策略语句中为其指定值。当有人请求访问某个资源时,如果满足策略中的条件,则评估为true,并且允许该请求。如果不满足条件,则结果为false,并且不允许该请求。

有两种类型的变量:

1、与请求本身相关的变量,

2、与请求中资源相关的变量,也称为目标。

变量的名称相应地以请求或目标为前缀,后跟一个句点。 

需要注意的是:条件匹配是区分大小写的,所以要特别注意类似"BucketA""bucketA"是不同的。

单个条件的句法:variable = <value>,或variable != <value>

多个条件的句法:any|all {<condition>,<condition>,...}

举个例子:


Location

通过名称或OCID指定一个Compartment Compartment 路径,也可以简单地指定Tenancy 以覆盖整个Tenancy 

策略可以驻留(附加)在Tenancy或是Compartments中。

策略的声明中必须指定Location。如果要将策略附加到Compartment,则在创建策略时必须位于该Compartment中。

语法如下:

举几个例子:



4、Policy Inheritance 策略的继承



继承是策略的一项基本特性,具体来说就是一个compartment从它的父级compartment中继承所有的策略。一个例子就是Tenancy默认提供了一个Administrators 组,并有一个内置策略,使Administrators组可以在Tenancy中执行任何操作。就是这一条:

Allow group Administrators to manage all-resources in tenancy

再举个继承的例子:

Compartment的层级为:A->B->C,适用于CompartmentA的策略也适用于BC

策略的继承有点特殊,而且与Compartment的迁移有密切的关联,将在下一节详述。






参考资料

主要包括:OCI User GuideOracle官方教程

OCI User Guide 

https://docs.cloud.oracle.com/en-us/iaas/pdf/ug/OCI_User_Guide.pdf

Become OCI Architect (Associate)

https://learn.oracle.com/ols/learning-path/become-oci-architect-associate/35644/75658

Become OCI Architect (Professional)

https://learn.oracle.com/ols/learning-path/become-oci-architect-professional/35644/35802









文章转载自炬南山,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论