.. _RBC: RBC文档 ^^^^^^^ **主题** - RBC简介 - 存储桶策略 1.RBC简介 --------- 默认情况下,所有 NOS 资源都是私有的,包括存储桶、对象和相关子资源 (例如, website 配置)。只有资源拥有者,即创建该资源的 NOS 账户可以访问该资源。资源拥有者可以选择通过编写访问策略授予他人访问权限。 NOS提供的访问策略选项大致可分为基于资源的策略和用户策略两类。附加到资源 (存储桶和对象) 的访问策略称为基于资源的策略。例如,存储桶策略和访问控制列表 (ACL) 就是基于资源的策略。您也可以将访问策略附加到您账户中的用户,这些策略称为用户策略。您可以选择使用基于资源的策略、用户策略或这些策略的某种组合来管理您的NOS资源权限。本文提供了对资源的管理(\ **存储桶策略**),但是也会涉及用户管理,用户管理可以参考\ `子账号权限管理 `__\ 。 2.存储桶策略 ------------ 桶存储策略作为JSON文档存储在 NOS 中,作为基于资源的策略,附加到桶上。 2.1 存储桶策略简介 ~~~~~~~~~~~~~~~~~~ 包含一下元素: - Version - 用来标识当前policy都可以支持什么操作,目前的版本为2018-06-25 - Id - 可以填写有意义的标识,不填也可以 - Sid - Statement的id - Effect- 策略允许还是拒绝访问 - Action - 策略允许或拒绝的操作的列表,如果只有一个action,不需要使用数组的形式 - Principal - 元素用于指定被允许或拒绝访问资源的用户,如果只有一个用户,不需要使用数组的形式 - Resource - 作为操作目标的资源的列表, 如果只有一个资源,不需要使用数组的形式 - Condition (可选) – 策略在哪些情况下授予权限 下面是一个简单的demo .. code:: json { "Version": "2018-06-25", "Id": "Policy1528352061981", "Statement": [ { "Sid":"test", "Effect": "Allow", "Action": ["nos:ListBucket"], "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Resource": ["nrn:nws:nos:::example_bucket"], "Condition":{ "IpAddress": {"nws:SourceIp": "203.0.113.0/24"} } } ] } 2.2 各个策略元素的解释 ~~~~~~~~~~~~~~~~~~~~~~ 2.2.1 Sid >>>>>>>>>>>>>> ``Sid`` (声明 ID) 是您针对策略语句提供的可选标识符。您可以为声明数组中的每份声明指定 \ ``Sid`` 值,如果指定,那么在当前策略中必须是唯一的。 2.2.2 Effect >>>>>>>>>>>>>> ``Effect`` 元素是必需具备的元素,用于指定声明所产生的结果是“允许”还是“显式拒绝”。``Effect`` 的有效值为 ``Allow`` 和 ``Deny``\ 。 在默认情况下,将拒绝访问资源。如要允许访问资源,您必须将 \ ``Effect`` 元素设置为 ``Allow``\ 。如果要拒绝结果,您需要将 \ ``Effect`` 元素设置为 ``Deny``\ 。 2.2.3 Action >>>>>>>>>>>>>>>> NOS定义了可在策略中指定的一组权限。这些是关键字,其中每一个均映射到特定NOS操作,包含对象的操作和桶子资源的操作。 2.2.3.1 对象操作权限 ::::::::::::::::::::::::::::: +--------------------------------+-------------------------------------------------------------------------------------------------+ | Action | NOS操作,API对应的接口 | +================================+=================================================================================================+ | nos:PutObject | PUT Object、POST Object、Initiate Multipart Upload、Upload part、Complete Multipart Upload、PUT Object - Copy,PUT Object Move| +--------------------------------+-------------------------------------------------------------------------------------------------+ | nos:GetObject | GET Object、HEAD Object | +--------------------------------+-------------------------------------------------------------------------------------------------+ | nos:DeleteObject | DELETE Object | +--------------------------------+-------------------------------------------------------------------------------------------------+ | nos:AbortMultipartUpload | Abort Multipart Upload | +--------------------------------+-------------------------------------------------------------------------------------------------+ | nos:ListMultipartUploadParts | List Multipart Uploads | +--------------------------------+-------------------------------------------------------------------------------------------------+ | nos:ListBucket | LIST Object | +--------------------------------+-------------------------------------------------------------------------------------------------+ 以下存储桶策略示例授予用户 (Dave) nos:PutObject权限: .. code:: json { "Version":"2018-06-25", "Id":"Policy1528352061981", "Statement":[ { "Sid":"test", "Effect":"Allow", "Principal":{ "nws":[ "nrn:nws:iam::Dave-productid:root" ] }, "Resource":[ "nrn:nws:nos:::examplebucket" ], "Action":[ "nos:PutObject" ] } ] } 2.2.3.2 桶子资源操作权限 ::::::::::::::::::::::::::::: +---------------------------+------------------------------------------------------------------------+ | Action | 涉及的 NOS操作 | +===========================+========================================================================+ | nos:DeleteBucketPolicy | DELETE Bucket Policy(只有桶的属主本身才有权限,不能授权给其他用户) | +---------------------------+------------------------------------------------------------------------+ | nos:DeleteBucketWebsite | DELETE Bucket Website | +---------------------------+------------------------------------------------------------------------+ | nos:GetBucketAcl | GET Bucket acl | +---------------------------+------------------------------------------------------------------------+ | nos:GetBucketCORS | GET Bucket cors | +---------------------------+------------------------------------------------------------------------+ | nos:GetBucketLocation | GET Bucket location | +---------------------------+------------------------------------------------------------------------+ | nos:GetBucketLogging | GET Bucket logging | +---------------------------+------------------------------------------------------------------------+ | nos:GetBucketPolicy | GET Bucket Policy(不能给其他的用户,可以赋给子账号) | +---------------------------+------------------------------------------------------------------------+ | nos:GetBucketWebsite | GET Bucket Website | +---------------------------+------------------------------------------------------------------------+ | nos:PutBucketAcl | PUT Bucket acl | +---------------------------+------------------------------------------------------------------------+ | nos:PutBucketCORS | PUT Bucket cors、DELETE Bucket cors | +---------------------------+------------------------------------------------------------------------+ | nos:PutBucketLogging | PUT Bucket logging | +---------------------------+------------------------------------------------------------------------+ | nos:PutBucketPolicy | PUT Bucket Policy(不能给其他的用户,可以赋给子账号) | +---------------------------+------------------------------------------------------------------------+ | nos:PutBucketWebsite | PUT Bucket website | +---------------------------+------------------------------------------------------------------------+ 以下用户策略授予用户 Dave 对 examplebucket 存储桶的 nos:GetBucketAcl 权限。 .. code:: json { "Version":"2018-06-25", "Id":"Policy1528352061981", "Statement":[ { "Sid":"test", "Effect":"Allow", "Principal":{ "nws":[ "nrn:nws:iam::Dave-productid:root" ] }, "Resource":[ "nrn:nws:nos:::examplebuck" ], "Action":[ "nos:GetBucketAcl" ] } ] } **注** 可以是用nos:\*来表示所有的nos操作 2.2.4 Principal >>>>>>>>>>>>>>>>> 元素用于指定被允许或拒绝访问资源的用户 使用格式为: "Principal" : {"nws":["nrn:nws:iam::productid:relative-id"]} relative-id: - 如果是根用户,使用root - 如果是指定某个子账号,使用user/username 如果要授权给所有的用户,使用 "nws":["\*"] nws - Netease Web Service,用来指明其value要使用什么样的格式 2.2.5 Resource >>>>>>>>>>>>>>>>>>>>> 2.2.5.1 以下是用于标识 网易云中任何资源的资源名称常用格式 ::::::::::::::::::::::::::::::::::::::::::::::::::::: :: nrn:partition:service:region:account-id:relative-id - nrn - netease resource name - partition - The partition that the resource is in. For standard nws regions, the partition is \ ``nws``, If you have resources in other partitions, the partition is nws-\ **partitionname**. For example, the partition for resources in the hz region is \ ``nws-hz``. - *service* - The service namespace that identifies the NWS product(for example, nos) - *region* - The region the resource resides in. Note that the ARNs for some resources do not require a region, so this component might be omitted. - *account-id* - The ID of the NWS account that owns the resource, fos nos, this component might be omitted - *relative-id* - The content of this part of the NRN varies by service. It can be a bucket-name or a bucketname/object. You can use wild card. 对于nos,使用的格式为: ​ nrn:nws:nos:::bucket\_name ​ nrn:nws:nos:::bucket\_name/key\_name 对应region和account-id中的omitted,因为nos给定bucket\_name后,其region和account-id是唯一确定的 2.2.5.2 demo ::::::::::::::::::::::::::::: - examplebucket 存储桶中的 /developers/design\_info.doc 对象。 ​ nrn:nws:nos:::examplebucket/developers/design\_info.doc - 您可将通配符作为资源一部分.您可在relative-id分块中使用通配符 (\* 和 ?)。星号 (*) 表示 0 个或多个字符的任意组合,问号 (?) 表示任何单个字符。您可在每个分块中使用多个 * 或 ? 字符,但通配符不能跨分块。 - 此 ID 块使用通配符 \* 来标识 examplebucket 存储桶中的所有对象。 ​ nrn:nws:nos:::examplebucket/\* - 此ID 块同时使用通配符 \* 和 ?。它标识存储桶 (例如 example1bucket、example2bucket、example3bucket 等) 中的所有对象 ​ arn:aws:s3:::example?bucket/\* - 您也可以在resource中使用策略变量。在策略评估时,这些预定义变量被它们的相应值替换。假设您将存储桶组织为一个文件夹的集合,每个用户拥有一个文件夹。文件夹名称与用户名称相同。要为他们的文件夹授予用户权限,您可以在资源中指定\ **策略变量**\ : ​ nrn:nws:nos:::bucket\_name/aa/${nws:username} ​ 在运行时,当评估此策略时,资源中的变量 ${nws:username} 替换为发出此请求的用户名称。 2.2.5.3 **特殊字符** ::::::::::::::::::::::::::::: 有几个特殊预定义策略变量具有固定值,可用于表示字符 (这些字符本身有特殊的含义)。如果这些特殊字符是您尝试匹配的字符串的一部分,而您原样插入这些字符,则不能正确进行解释。例如,在字符串中插入 \* 星号会解释为与任何字符匹配的通配符 (而不是解释为文本 \*)。这种情况下,可以使用以下预定义策略变量: - ${\ *} - 在需要星号字符 * 的位置使用。 - ${?} - 在需要问号字符 ? 的位置使用。 - :math:`{`} - 在需要美元符号字符 $ 的位置使用。 在任何可以使用常规策略变量的字符串中,都可以使用这些预定义策略变量。 2.2.5.4 **策略变量** ::::::::::::::::::::::::::::: 下述condition中的条件键及为策略变量 2.2.6 Condition >>>>>>>>>>>>>>>>>>>>> 2.2.6.1 概述 ::::::::::::::::::::::::::::: 访问策略语言可使您在授予权限时指定条件。在 Condition 元素 (或 Condition 块) 中,可以指定策略生效的条件。在可选的 Condition 元素中,您创建的表达式应使用布尔值运算符 (等于、小于等),以使您指定的条件与请求中的值相匹配。例如,当授予用户上传对象的权限时,存储桶拥有者可通过添加 StringEquals 条件要求此对象可公开读取。 2.2.6.2基本语法解析 ::::::::::::::::::::::::::::: .. figure:: rbc/condition-semantic.png :alt: 一个Condition子句可以包含多个条件,每个条件由运算符和键值对组成。键值对可以有大于等于一个值。 2.2.6.3 鉴权规则 ::::::::::::::::::::::::::::: |image0| '''''''' 2.2.6.4 可用条件建 ::::::::::::::::::::::::::::: - 在nws中可以使用的键 - nws:CurrentTime 这可用于检查日期和时间的条件。 - nws:userid 用户的productId - nws:username 用户名 - nws:SourceIp 源ip,支持ip块 - nws:SecureTransport 是否是用https - nws:UserAgent 用户的agent - nws:sourceVpce vpc endpoint - nws:sourceVpc vpc - 用在NOS访问策略中指定条件的预定义键 - nos:x-nos-acl 桶的acl - nos:x-nos-copy-source 拷贝源 - nos:x-nos-server-side-encryption 服务端加密 - nos:delimiter delimiter - nos:max-keys 最大的key值,listObject时使用 - nos:prefix ListObject中的prefix - 签名相关的aws键,用于s3请求时(nos兼容aws s3) - aws:signatureversion - aws:authType - aws:signatureAge - aws:x-amz-content-sha256 2.2.6.5 针对对象操作的条件键 ::::::::::::::::::::::::::::: 下表显示了可对哪些 NOS操作使用哪些 NOS条件。在该表之后提供有策略示例。注意下面有关下表中所述的 NOS特定条件键的内容: - 这些条件键名称的前缀为 nos:。例如:nos:x-nos-acl。 - 每个条件键均映射到可设置条件的 API 所允许的相同名称请求标头。即,这些条件键指定同名请求标头的行为。例如: ​ 条件键 nos:x-nos-acl 可用于对 nos:PutBucket 权限授予条件权限,它定义 PUT Bucket API 支持的 x-nos-acl 请求标头的行为。 +-----------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 许可 | 适用的条件建 | 描述 | +=================+====================================+================================================================================================================================================================================================================================================================+ | nos:PutObject | nos:x-nos-copy-source | 要复制对象,请使用 PUT Object API 并使用 x-nos-copy-source 标头指定源。通过使用此键,存储桶拥有者可将复制源限定到特定存储桶、存储桶中的特定文件夹,或者存储桶中的特定对象。 | +-----------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | nos:PutObject | nos:x-nos-server-side-encryption | 上传对象时,可以使用 x-nos-server-side-encryption 标头请求 nos在保存对象时适用服务端加密。 当授予 nos:PutObject 权限时,存储桶拥有者可使用此键添加条件,要求用户在请求中指定此标头。存储桶拥有者可通过授予此类条件权限,确保在保存用户上传的对象时进行加密。 | +-----------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ **demo** 在 PUT Object 请求中,如果指定了源对象,则为一个复制操作 (请参阅 PUT Object - Copy)。因此,存储桶拥有者可授予用户复制限定于此源上的对象的权限。例如: - 允许仅从 sourcebucket 存储桶复制对象。 - 允许从 sourcebucket 存储桶复制对象,并仅复制键名称前缀开头为 public/ 的对象。例如 sourcebucket/public/\* - 只允许从 sourcebucket 复制特定对象;例如 sourcebucket/example.jpg。 下存储桶策略授予用户 Dave nos:PutObject 权限,此权限要求他复制对象时需满足以下条件:请求中包含 nos:x-nos-copy-source 标头且标头值指定 /examplebucket/public/\* 键名称前缀。 .. code:: json { "Version": "2018-06-25", "Id": "Policy1528352061981", "Statement":[ { "Sid":"cross-account permission to user in your own account", "Effect":"Allow", "Principal":{ "nws":[ "nrn:nws:iam::dave-productid:root" ] }, "Action":[ "nos:PutObject" ], "Resource":[ "nrn:nws:nos:::examplebucket/*" ] }, { "Sid":"Deny your user permission to upload object if copy source is not /bucket/folder", "Effect":"Deny", "Principal":{ "nws":[ "nrn:nws:iam::dave-productid:root" ] }, "Action":[ "nos:PutObject" ], "Resource":["nrn:nws:nos:::examplebucket/*"], "Condition":{ "StringNotLike":{ "nos:x-nos-copy-source":"examplebucket/public/*" } } } ] } 2.2.6.6 针对存储桶操作的条件键 ::::::::::::::::::::::::::::: +--------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 许可 | 适用的条件建 | 描述 | +====================+============================================================================================================================+================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ | nos:ListBucket | nos:prefix | 通过使用此条件键,可将 Get Bucket (列出对象) API 的响应限定于具有特定前缀的键名称,请参阅 GET Bucket (列出对象)。Get Bucket (列出对象) API 会返回指定存储桶中的对象键列表。此 API 支持 prefix 标头,仅检索具有特定前缀的对象键。此条件键与 prefix 标头相关。例如,NOS 控制台支持使用键名称前缀的文件夹概念。因此,如果您有键名称为 public/object1.jpg 和 public/object2.jpg 的两个对象,则该控制台会在 public 文件夹下显示这些对象。如果使用这些前缀组织对象键,则可授予 nos:ListBucket 权限,条件为允许用户获得具有特定前缀的键名称的列表。 | +--------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | nos:ListBucket | nos:delimiter | 如果使用前缀和分隔符组织对象键名称,则可使用此条件键来要求用户在 Get Bucket (列出对象) 请求中指定 delimiter 参数。在这种情况下,NOS 响应返回的对象键列表将按通用前缀分组。 | +--------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | nos:ListBucket | nos:max-keys | 通过使用此条件,要求用户指定 max-keys 参数可限制 NOS 响应 Get Bucket (List Objects) 请求所返回的键数。默认情况下,API 返回最多 1000 个键名称 | +--------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | nos:PutBucketAcl | nos:x-nos-acl (针对标准 ACL 权限),可以是:public-read,private | PUT Bucket Acl API 支持 ACL 特定的Header。可使用这些条件键来要求用户在请求中设置这些标头。 | +--------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ **demo** 存储桶拥有者可限定用户仅列出存储桶中特定文件夹的内容。如果存储桶中的对象按键名称前缀组织,这非常有用。NOS 控制台可使用这些前缀显示文件夹的层级结构. 此条件只允许用户列出examplefolder目录,就算用户拥有其他的权限,也不能List其他目录的对象。 .. code:: json { "Version": "2018-06-25", "Id": "Policy1528352061981", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal":{ "nws":[ "nrn:nws:iam::productid:root" ] }, "Action":[ "nos:ListBucket" ], "Resource":[ "nrn:nws:nos:::examplebucket" ], "Condition":{ "StringEquals":{ "nos:prefix":"examplefolder" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal":{ "nws":[ "nrn:nws:iam::productid:root" ] }, "Action":[ "nos:ListBucket" ], "Resource":[ "nrn:nws:nos:::examplebucket" ], "Condition":{ "StringNotEquals":{ "nos:prefix":"examplefolder" } } } ] } 2.2.6.7 条件运算符 ::::::::::::::::::::::::::::: 条件运算符是条件的“动词”形式,可指定执行的比较类型。条件运算符可分为以下类别: - 字符串 - 数值 - 日期和时间 - 布尔值 - IP 地址(目前仅支持该运算符) 字符串条件运算符 利用字符串条件运算符,您可以构建基于键与字符串值的对比来限制访问的 Condition 元素。 +-----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 条件运算符 | 说明 | +=============================+===============================================================================================================================================================================================================================================================================================================================================================================+ | StringEquals | 精确匹配,区分大小写 | +-----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | StringNotEquals | 否定匹配 | +-----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | StringEqualsIgnoreCase | 精确匹配,忽略大小写 | +-----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | StringNotEqualsIgnoreCase | 否定匹配,忽略大小写 | +-----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | StringLike | 区分大小写的匹配。此值可包括字符串中任何一个多字符匹配的通配符 (*) 或单字符匹配的通配符 (?)。字符串中的任何地方。注意如果键包含多个值,可使用集合运算符限定 StringLike - ForAllValues:StringLike 和 ForAnyValue:StringLike。 \| \| StringNotLike \| 不区分大小写的无效匹配。此值可包括字符串中任何一个多字符匹配的通配符 (*) 或单字符匹配的通配符 (?)。字符串中的任何地方。 | +-----------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ example: 以下声明包含一个 Condition 元素,该元素采用 StringEquals 条件运算符和 nos:UserAgent 键来指定在请求的用户代理标头中必须包含特定值。 .. code:: json { "Version": "2018-06-25", "Statement": { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:GetObject"], "Resource": ["comb:nos:examplebucket/*"], "Condition": {"StringEquals": {"nos:UserAgent": "Example Corp Java Client"}} } } 以下示例使用 StringLike 条件运算符执行与策略变量的字符串匹配来创建策略。该策略允许对 nos 存储桶执行指定操作,前提是 nos:prefix 与任一指定模式相匹配。 .. code:: json { "Statement": [ { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": [ "nos:ListAllMyBuckets", "nos:GetBucketLocation" ], "Resource": ["comb:nos:*"} }, { "Sid":"test", "Effect": "Allow", "Action": ["nos:ListBucket"], "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Resource": ["comb:nos:BUCKET-NAME"], "Condition": {"StringLike": {"nos:prefix": [ "", "home/", "home/${nos:username}/" ]}} }, { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:*"], "Resource": [ "comb:nos:BUCKET-NAME/home/${nos:username}", "comb:nos:BUCKET-NAME/home/${nos:username}/*" ] } ] } 数字条件运算符 利用数字条件运算符,您可以构建基于键与整数或小数值的对比来限制访问的 Condition 元素。 +----------------------------+--------------------+ | 条件运算符 | 说明 | +============================+====================+ | NumericEquals | 匹配 | +----------------------------+--------------------+ | NumericNotEquals | 否定匹配 | +----------------------------+--------------------+ | NumericLessThan | “小于”匹配 | +----------------------------+--------------------+ | NumericLessThanEquals | “小于或等于”匹配 | +----------------------------+--------------------+ | NumericGreaterThan | “大于”匹配 | +----------------------------+--------------------+ | NumericGreaterThanEquals | “大于或等于”匹配 | +----------------------------+--------------------+ example: 下声明包含一个 Condition 元素,该元素使用 NumericLessThanEquals 条件运算符与 nos:max-keys 键来指定请求者一次最多可在 example\_bucket 内列出 10 个对象。 .. code:: json { "Version": "2018-06-25", "Statement": { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:ListBucket"], "Resource": ["comb:nos:example_bucket"], "Condition": {"NumericLessThanEquals": {"nos:max-keys": "10"}} } } 日期条件运算符 :: 利用日期条件运算符,您可以构建基于键与日期/时间值的对比来限制访问的 Condition 元素。您同时使用这些条件运算符与 nos:CurrentTime 键或 nos:EpochTime 键。您必须指定日期/时间值,且其中一个 W3C 实现要采用 ISO 8601 日期格式或新纪元 (UNIX) 时间格式。 **注意** :: 日期条件运算符不允许使用通配符。 +-------------------------+--------------------+ | 条件运算符 | 说明 | +=========================+====================+ | DateEquals | 匹配特定日期 | +-------------------------+--------------------+ | DateNotEquals | 否定匹配 | +-------------------------+--------------------+ | DateLessThan | 在特定日期和时间 | +-------------------------+--------------------+ | DateLessThanEquals | 在特定日期和时间 | +-------------------------+--------------------+ | DateGreaterThan | 在特定日期和时间 | +-------------------------+--------------------+ | DateGreaterThanEquals | 在特定日期和时间 | +-------------------------+--------------------+ example: 以下声明包含一个 Condition 元素,该元素使用 DateLessThan 条件运算符与 nos:CurrentTime 键来指定必须在 2013 年 6 月 30 日之前收到请求。 .. code:: json { "Version": "2018-06-25", "Statement": { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:GetObject"], "Resource": ["comb:nos:examplebucket/*"], "Condition": {"DateLessThan": {"nos:CurrentTime": "2013-06-30T00:00:00Z"}} } } 布尔值条件运算符 利用布尔值条件,您可以构建基于键与“正确”或“错误”的对比来限制访问的 Condition 元素。 +--------------+--------------+ | 条件运算符 | 说明 | +==============+==============+ | Bool | 布尔值匹配 | +--------------+--------------+ example: 下列声明使用 Bool 条件运算符与 nos:SecureTransport 键来指定必须使用 SSL 发出请求。 .. code:: json { "Version": "2018-06-25", "Statement": { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:GetObject"], "Resource": ["comb:nos:examplebucket/*"], "Condition": {"Bool": {"nos:SecureTransport": "true"}} } } IP 地址条件运算符 利用 IP 地址条件运算符,您可以构建 Condition 元素,它们会基于键与 IPv4 或 IPv6 地址或 IP 地址范围的对比来限制访问。可以用nws:SourceIp键使用它们。该值必须采用标准的 CIDR 格式 (例如 203.0.113.0/24 或 2001:DB8:1234:5678::/64)。如果您指定的 IP 地址没有关联的路由前缀, 将使用 /32 作为默认前缀值。 +----------------+----------------------------------------+ | 条件运算符 | 说明 | +================+========================================+ | IpAddress | 指定的 IP 地址或范围 | +----------------+----------------------------------------+ | NotIpAddress | 除指定 IP 地址或范围外的所有 IP 地址 | +----------------+----------------------------------------+ 下列声明使用 IpAddress 条件运算符与 nos:SourceIp 键来指定必须从 IP 范围 203.0.113.0 至 203.0.113.255 发出请求。 .. code:: json { "Statement": { "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:GetObject"], "Resource": ["comb:nos:examplebucket/*"], "Condition": {"IpAddress": {"nws:SourceIp": "203.0.113.0/24"}} } } 集合条件限定词 如果请求中的某个条件键存在多个值,那么可以使用集合条件限定词来修饰运算符,改变评估逻辑。 目前仅支持ForAnyValue和ForAllValues两个限定词 - ForAnyValue – 如果请求中的任何一个键值与策略中的任何一个条件值匹配,则该条件将返回 true。 - ForAllValues – 如果请求中的每个指定的键值都与策略中至少一个值匹配,则该条件将返回 true。 示例: .. code:: json { "Statement": [{ "Sid":"test", "Effect": "Allow", "Principal": {"nws":["nrn:nws:iam::productid:root"]}, "Action": ["nos:GetObject"], "Resource": ["comb:nos:*"], "Condition": {"ForAllValues:StringLike": {"nos:prefix": [ "aa", "bb", "cc" ]}} }] } **注意** :: 如果请求中的键值解析为空数据集,则 ForAllValues 修改的条件运算符将返回 true,而 ForAnyValue 修改的条件运算符将返回 false。 .. |image0| image:: rbc/condition-block.png